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:

  1. 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.
  2. Serwer, jeszcze przed zakończeniem procesu uwierzytelniania, odsyła do klienta spreparowany komunikat o błędzie, np. rfbConnFailed lub rfbVncAuthFailed 5.
  3. 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 na 0xFFFFFFFF, czyli maksymalną wartość dla 32-bitowej liczby bez znaku, co odpowiada 4 gigabajtom 13.
  4. Kod klienta, przygotowując bufor na przyjęcie tej wiadomości, wykonuje operację arytmetyczną reasonLen + 1 14. Z powodu błędu przepełnienia liczby całkowitej (integer overflow), wynik tej operacji ( 0xFFFFFFFF + 1 ) jest równy 0 13 15.
  5. 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.
  6. 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ż

Przypisy

  1. Dotknięte produkty to przeglądarka UltraVNC w wersjach do 1.8.2.2 włącznie. — sentinelone.com › cve 2026 7838 2 3

  2. Luka CVE-2026-7838 została opublikowana w National Vulnerability Database (NVD) 1 lipca 2026 roku. — sentinelone.com › cve 2026 7838 2

  3. Może to potencjalnie skutkować zdalnym wykonaniem kodu jako użytkownik uruchamiający przeglądarkę. — nvd.nist.gov › CVE 2026 7838 2

  4. 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

  5. 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

  6. 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…

  7. Luka jest klasyfikowana jako integer overflow (CWE-190), który eskaluje do heap buffer overflow. — sentinelone.com › cve 2026 7838

  8. 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

  9. Wdrożenia klienta UltraVNC na systemach Windows są dotknięte. — sentinelone.com › cve 2026 7838 2

  10. 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

  11. 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

  12. 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

  13. 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

  14. Kod przekazuje reasonLen+1 do CheckBufferSize() w celu określenia rozmiaru bufora odbiorczego. — sentinelone.com › cve 2026 7838

  15. Gdy serwer wysyła wartość reasonLen równą 0xFFFFFFFF, dodawanie zawija się do 0. — sentinelone.com › cve 2026 7838

  16. CheckBufferSize() interpretuje zawiniętą wartość i alokuje tylko minimalny bufor o rozmiarze 256 bajtów. — sentinelone.com › cve 2026 7838

  17. 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

  18. 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…

  19. 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…

  20. 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