Buffer overflow în curl și libcurl, manifestat la accesarea printr-un proxy SOCKS5

A fost identificată o vulnerabilitate (CVE-2023-38545) în utilitarul de primire și trimitere de date prin rețeaua curl și biblioteca libcurl, care este dezvoltată în paralel, ceea ce poate duce la o depășire a memoriei tampon și, eventual, la executarea codului atacatorului pe partea client când este accesat folosind utilitarul curl sau o aplicație care utilizează libcurl, la un server HTTPS controlat de atacator. Problema apare numai dacă accesul prin intermediul unui proxy SOCKS5 este activat în curl. Când accesați direct fără proxy, vulnerabilitatea nu apare. Vulnerabilitatea este remediată în versiunea curl 8.4.0. Cercetatorul de securitate care a descoperit eroarea a primit o recompensă de 4660 USD ca parte a inițiativei Internet Bug Bounty a Hackerone.

Vulnerabilitatea este cauzată de o eroare în codul de rezoluție a numelui de gazdă înainte de a accesa proxy-ul SOCKS5. Dacă numele gazdei are până la 256 de caractere, curl transmite imediat numele proxy-ului SOCKS5 pentru rezoluție pe partea sa, iar dacă numele are mai mult de 255 de caractere, trece la soluția locală și transmite adresa deja definită către SOCKS5. . Din cauza unei erori în cod, indicatorul care indică necesitatea rezoluției locale ar putea fi setat la o valoare greșită în timpul negocierii lente a unei conexiuni prin SOCKS5, ceea ce a dus la înregistrarea unui nume lung de gazdă într-un buffer alocat cu așteptarea. de stocare a adresei IP sau a numelui, care nu depășește 255 de caractere.

Proprietarul unui site accesat de curl printr-un proxy SOCKS5 poate declanșa o depășire a memoriei tampon pe partea client, returnând un cod de redirecționare a cererii (HTTP 30x) și setând antetul „Locație:” la o adresă URL cu un nume de gazdă în intervalul de 16 în sus. până la 64 KB (16 KB este dimensiunea minimă necesară pentru a depăși tamponul alocat și 65 KB este lungimea maximă permisă pentru numele de gazdă într-o adresă URL). Dacă redirecționarea cererii este activată în setările libcurl și proxy-ul SOCKS5 utilizat este suficient de lent, atunci numele lung de gazdă va fi scris într-un buffer mic, evident de o dimensiune mai mică.

Vulnerabilitatea afectează în principal aplicațiile bazate pe libcurl și apare în utilitarul curl numai atunci când se folosește opțiunea „--limit-rate” cu o valoare mai mică de 65541 - libcurl alocă implicit un buffer de 16 KB în dimensiune, iar în utilitarul curl este de 100 KB, dar această dimensiune se schimbă în funcție de valoarea parametrului „-limit-rate”.

Daniel Stenberg, autorul proiectului, a menționat că vulnerabilitatea a rămas nedetectată timp de 1315 zile. Se mai spune că 41% dintre vulnerabilitățile identificate anterior în curl ar fi putut fi evitate dacă curl ar fi fost scris într-un limbaj sigur pentru memorie, dar nu există planuri de a rescrie curl într-o altă limbă în viitorul apropiat. Ca măsuri de îmbunătățire a securității bazei de cod, se propune extinderea instrumentelor de testare a codului și utilizarea mai activă a dependențelor scrise în limbaje de programare care să asigure funcționarea sigură cu memorie. De asemenea, are în vedere posibilitatea înlocuirii treptate a părților curl cu opțiuni scrise în limbi sigure, cum ar fi backend-ul experimental Hyper HTTP implementat în Rust.

Sursa: opennet.ru

Adauga un comentariu