Prelivanje bafera u curl i libcurl, koje se manifestira prilikom pristupa preko SOCKS5 proxyja

U alatu za prijenos i slanje podataka putem mreže curl i razvoju paralelne biblioteke libcurl otkrivena je ranjivost (CVE-2023-38545) koja može dovesti do preljeva bafer i potencijalno do izvršenja koda napadača na strani klijenta prilikom korištenja alata curl ili aplikacije koja koristi libcurl za pristup HTTPS serveru pod kontrolom napadača. Problem se manifestira samo u slučaju kada je u curl-u omogućen pristup putem SOCKS5 proxy-a. Prilikom izravnog pristupa bez proxy-a ranjivost se ne manifestira. Ranjivost je otklonjena u izdanju curl 8.4.0. Istraživač sigurnosti koji je otkrio grešku dobio je nagradu u iznosu od 4660 dolara kroz inicijativu Internet Bug Bounty na Hackerone.

Ranjivost je uzrokovana greškom u kodu koji rješava ime domaćina prije pristupa SOCKS5 proxy-u. Kada je ime domaćina dugačko do 256 znakova, curl odmah prosljeđuje ime u SOCKS5 proxy za rješavanje s njegove strane, a ako je ime duže od 255 znakova, prebacuje se na lokalni resolver i prosljeđuje u SOCKS5 već određenu adresu. Zbog greške u kodu, zastavica koja označava potrebu za lokalnim rješavanjem mogla je biti postavljena na pogrešnu vrijednost tijekom sporog pregovaranja veze putem SOCKS5, što je dovelo do upisa dugog imena domaćina u bafer dodijeljen za pohranu IP adrese ili imena koje ne prelazi 255 znakova.

Vlasnik web stranice koju curl pristupa putem SOCKS5 proxy-a može inicirati prelivanje bafera na strani klijenta, vraćajući kao odgovor kod preusmjeravanja zahtjeva (HTTP 30x) i postavljajući u zaglavlje "Location:" URL s imenom domaćina čija je veličina u rasponu od 16 do 64 KB (vrijednost 16 KB određena je minimalnom veličinom potrebnom za prelivanje dodijeljenog bafera, dok vrijednost 65 KB odgovara maksimalno dozvoljenoj duljini imena domaćina u URL-u). Ako su u postavkama libcurl omogućena preusmjeravanja zahtjeva i korišteni SOCKS5 proxy je dovoljno spor, tada će se dugačko ime domaćina zapisati u mali bafer, evidentno manjih dimenzija.

Ranjivost prvenstveno pogađa aplikacije bazirane na libcurl i manifestira se u alatu curl samo prilikom korištenja opcije "—limit-rate" s vrijednošću manjom od 65541 — u libcurl-u po defaultu se dodjeljuje bafer veličine 16 KB, dok se u alatu curl dodjeljuje bafer od 100 KB, no ova veličina varira ovisno o vrijednosti parametra "—limit-rate".

Daniel Stenberg, autor projekta, spomenuo je da je ranjivost ostala neprimijećena tijekom 1315 dana. Također je rečeno da bi se 41% ranjivosti otkrivenih u curl-u vjerojatno moglo izbjeći da je curl napisan na jeziku koji osigurava sigurnu obradu memorije, no prepisivanje curl-a na drugi jezik nije planirano u bliskoj budućnosti. Kao mjere za povećanje sigurnosti kodne baze predlaže se proširenje alata za testiranje koda i aktivnije korištenje ovisnosti napisane na programskim jezicima koji osiguravaju sigurnu obradu memorije. Također se razmatra mogućnost postepene zamjene dijelova curl-a s varijantama napisanima na sigurnim jezicima, poput eksperimentalnog HTTP-bazena Hyper, implementiranog na jeziku Rust.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster