Puskurin ylivuoto curlissa ja libcurlissa, joka ilmenee käytettäessä SOCKS5-välityspalvelimen kautta

Rinnakkain kehitettävässä apuohjelmassa on tunnistettu haavoittuvuus (CVE-2023-38545) tietojen vastaanottamiseksi ja lähettämiseksi curl-verkon ja libcurl-kirjaston kautta, mikä voi johtaa puskurin ylivuotoon ja mahdollisesti hyökkääjäkoodin suorittamiseen asiakaspuolelle, kun sitä käytetään curl-apuohjelmalla tai libcurlia käyttävällä sovelluksella, hyökkääjän hallitsemaan HTTPS-palvelimeen. Ongelma ilmenee vain, jos pääsy SOCKS5-välityspalvelimen kautta on otettu käyttöön curlissa. Kun käytät suoraan ilman välityspalvelinta, haavoittuvuus ei näy. Haavoittuvuus on korjattu curl 8.4.0 -julkaisussa. Vian löytänyt tietoturvatutkija sai 4660 XNUMX dollarin palkinnon osana Hackeronen Internet Bug Bounty -aloitetta.

Haavoittuvuus johtuu virheestä isäntänimen ratkaisukoodissa ennen SOCKS5-välityspalvelimen käyttöä. Jos isäntänimi on korkeintaan 256 merkkiä pitkä, curl välittää nimen välittömästi SOCKS5-välityspalvelimelle puolelleen, ja jos nimi on yli 255 merkkiä pitkä, se vaihtaa paikalliseen ratkaisijaan ja välittää jo määritetyn osoitteen SOCKS5:lle. . Koodivirheen vuoksi paikallisen resoluution tarvetta ilmaiseva lippu saattoi asettaa väärään arvoon SOCKS5:n kautta tapahtuvan yhteyden hitaan neuvottelun aikana, mikä johti pitkän isäntänimen tallentamiseen odotuksella varattuun puskuriin. IP-osoitteen tai nimen tallentamisesta, enintään 255 merkkiä.

Curlilla SOCKS5-välityspalvelimen kautta avatun sivuston omistaja voi laukaista asiakaspuolen puskurin ylivuodon palauttamalla pyynnön uudelleenohjauskoodin (HTTP 30x) ja asettamalla "Location:"-otsikon URL-osoitteeksi, jonka isäntänimi on välillä 16 ylöspäin. 64 kt (16 kt on vähimmäiskoko, joka vaaditaan varatun puskurin ylivuotoon, ja 65 kt on suurin sallittu isäntänimen pituus URL-osoitteessa). Jos pyynnön uudelleenohjaus on otettu käyttöön libcurl-asetuksissa ja käytetty SOCKS5-välityspalvelin on tarpeeksi hidas, niin pitkä isäntänimi kirjoitetaan pieneen puskuriin, joka on ilmeisesti pienempi.

Haavoittuvuus vaikuttaa pääasiassa libcurliin perustuviin sovelluksiin ja näkyy curl-apuohjelmassa vain käytettäessä "--limit-rate" -vaihtoehtoa, jonka arvo on pienempi kuin 65541 - libcurl varaa oletuksena 16 kt:n puskurin ja curl-apuohjelmassa. se on 100 kt, mutta tämän koko muuttuu "-limit-rate"-parametrin arvon mukaan.

Projektin kirjoittaja Daniel Stenberg mainitsi, että haavoittuvuus pysyi havaitsematta 1315 päivää. Siinä sanotaan myös, että 41 % aiemmin tunnistetuista curlin haavoittuvuuksista olisi todennäköisesti voitu välttää, jos curl olisi kirjoitettu muistiturvallisella kielellä, mutta ei ole suunnitelmia kirjoittaa curlin uudelleen toiselle kielelle lähitulevaisuudessa. Toimenpiteinä koodikannan turvallisuuden parantamiseksi ehdotetaan koodin testaustyökalujen laajentamista ja ohjelmointikielillä kirjoitettujen riippuvuuksien aktiivisempaa käyttöä, jotka varmistavat turvallisen toiminnan muistin kanssa. Se harkitsee myös mahdollisuutta korvata asteittain curl-osia suojatuilla kielillä kirjoitetuilla varianteilla, kuten Rustissa toteutetulla kokeellisella Hyper HTTP -taustajärjestelmällä.

Lähde: opennet.ru

Lisää kommentti