CVE-2026-7838
WysokieCVSS 8.8Prawdopodobieństwo exploitacji (EPSS)
Podwyższone ryzykoPercentyl 69 - wyżej niż 69% wszystkich znanych CVE
Streszczenie
W UltraVNC viewer do wersji 1.8.2.2 wykryto przepełnienie liczby całkowitej prowadzące do przepełnienia bufora sterty w ścieżce parsowania odpowiedzi błędu protokołu RFB. Pole reasonLen o rozmiarze 4 bajtów (typ CARD32) jest przekazywane jako reasonLen+1 do funkcji CheckBufferSize(), a przy wartości 0xFFFFFFFF dochodzi do przepełnienia do 0, co powoduje alokację tylko 256 bajtów. Następnie funkcja ReadString() odczytuje oryginalne 4 GiB danych do tego małego bufora, co prowadzi do przepełnienia.
Ocena ryzyka
Zdalny, nieuwierzytelniony atakujący (serwer VNC lub osoba w środku) może wykorzystać tę podatność do zdalnego wykonania kodu na komputerze ofiary, przejmując kontrolę nad systemem. Atak jest możliwy bez konieczności uwierzytelnienia, wystarczy, że ofiara połączy się ze złośliwym serwerem.
Rekomendacja
Należy natychmiast zaktualizować UltraVNC viewer do wersji nowszej niż 1.8.2.2, gdy tylko producent wyda łatkę. Do czasu aktualizacji zaleca się unikanie łączenia się z niezaufanymi serwerami VNC oraz stosowanie szyfrowania tunelowego (np. SSH) w celu ochrony przed atakami MITM.
Inne podatności w UltraVNC
Zobacz wszystkie- CVE-2026-7831Wysokie
UltraVNC viewer do wersji 1.8.2.2 zawiera przepełnienie bufora stosu o jeden bajt w obsłudze wiadomości ServerInit protokołu RFB. Gdy serwer poda nazwę pulpitu o długości dokładnie 2024 bajtów, funkcja ReadString zapisuje znak null poza przydzielonym buforem, co może prowadzić do uszkodzenia danych na stosie.
- CVE-2026-7830Wysokie
UltraVNC do wersji 1.8.2.2 używa słabej kryptografii w schemacie uwierzytelniania MS-Logon II. Wymiana kluczy Diffie-Hellmana opiera się na parametrach 64-bitowych, które można złamać w ułamku sekundy, a generator liczb losowych oparty na funkcji rand() z ziarnem czasowym pozwala na odzyskanie klucza prywatnego w minutę.
- CVE-2026-7828Średnie
W repeaterze UltraVNC do wersji 1.8.2.2 występuje przepełnienie liczby całkowitej w funkcji win_log() podczas alokacji pamięci dla listy węzłów. Atakujący może wysłać odpowiednio długi URI HTTP, co prowadzi do przepełnienia bufora sterty, potencjalnie umożliwiając częściowy zapis poza przydzielonym obszarem.
- CVE-2026-44041Średnie
Podatność w UltraVNC do wersji 1.8.2.2 powoduje odczyt poza zakresem w funkcji konwersji szerokich znaków na wielobajtowe. Funkcja vncWc2Mb() wywołuje wcslen() na buforze dostarczonym przez wywołującego bez wcześniejszego sprawdzenia granic, co może prowadzić do odczytu poza przydzieloną pamięcią.
- CVE-2026-44040Średnie
UltraVNC do wersji 1.8.2.2 używa kryptograficznie słabego generatora liczb pseudolosowych do tworzenia bajtów wyzwania uwierzytelniania VNC. Funkcja vncRandomBytes() inicjuje libc rand() wartościami time(0) + getpid() + rand(), co daje przestrzeń seeda około 31 bitów, całkowicie determinowaną przez publicznie obserwowalne wartości (czas i PID). Atakujący może przewidzieć wyzwanie w ciągu sekund, co umożliwia fałszowanie lub brute-force odpowiedzi.
Oryginalny opis (angielski, źródło NVD)
UltraVNC viewer through 1.8.2.2 contains an integer overflow leading to a heap buffer overflow in the RFB protocol failure-response parsing path. In vncviewer/ClientConnection.cpp, the 4-byte network-supplied reasonLen field (type CARD32) is passed as reasonLen+1 to CheckBufferSize(). Because both operands are unsigned 32-bit, a reasonLen of 0xFFFFFFFF overflows to 0, causing CheckBufferSize to allocate only 256 bytes. The subsequent ReadString(m_netbuf, reasonLen) call then performs ReadExact for the original 4 GiB length into that 256-byte heap buffer. This overflow is reachable via rfbConnFailed (auth-scheme negotiation) and rfbVncAuthFailed (post-handshake) message types without successful authentication. A malicious VNC server, or any man-in-the-middle on the RFB stream, can trigger this condition when the victim viewer connects, potentially resulting in remote code execution as the user running the viewer. The crash was confirmed with AddressSanitizer on a portable reproduction harness (heap-buffer-overflow WRITE at offset 256).

