Supraîncărcarea bufferului în curl și libcurl, apărută în timpul accesării prin proxy SOCKS5

În utilitarul de preluare și trimitere a datelor prin rețea curl și în biblioteca libcurl, care se dezvoltă în paralel, a fost identificată o vulnerabilitate (CVE-2023-38545) care poate duce la un overflow de buffer și, potențial, la execuția codului atacatorului pe partea clientului atunci când se accesează un server HTTPS controlat de un atacator prin intermediul utilitarului curl sau al unei aplicații care utilizează libcurl. Problema apare numai atunci când în curl este activat accesul prin proxy SOCKS5. În cazul accesului direct fără proxy, vulnerabilitatea nu se manifestă. Vulnerabilitatea a fost corectată în versiunea curl 8.4.0. Cercetătorul de securitate care a identificat eroarea a primit o recompensă de 4660 USD în cadrul inițiativei Internet Bug Bounty pe Hackerone.

Vulnerabilitatea este cauzată de o eroare în codul de rezolvare a numelui host înainte de a accesa proxy SOCKS5. La o lungime a numelui host de până la 256 de caractere, curl trimite imediat numele către proxy SOCKS5 pentru rezolvare de partea acestuia, iar dacă numele este mai mare de 255 de caractere, trece la rezolvatorul local și trimite în SOCKS5 deja adresa specificată. Din cauza unei erori în cod, flagul care indică necesitatea rezolvării locale putea fi setat incorect în procesul de negociere lentă a conexiunii prin SOCKS5, ceea ce ducea la scrierea numelui host lung în bufferul alocat pentru a reține adrese IP sau numele care nu depășește 255 de caractere.

Proprietarul site-ului căruia curl se adresează prin proxy SOCKS5 poate iniția un overflow de buffer pe partea clientului, returnând un cod de redirecționare a cererii (HTTP 30x) și setând în antetul „Location:” un URL cu numele host, a cărui dimensiune se află în intervalul de la 16 la 64 KB (valoarea de 16 KB este determinată de dimensiunea minimă necesară pentru overflow-ul bufferului alocat, iar valoarea de 65 KB este legată de lungimea maxim permisă a numelui host în URL). Dacă în setările libcurl este permisă redirecționarea cererilor și proxy-ul SOCKS5 utilizat este suficient de lent, atunci numele lung al host-ului va fi scris într-un buffer mic, predefinit cu o dimensiune mai mică.

Vulnerabilitatea afectează în principal aplicațiile bazate pe libcurl și se manifestă în utilitarul curl doar atunci când este utilizată opțiunea „—limit-rate” cu o valoare mai mică de 65541 — în libcurl este alocat în mod implicit un buffer de 16 KB, iar în utilitarul curl — 100 KB, dar această dimensiune variază î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. De asemenea, a fost spus că 41% dintre vulnerabilitățile anterior descoperite în curl ar fi putut fi evitate, dacă curl ar fi fost scris într-un limbaj care asigură o gestionare sigură a memoriei, însă nu se preconizează o rescriere a curl într-un alt limbaj în viitorul apropiat. Ca măsuri pentru îmbunătățirea securității codului, se propune extinderea setului de instrumente pentru testarea codului și utilizarea mai activă a dependințelor scrise în limbaje de programare care oferă o gestionare sigură a memoriei. De asemenea, se ia în considerare posibilitatea înlocuirii treptate a unor părți din curl cu opțiuni scrise în limbaje sigure, precum backend-ul HTTP experimental Hyper, implementat în limbajul Rust.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster