FreeRDP przed wersją 3.29.0 zawiera podatność typu buffer over-disclosure w module transportu WebSocket bramy (gateway). Błąd umożliwia złośliwej bramie wyłudzenie danych z pamięci klienta oraz spowodowanie jego awarii (denial of service).
▸ Pokaż oryginał (EN)
FreeRDP before 3.29.0 contains a buffer over-disclosure vulnerability in the gateway WebSocket transport (libfreerdp/core/gateway/websocket.c). The client's Pong reply reuses a fixed 1024-byte response stream whose length is not sealed to the actual received Ping payload, so a malicious gateway/WebSocket peer sending a non-empty Ping control frame causes the client to reply with an overlong Pong that discloses bytes beyond the received payload (the peer receives the masking key and can unmask the reply). A zero-length Ping reaches an assertion and terminates the client (denial of service).
Klient przy odpowiedzi na ramkę kontrolną Ping WebSocket ponownie wykorzystuje stały bufor odpowiedzi o rozmiarze 1024 bajtów, nie ograniczając długości odpowiedzi Pong do rzeczywistego rozmiaru odebranego Ping. W efekcie złośliwa brama wysyłająca niepustą ramkę Ping powoduje, że klient odsyła zbyt długi Pong zawierający bajty spoza odebranego payloadu — w tym klucz maskujący, który pozwala drugiej stronie odmaskować odpowiedź i odczytać niezamierzone dane z pamięci. Natomiast ramka Ping o zerowej długości prowadzi do wywołania asercji i nagłego zakończenia procesu klienta.
Atakujący kontrolujący bramę lub peer WebSocket może uzyskać nieuprawniony dostęp do fragmentów pamięci klienta (ujawnienie wrażliwych danych) lub spowodować awarię aplikacji klienckiej (denial of service).
Należy zaktualizować FreeRDP do wersji 3.29.0 lub nowszej. Poprawka dostępna jest w commicie f3b4347105114fe7453828736bea069999af319f w repozytorium projektu na GitHub.
FreeRDP we wszystkich wersjach przed 3.29.0
CWE-130 (Improper Handling of Length Parameter Inconsistency) — podatność dotyczy wyłącznie scenariusza, w którym klient łączy się przez złośliwą lub skompromitowaną bramę WebSocket/RDP. Zagrożenie jest ograniczone do klientów korzystających z trybu bramy WebSocket.
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X