Buffer overflow i curl og libcurl, der opstår ved adgang via SOCKS5-proxy.

I værktøjet til at hente og sende data over nettet, curl, samt i den tilhørende bibliotek libcurl, er der opdaget en sårbarhed (CVE-2023-38545), der kan føre til buffer overflow og potentielt muliggøre udførelse af angriberens kode på klientsiden, når der oprettes forbindelse til en HTTPS-server kontrolleret af en skadelig aktør. Problemet opstår kun, når curl har adgang gennem en SOCKS5-proxy. Ved direkte adgang uden proxy opstår sårbarheden ikke. Sårbarheden er blevet rettet i curl version 8.4.0. Forskeren, der afslørede fejlen, modtog en belønning på $4660 gennem Internet Bug Bounty-initiativet på Hackerone.

Sårbarheden skyldes en fejl i koden til oplysning af hostnavn før anmodning til SOCKS5-proxy. Hvis hostnavnet er op til 256 tegn langt, sender curl straks navnet til SOCKS5-proxyen for opløsning på dens side. Er navnet længere end 255 tegn, skifter den til en lokal resolver og sender allerede den bestemte adresse til SOCKS5. På grund af en fejl i koden kunne flaget, der angiver behovet for lokal opløsning, under en langsom forbindelse gennem SOCKS5 være sat til den forkerte værdi, hvilket førte til, at det lange hostnavn blev skrevet i bufferet, der var allokeret til at gemme IP-adresser eller et navn, der ikke overstiger 255 tegn.

Ejeren af den hjemmeside, som curl tilgår via SOCKS5-proxyen, kan initiere buffer overflow på klientsiden ved at returnere en omdirigeringskode (HTTP 30x) og angive en header med "Location:" og en URL med et hostnavn, hvis størrelse ligger mellem 16 og 64 KB (16 KB er det minimale størrelse, der kræves for at overfylde den allokerede buffer, mens 65 KB vedrører den maksimalt tilladte længde af hostnavnet i en URL). Hvis omdirigering er aktiveret i libcurl og den anvendte SOCKS5-proxy er tilstrækkeligt langsom, vil det lange hostnavn blive skrevet ind i en lille buffer, der er betydeligt mindre i størrelse.

Sårbarheden berører primært applikationer baseret på libcurl og opstår i curl-værktøjet kun ved brug af indstillingen "—limit-rate" med en værdi mindre end 65541 — i libcurl allokeres der som standard en buffer på 16 KB, mens curl-værktøjet har 100 KB, men denne størrelse ændres afhængigt af værdien af parameteren "—limit-rate".

Daniel Stenberg, projektets forfatter, nævnte, at sårbarheden forblev uopdaget i 1315 dage. Det blev også sagt, at 41% af de tidligere identificerede sårbarheder i curl sandsynligvis kunne være undgået, hvis curl var skrevet i et sprog, der sikrer sikker håndtering af hukommelse, men der er ikke planer om at omskrive curl til et andet sprog i den nærmeste fremtid. Som sikkerhedsforanstaltninger foreslås det at udvide værktøjsparken til kodetestning og mere aktivt bruge afhængigheder skrevet på programmeringssprog, der sikrer sikker hukommelseshåndtering. Der overvejes også en trinvis udskiftning af dele af curl med versioner skrevet i sikre sprog, såsom den eksperimentelle HTTP-backend Hyper, implementeret i Rust.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster