Podatność w bibliotece curl/libcurl powoduje przepełnienie bufora sterty (heap-based buffer overflow) podczas nawiązywania połączenia z proxy SOCKS5. Jest to błąd krytyczny umożliwiający zdalnemu atakującemu potencjalne wykonanie dowolnego kodu bez żadnego uwierzytelnienia.
▸ Pokaż oryginał (EN)
This flaw makes curl overflow a heap based buffer in the SOCKS5 proxy handshake. When curl is asked to pass along the host name to the SOCKS5 proxy to allow that to resolve the address instead of it getting done by curl itself, the maximum length that host name can be is 255 bytes. If the host name is detected to be longer, curl switches to local name resolving and instead passes on the resolved address only. Due to this bug, the local variable that means "let the host resolve the name" could get the wrong value during a slow SOCKS5 handshake, and contrary to the intention, copy the too long host name to the target buffer instead of copying just the resolved address there. The target buffer being a heap based buffer, and the host name coming from the URL that curl has been told to operate with.
Gdy curl jest skonfigurowany do przekazywania nazwy hosta do proxy SOCKS5 (zamiast samodzielnego rozwiązywania adresu), dopuszczalna długość nazwy hosta wynosi maksymalnie 255 bajtów. Jeśli nazwa hosta jest dłuższa, curl powinien lokalnie rozwiązać adres i przekazać wyłącznie wynikowy adres IP. Z powodu błędu logicznego, podczas wolnego handshake SOCKS5 lokalna zmienna odpowiedzialna za wybór trybu rozwiązywania nazwy może przyjąć nieprawidłową wartość. W efekcie zbyt długa nazwa hosta (pochodząca z przetworzonego przez curl adresu URL) jest kopiowana bezpośrednio do docelowego bufora sterty zamiast rozwiązanego adresu, powodując jego przepełnienie (CWE-787: Out-of-bounds Write).
Atakujący może wywołać przepełnienie bufora sterty, co w konsekwencji może prowadzić do wykonania dowolnego kodu (RCE), uzyskania nieautoryzowanego dostępu do danych (naruszenie poufności i integralności) lub spowodowania awarii aplikacji (naruszenie dostępności).
Należy zastosować patche dostępne u producenta zgodnie z referencjami. Dla curl/libcurl szczegółowe informacje o poprawce dostępne są pod adresem https://curl.se/docs/CVE-2023-38545.html. Jako obejście tymczasowe należy rozważyć unikanie konfiguracji przekazującej rozwiązywanie nazw do proxy SOCKS5 lub ograniczenie długości obsługiwanych nazw hostów na poziomie aplikacji.
Haxx libcurl (oraz narzędzie curl), Fedoraproject Fedora, NetApp Active IQ Unified Manager, NetApp OnCommand Insight, NetApp OnCommand Workflow Automation — konkretne wersje wskazane w referencjach producenta (curl.se/docs/CVE-2023-38545.html)
Podatność dotyczy wyłącznie scenariuszy, w których curl jest skonfigurowany do korzystania z proxy SOCKS5 z delegowaniem rozwiązywania nazw DNS do proxy. Błąd jest uzależniony od czasu trwania handshake (tzw. race condition na zmiennej lokalnej podczas wolnego handshake), co może wpływać na powtarzalność jego wywołania.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HFedora Project Fedora
OSFedoraproject37Haxx Libcurl
APPHaxx7.69.0 – 8.4.0 (bez)Microsoft Windows 10 1809
OSMicrosoft< 10.0.17763.5122Microsoft Windows 10 21h2
OSMicrosoft< 10.0.19044.3693Microsoft Windows 10 22h2
OSMicrosoft< 10.0.19045.3693Microsoft Windows 11 21h2
OSMicrosoft< 10.0.22000.2600Microsoft Windows 11 22h2
OSMicrosoft< 10.0.22621.2715Microsoft Windows 11 23h2
OSMicrosoft< 10.0.22631.2715Microsoft Windows Server 2019
OSMicrosoft< 10.0.17763.5122Microsoft Windows Server 2022
OSMicrosoft< 10.0.20348.2113Netapp Active Iq Unified Manager
APPNetappwszystkie wersjeNetapp Oncommand Insight
APPNetappwszystkie wersjeNetapp Oncommand Workflow Automation
APPNetappwszystkie wersje
Powiązane podatności
Double free w Windows IKE Extension umożliwia zdalne wykonanie kodu
RCE w Windows Server Update Service (WSUS) — deserializacja danych
PHP CGI argument injection – RCE na Windows przez mechanizm Best-Fit
Type Confusion w V8 (Google Chrome) — RCE przez spreparowaną stronę HTML
Type Confusion w silniku V8 Chrome — zdalne wykonanie kodu (RCE)