Prekoračitev medpomnilnika v curl in libcurl, ki se kaže pri dostopu prek proxyja SOCKS5

V pripomočku za sprejemanje in pošiljanje podatkov po omrežju curl in knjižnici libcurl, ki se vzporedno razvija, je bila ugotovljena ranljivost (CVE-2023-38545), ki lahko vodi do prekoračitve medpomnilnika in morebitne izvedbe napadalčeve kode na stran odjemalca, ko do nje dostopate s pripomočkom curl ali aplikacijo, ki uporablja libcurl, na strežnik HTTPS, ki ga nadzira napadalec. Težava se pojavi le, če je v curl omogočen dostop prek proxyja SOCKS5. Pri neposrednem dostopu brez proxyja se ranljivost ne pojavi. Ranljivost je odpravljena v izdaji curl 8.4.0. Varnostni raziskovalec, ki je odkril hrošča, je prejel nagrado v višini 4660 dolarjev v okviru pobude Hackerone Internet Bug Bounty.

Ranljivost je posledica napake v kodi za razrešitev imena gostitelja pred dostopom do proxyja SOCKS5. Če je ime gostitelja dolgo do 256 znakov, curl takoj posreduje ime posredniku SOCKS5 v razrešitev na svoji strani, in če je ime daljše od 255 znakov, preklopi na lokalni razreševalec in posreduje že definiran naslov SOCKS5 . Zaradi napake v kodi je bila lahko zastavica, ki označuje potrebo po lokalnem reševanju, nastavljena na napačno vrednost med počasnim pogajanjem o povezavi prek SOCKS5, kar je vodilo do snemanja dolgega imena gostitelja v medpomnilniku, dodeljenem s pričakovanjem shranjevanje naslova IP ali imena, ki ne presega 255 znakov.

Lastnik mesta, do katerega dostopa curl prek proxyja SOCKS5, lahko sproži prekoračitev medpomnilnika na strani odjemalca tako, da vrne kodo za preusmeritev zahteve (HTTP 30x) in nastavi glavo »Lokacija:« na URL z imenom gostitelja v obsegu 16 navzgor na 64 KB (16 KB je najmanjša velikost, potrebna za prekoračitev dodeljenega medpomnilnika, 65 KB pa je največja dovoljena dolžina imena gostitelja v URL-ju). Če je preusmeritev zahteve omogočena v nastavitvah libcurl in je uporabljeni proxy SOCKS5 dovolj počasen, bo dolgo ime gostitelja zapisano v majhen medpomnilnik, očitno manjše velikosti.

Ranljivost v glavnem vpliva na aplikacije, ki temeljijo na libcurl, in se pojavi v pripomočku curl le, če uporabljate možnost »--limit-rate« z vrednostjo, manjšo od 65541 - libcurl privzeto dodeli medpomnilnik velikosti 16 KB, v pripomočku curl pa je 100 KB, vendar se ta velikost spreminja glede na vrednost parametra »-limit-rate«.

Daniel Stenberg, avtor projekta, je omenil, da je ranljivost ostala neodkrita 1315 dni. Prav tako pravi, da bi se 41 % prej ugotovljenih ranljivosti v curl verjetno lahko izognili, če bi bil curl napisan v jeziku, varnem za spomin, vendar ni načrtov, da bi curl v bližnji prihodnosti prepisali v drug jezik. Kot ukrepi za izboljšanje varnosti baze kode se predlaga razširitev orodij za testiranje kode in aktivnejša uporaba odvisnosti, napisanih v programskih jezikih, ki zagotavljajo varno delovanje s pomnilnikom. Razmišlja tudi o možnosti postopne zamenjave delov kodra z različicami, napisanimi v varnih jezikih, kot je eksperimentalno zaledje Hyper HTTP, implementirano v Rust.

Vir: opennet.ru

Dodaj komentar