Chyba nie ma osoby w IT, która nie używałaby popularnego programu z tytułu. Dlatego dzisiaj postanowiliśmy opisać pewien związany z nim problem, ponieważ ci, którzy przyzwyczaili się do niego w codziennej pracy, mogą być narażeni na atak ze strony cyberprzestępców.
W poprzednim tygodniu pisaliśmy o podobnym przypadku, ale w aplikacji WinRAR. Tym razem odkryto wiele usterek w aplikacji Notepad++, pozwalających atakującym na wykonanie dowolnego kodu. Możesz otworzyć złośliwy plik w aplikacji, a w tle niekontrolowanie wykona się dowolny kod, który może uruchomić malware na Twoim komputerze.
Krótko o Notepad ++
Notepad++ to edytor kodu źródłowego i zamiennik Notatnika w Microsoft Windows, oparty na C++ typu open source. Działa w architekturze procesorów opartych na x86, x64 i AArch64. Notepad++ obsługuje edycję na kartach i umożliwia pracę z wieloma plikami w jednym oknie. Rozwinął go Don Ho.
Ponieważ aplikacja jest darmowa, jej bezpieczeństwo z natury może pozostawiać wiele do życzenia. W końcu ktoś wziął ją na warsztat i pokazał podatności.
Podatności w Notepad++
Nowe podatności w Notepad++ odkrył i opublikował SecurityLab. Wykryto w kilka luk w zabezpieczeniach związanych z przepełnieniem bufora, które mogą zostać wykorzystane przez cyberprzestępców do szkodliwych celów. Istotność luk waha się od 5,5 (średnia) do 7,8 (wysoka).
Luki wynikają z przepełnienia bufora zapisu i odczytu bufora sterty w niektórych funkcjach i bibliotekach używanych przez oprogramowanie, zidentyfikowanych przez badacza bezpieczeństwa Gitlab Jaroslava Lobačevskiego (@JarLob).
CVE-2023-40031: Przepełnienie bufora sterty w Utf8_16_Read::convert
Notepad++ używa funkcji o nazwie Utf8_16_Read::convert, która konwertuje kodowanie UTF16 na UTF8. Funkcja ma wadę, ponieważ zakłada, że na każde dwa bajty zakodowane w UTF16 potrzebne są trzy bajty zakodowane w UTF8. Jeśli fragment bajtów jest ustawiony na wartość nieparzystą, np. 9, obliczenia stają się niezgodne, co skutkuje przepełnieniem bufora.
CVE-2023-40036: Przepełnienie globalnego bufora podczas odczytu w CharDistributionAnalytics::HandleOneChar
Luka ta istnieje, ponieważ kolejność indeksów tablicy zależy od rozmiaru bufora mCharToFreqOrder, który podmiot zagrażający może wykorzystać, specjalnie tworząc plik prowadzący do przepełnienia globalnego bufora podczas odczytu bufora. Dodatkowo aplikacja korzysta również z biblioteki uchardet, która wspiera tę operację.
CVE-2023-40164: Przepełnienie globalnego bufora podczas odczytu w nsCodingStateMachine::NextState
Notepad++ używa rozbieżnej kopii biblioteki uchardet, która okazała się podatna na przepełnienie globalnego bufora odczytu. Dzieje się tak, ponieważ indeks tablicy byteCls jest zależny od rozmiaru bufora charLenTable, który może wykorzystać specjalnie spreparowany plik.
CVE-2023-40166: Przepełnienie bufora sterty podczas odczytu w FileManager::detectLanguageFromTextBegining
Otwierając plik, Notepad++ wywołuje funkcję FileManager::loadFile, która przydziela bufor o stałym rozmiarze, a następnie FileManager::loadFileData ładuje pierwszy blok danych do bufora.
Następnie wywołuje metodę DetectLanguageFromTextBegining, aby zidentyfikować typ zawartości punktu początkowego pliku. Błąd istnieje, ponieważ pętla FileManager::detectLanguageFromTextBegining nie sprawdza, czy i+longestlength < dataLen, co powoduje przepełnienie bufora.
Jak żyć z nowymi podatnościami w Notepad++?
Notepad++ nie załatał tych luk (nawet w najnowszej wersji do pobrania na stronie – v8.5.6) ani nie potwierdził jeszcze poprawek usuwających je. Jednakże zgodnie ze skoordynowaną polityką ujawniania informacji, GitLab opublikował luki wraz z weryfikacją koncepcji. Raport z przykładami kodu możecie zobaczyć tutaj.
Do czasu załatania powyższych luk zalecamy ostrożne posługiwanie się programem. W szczególności należy uważać przy otwieraniu zewnętrznych plików o nieznanym pochodzeniu.