FreeRDP w wersjach 3.x do 3.27.1 zawiera podatność double-free podczas parsowania pola selectedmonitors w pliku .rdp. Atakujący może doprowadzić do dwukrotnego zwolnienia tego samego obszaru pamięci, co w domyślnej konfiguracji klientów FreeRDP stanowi poważne zagrożenie.
▸ Pokaż oryginał (EN)
FreeRDP before 3.28.0 (affected 3.x through 3.27.1) contains a double-free vulnerability in freerdp_client_rdp_file_apply_to_settings() (client/common/file.c) when parsing the selectedmonitors field of a .rdp connection file. The MonitorIds array is allocated through the settings object, and a raw non-owning pointer to it is freed on the strtoul error path without clearing settings->MonitorIds, leaving it dangling; at teardown freerdp_settings_free() frees the same buffer again. An attacker who convinces a victim to open a crafted .rdp file with oversized monitor tokens can trigger a size-controlled double-free in any FreeRDP CLI client (xfreerdp/sdl-freerdp/wlfreerdp) in the default configuration.
W funkcji freerdp_client_rdp_file_apply_to_settings() tablica MonitorIds jest alokowana przez obiekt settings. Przy błędzie wywołania strtoul (np. gdy token monitora ma nadmierny rozmiar) wskaźnik do tej tablicy jest zwalniany bezpośrednio przez surowowy wskaźnik nieposiadający własności zasobu, jednak pole settings->MonitorIds nie jest przy tym zerowane. W efekcie wskaźnik pozostaje wiszący (dangling pointer), a podczas późniejszego niszczenia obiektu funkcja freerdp_settings_free() ponownie zwalnia ten sam bufor. Aby wywołać błąd, atakujący musi nakłonić ofiarę do otwarcia spreparowanego pliku .rdp zawierającego nadmiernie duże tokeny monitorów.
Atakujący może wywołać kontrolowane rozmiarem double-free, co może prowadzić do uszkodzenia sterty, wykonania dowolnego kodu (RCE) lub destabilizacji aplikacji. Zagrożeni są użytkownicy klientów xfreerdp, sdl-freerdp oraz wlfreerdp w domyślnej konfiguracji.
Należy zaktualizować FreeRDP do wersji 3.28.0 lub nowszej. Patch dostępny w repozytorium GitHub projektu (commit 1f7a716d39b5605bb8a83b0c3c97a6ce386609ef). Do czasu aktualizacji należy unikać otwierania plików .rdp pochodzących z niezaufanych źródeł.
FreeRDP w wersjach 3.x od 3.0.0 do 3.27.1 włącznie (wersje 2.x nie są wymienione jako podatne)
Podatność jest sklasyfikowana jako CWE-415 (Double Free). Wektor ataku wymaga interakcji użytkownika — otworzenia spreparowanego pliku .rdp. Szczegóły opublikowane zostały również w ramach GitHub Security Advisory GHSA-f27x-frr8-j9hc.
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:XFreerdp
APPFreerdp3.0.0 – 3.28.0 (bez)
Powiązane podatności
FreeRDP: heap-based buffer overflow w crypto_rsa_common() przed uwierzytelnieniem
FreeRDP: heap buffer overflow w obsłudze NSCodec (gdi_surface_bits)
FreeRDP: out-of-bounds read w klientach przed wersją 3.5.1
FreeRDP: out-of-bounds read przy zerowych wymiarach obrazu (RDP)
FreeRDP: integer overflow i out-of-bounds write w obsłudze GFX