Bufferoverflyt i curl og libcurl, manifestert ved tilgang via en SOCKS5-proxy

En sårbarhet (CVE-2023-38545) er identifisert i verktøyet for mottak og sending av data over curl-nettverket og libcurl-biblioteket, som utvikles parallelt, noe som kan føre til bufferoverflyt og potensielt kjøring av angriperkode på klientsiden når den åpnes ved hjelp av curl-verktøyet eller en applikasjon som bruker libcurl, til en HTTPS-server kontrollert av angriperen. Problemet vises bare hvis tilgang via en SOCKS5-proxy er aktivert i curl. Ved direkte tilgang uten proxy vises ikke sårbarheten. Sårbarheten er løst i curl 8.4.0-utgivelsen. Sikkerhetsforskeren som oppdaget feilen mottok en belønning på $4660 som en del av Hackerones Internet Bug Bounty-initiativ.

Sårbarheten er forårsaket av en feil i vertsnavnoppløsningskoden før tilgang til SOCKS5-proxyen. Hvis vertsnavnet er opptil 256 tegn langt, sender curl umiddelbart navnet til SOCKS5-proxyen for oppløsning på siden, og hvis navnet er mer enn 255 tegn, bytter den til den lokale løseren og sender den allerede definerte adressen til SOCKS5 . På grunn av en feil i koden, kan flagget som indikerer behovet for lokal oppløsning settes til feil verdi under langsom forhandling av en forbindelse via SOCKS5, noe som førte til registrering av et langt vertsnavn i en buffer tildelt med forventningen for å lagre IP-adressen eller navnet, ikke over 255 tegn.

Eieren av et nettsted tilgang til av curl gjennom en SOCKS5-proxy kan utløse bufferoverløp på klientsiden ved å returnere en forespørselsomdirigeringskode (HTTP 30x) og sette "Location:"-overskriften til en URL med et vertsnavn i området 16 opp til 64 KB (16 KB er minimumsstørrelsen som kreves for å overflyte den tildelte bufferen, og 65 KB er maksimalt tillatt vertsnavnlengde i en URL). Hvis omdirigering av forespørsel er aktivert i libcurl-innstillingene og SOCKS5-proxyen som brukes er treg nok, vil det lange vertsnavnet bli skrevet til en liten buffer, åpenbart av mindre størrelse.

Sårbarheten påvirker hovedsakelig applikasjoner basert på libcurl og vises kun i curl-verktøyet når du bruker alternativet "--limit-rate" med en verdi mindre enn 65541 - libcurl tildeler som standard en buffer på 16 KB i størrelse, og i curl-verktøyet den er 100 KB, men denne størrelsen endres avhengig av verdien av parameteren "-limit-rate".

Daniel Stenberg, forfatteren av prosjektet, nevnte at sårbarheten forble uoppdaget i 1315 dager. Den sier også at 41 % av tidligere identifiserte sårbarheter i curl sannsynligvis kunne vært unngått hvis curl hadde blitt skrevet på et minnesikkert språk, men det er ingen planer om å omskrive curl til et annet språk i overskuelig fremtid. Som tiltak for å forbedre sikkerheten til kodebasen, foreslås det å utvide verktøyene for å teste kode og mer aktivt bruke avhengigheter skrevet på programmeringsspråk som sikrer sikker drift med minne. Den vurderer også muligheten for gradvis å erstatte deler av curl med varianter skrevet på sikre språk, for eksempel den eksperimentelle Hyper HTTP-backend implementert i Rust.

Kilde: opennet.ru

Legg til en kommentar