Próba zapisu 4 gigabajtów danych do 256-bajtowego bufora pamięci kończy się przepełnieniem. Taki błąd zaobserwowano w kliencie UltraVNC w wersjach do 1.8.2.2 włącznie 1. Luka, oznaczona jako CVE (Common Vulnerabilities and Exposures, identyfikator publicznie znanej luki) CVE-2026-7838 2, może pozwolić na zdalne wykonanie kodu (RCE — Remote Code Execution) na maszynie, z której inicjowane jest połączenie 3.
UltraVNC to popularne, otwarte oprogramowanie do zdalnego dostępu, często wykorzystywane w polskich firmach do administracji serwerami i świadczenia wsparcia technicznego. Podatność znajduje się w komponencie klienta (viewer), co oznacza, że zagrożony jest komputer administratora, a nie serwer, z którym się łączy. Atak może zostać przeprowadzony przez złośliwy serwer VNC lub poprzez atak typu Man-in-the-Middle (MITM — atak polegający na podsłuchaniu lub modyfikacji ruchu) 4. Co istotne, atak nie wymaga pomyślnego uwierzytelnienia 5.
TL;DR
- Produkt: Klient (viewer) UltraVNC w wersjach do 1.8.2.2 włącznie 1.
- Wektor: Połączenie się z podstawionym, złośliwym serwerem VNC lub atak MITM na nieszyfrowane połączenie RFB 4 6.
- Luka: CVE-2026-7838 2. Błąd typu integer overflow 7 prowadzący do przepełnienia bufora na stercie (heap buffer overflow) 8.
- Wskaźniki kompromitacji (IoC): Obecnie brak publicznych wskaźników IoC (Indicators of Compromise — hashe plików, adresy IP, domeny) powiązanych z aktywnym wykorzystaniem tej luki.
- Kogo dotyczy: Administratorzy systemów, działy wsparcia IT oraz wszystkie polskie firmy MŚP i korporacje, których pracownicy używają klienta UltraVNC do zdalnego dostępu, szczególnie w systemach Windows 9.
- Pierwszy ruch: Inwentaryzacja oprogramowania w celu identyfikacji podatnych wersji UltraVNC i natychmiastowa aktualizacja do najnowszej, załatanej wersji.
Wektor ataku
Podatność ma swoje źródło w sposobie, w jaki klient UltraVNC przetwarza komunikaty o błędach w ramach protokołu RFB (Remote Framebuffer). Analiza kodu w pliku vncviewer/ClientConnection.cpp wskazuje na błąd logiczny w obsłudze pola reasonLen 10 11.
Mechanizm ataku przebiega następująco:
- Użytkownik za pomocą podatnego klienta UltraVNC próbuje połączyć się ze złośliwym serwerem VNC. Może to być również serwer kontrolowany przez atakującego w wyniku ataku MITM 4.
- Serwer, jeszcze przed zakończeniem procesu uwierzytelniania, odsyła do klienta spreparowany komunikat o błędzie, np.
rfbConnFailedlubrfbVncAuthFailed5. - W komunikacie tym znajduje się 4-bajtowe pole
reasonLen, określające długość wiadomości z opisem błędu 12. Atakujący ustawia wartość tego pola na0xFFFFFFFF, czyli maksymalną wartość dla 32-bitowej liczby bez znaku, co odpowiada 4 gigabajtom 13. - Kod klienta, przygotowując bufor na przyjęcie tej wiadomości, wykonuje operację arytmetyczną
reasonLen + 114. Z powodu błędu przepełnienia liczby całkowitej (integer overflow), wynik tej operacji (0xFFFFFFFF + 1) jest równy013 15. - Funkcja
CheckBufferSize()interpretuje ten wynik i, zamiast alokować bufor o wielkości 4 GB, przydziela domyślny, minimalny bufor o rozmiarze zaledwie 256 bajtów 13 16. - W kolejnym kroku funkcja
ReadString()próbuje wczytać do tego 256-bajtowego bufora dane o długości zdefiniowanej przez oryginalną wartośćreasonLen, czyli 4 GB 17.
Rezultatem jest masywne przepełnienie bufora na stercie (heap buffer overflow) 18. Atakujący, kontrolując zawartość przesyłanych danych, może nadpisać struktury danych w pamięci procesu klienta VNC. Może to prowadzić do wykonania dowolnego kodu z uprawnieniami użytkownika, który uruchomił program UltraVNC Viewer 3 19. Potwierdzono możliwość wywołania awarii aplikacji za pomocą narzędzia AddressSanitizer 20.
Wskaźniki kompromitacji
Na chwilę obecną nie opublikowano żadnych wskaźników kompromitacji (IoC) — takich jak hashe złośliwego oprogramowania, adresy IP serwerów C2 (Command and Control — serwer kontrolujący zainfekowane maszyny) czy domeny — które byłyby powiązane z kampaniami wykorzystującymi lukę CVE-2026-7838. Zaleca się jednak monitorowanie logów systemowych i sieciowych pod kątem nietypowych awarii procesu vncviewer.exe oraz prób połączeń VNC z nieznanymi hostami.
Co zrobić w 24-48h
Z uwagi na potencjalną możliwość zdalnego wykonania kodu, rekomenduje się podjęcie natychmiastowych działań. Luka dotyczy klienta, więc ryzyko leży po stronie stacji roboczych administratorów i zespołów wsparcia.
-
Identyfikacja i aktualizacja: Priorytetem jest zidentyfikowanie wszystkich instalacji UltraVNC Viewer w organizacji i sprawdzenie ich wersji. Wszystkie wersje do 1.8.2.2 włącznie są podatne 1. Należy je bezzwłocznie zaktualizować do najnowszej wersji udostępnionej przez producenta. Dotyczy to w szczególności wdrożeń na systemach Windows 9.
-
Ograniczenie ryzyka (jeśli aktualizacja jest niemożliwa): W scenariuszu, gdzie natychmiastowa aktualizacja nie jest możliwa, należy ograniczyć użycie UltraVNC wyłącznie do łączenia się z w pełni zaufanymi i zweryfikowanymi serwerami. Należy jednak pamiętać, że to nie eliminuje ryzyka ataku Man-in-the-Middle, szczególnie w niezaufanych sieciach (publiczne Wi-Fi, sieci hotelowe). * Weryfikacja konfiguracji: Upewnij się, że wszystkie połączenia VNC, jeśli to możliwe, są tunelowane przez VPN (Virtual Private Network — szyfrowane połączenie do internetu) lub SSH. Może to znacząco utrudnić przeprowadzenie ataku MITM, który jest jednym z wektorów wykorzystania tej luki 4.
-
Szkolenie zespołów: Polskie firmy świadczące usługi wsparcia IT powinny poinformować swoich techników o zagrożeniu. Należy ich uczulić, aby nie łączyli się z nieznanymi lub podejrzanymi serwerami VNC, a także aby zgłaszali wszelkie nietypowe zachowania aplikacji klienta. Podjęcie tych kroków może pomóc w ograniczeniu ryzyka związanego z tą podatnością. Rekomendowane podejście nie zastępuje jednak pełnego audytu bezpieczeństwa ani konsultacji ze specjalistami.
Źródła
Zobacz też
- Luka w Chrome (CVE-2026-9120) pozwala na zdalne wykonanie kodu
- CVE-2025-51427: RCE w ModelScope. Zagrożenie dla projektów AI
- CVE-2026-3820: Luka w serwerach Supermicro pozwala na zdalne przejęcie
Przypisy
-
Dotknięte produkty to przeglądarka UltraVNC w wersjach do 1.8.2.2 włącznie. — sentinelone.com › cve 2026 7838 ↩ ↩2 ↩3
-
Luka CVE-2026-7838 została opublikowana w National Vulnerability Database (NVD) 1 lipca 2026 roku. — sentinelone.com › cve 2026 7838 ↩ ↩2
-
Może to potencjalnie skutkować zdalnym wykonaniem kodu jako użytkownik uruchamiający przeglądarkę. — nvd.nist.gov › CVE 2026 7838 ↩ ↩2
-
Złośliwy serwer VNC lub dowolny atakujący typu man-in-the-middle w strumieniu RFB może wywołać ten warunek, gdy ofiara połączy się z przeglądarką. — nvd.nist.gov › CVE 2026 7838 ↩ ↩2 ↩3 ↩4
-
To przepełnienie jest osiągalne poprzez typy wiadomości rfbConnFailed (negocjacja schematu uwierzytelniania) i rfbVncAuthFailed (po uzgadnianiu) bez pomyślnego uwierzytelnienia. — nvd.nist.gov › CVE 2026 7838 ↩ ↩2
-
Luka może być wywołana przez złośliwy serwer VNC lub atakującego typu man-in-the-middle podczas wiadomości o błędach uwierzytelniania. — radar.offseq.com › cve 2026 7838 integer overflow or wraparound in… ↩
-
Luka jest klasyfikowana jako integer overflow (CWE-190), który eskaluje do heap buffer overflow. — sentinelone.com › cve 2026 7838 ↩
-
Przeglądarka UltraVNC do wersji 1.8.2.2 zawiera błąd typu integer overflow, który prowadzi do przepełnienia bufora sterty (heap buffer overflow) w ścieżce parsowania odpowiedzi o błędzie protokołu RFB. — nvd.nist.gov › CVE 2026 7838 ↩
-
Wdrożenia klienta UltraVNC na systemach Windows są dotknięte. — sentinelone.com › cve 2026 7838 ↩ ↩2
-
W pliku vncviewer/ClientConnection.cpp, 4-bajtowe pole reasonLen (typ CARD32) dostarczane przez sieć jest przekazywane jako reasonLen+1 do funkcji CheckBufferSize(). — nvd.nist.gov › CVE 2026 7838 ↩
-
Wada znajduje się w ścieżce parsowania odpowiedzi o błędzie protokołu Remote Framebuffer (RFB) w pliku vncviewer/ClientConnection.cpp. — sentinelone.com › cve 2026 7838 ↩
-
Przeglądarka UltraVNC odczytuje 4-bajtowe pole reasonLen typu CARD32 dostarczane przez sieć podczas obsługi odpowiedzi o błędzie RFB. — sentinelone.com › cve 2026 7838 ↩
-
Ponieważ oba operandy są 32-bitowymi liczbami bez znaku, wartość reasonLen równa 0xFFFFFFFF powoduje przepełnienie do 0, co sprawia, że CheckBufferSize alokuje tylko 256 bajtów. — nvd.nist.gov › CVE 2026 7838 ↩ ↩2 ↩3
-
Kod przekazuje reasonLen+1 do CheckBufferSize() w celu określenia rozmiaru bufora odbiorczego. — sentinelone.com › cve 2026 7838 ↩
-
Gdy serwer wysyła wartość reasonLen równą 0xFFFFFFFF, dodawanie zawija się do 0. — sentinelone.com › cve 2026 7838 ↩
-
CheckBufferSize() interpretuje zawiniętą wartość i alokuje tylko minimalny bufor o rozmiarze 256 bajtów. — sentinelone.com › cve 2026 7838 ↩
-
Następne wywołanie ReadString(m_netbuf, reasonLen) wykonuje ReadExact dla oryginalnej długości 4 GiB do tego 256-bajtowego bufora sterty. — nvd.nist.gov › CVE 2026 7838 ↩
-
Późniejsze odczytanie dużej wartości reasonLen do tego małego bufora skutkuje przepełnieniem bufora sterty. — radar.offseq.com › cve 2026 7838 integer overflow or wraparound in… ↩
-
Może to potencjalnie prowadzić do zdalnego wykonania kodu w kontekście użytkownika przeglądarki. — radar.offseq.com › cve 2026 7838 integer overflow or wraparound in… ↩
-
Awaria została potwierdzona za pomocą AddressSanitizer na przenośnym narzędziu do reprodukcji (heap-buffer-overflow WRITE at offset 256). — nvd.nist.gov › CVE 2026 7838 ↩
// Komentarze ...
Dodaj komentarz