Buferio perpildymas curl ir libcurl, pasireiškiantis prisijungus per SOCKS5 tarpinį serverį

Pažeidžiamumas (CVE-2023-38545) buvo nustatytas duomenų gavimo ir siuntimo per curl tinklą ir libcurl biblioteką, kuri yra kuriama lygiagrečiai, pažeidžiamumas (CVE-5-8.4.0), kuris gali sukelti buferio perpildymą ir potencialiai užpuoliko kodo vykdymą. kliento pusėje, kai pasiekiama naudojant curl paslaugų programą arba programą, naudojančią libcurl, į HTTPS serverį, kurį valdo užpuolikas. Problema atsiranda tik tuo atveju, jei prieiga per SOCKS4660 tarpinį serverį įjungta curl. Kai tiesiogiai pasiekiate be tarpinio serverio, pažeidžiamumas nepasirodo. Pažeidžiamumas ištaisytas „curl XNUMX“ leidime. Saugumo tyrinėtojas, aptikęs klaidą, gavo XNUMX XNUMX USD atlygį kaip „Hackerone“ iniciatyvos „Internet Bug Bounty“ dalį.

Pažeidžiamumą sukelia klaida pagrindinio kompiuterio pavadinimo skyros kode prieš pasiekiant SOCKS5 tarpinį serverį. Jei pagrindinio kompiuterio pavadinimas yra iki 256 simbolių ilgio, curl nedelsdamas perduoda pavadinimą SOCKS5 tarpiniam serveriui, kad jis būtų išspręstas jo pusėje, o jei pavadinimas yra ilgesnis nei 255 simboliai, jis persijungia į vietinį sprendiklį ir jau apibrėžtą adresą perduoda SOCKS5. . Dėl kodo klaidos vėliavėlė, nurodanti vietinės skiriamosios gebos poreikį, gali būti nustatyta į neteisingą reikšmę lėtai derantis dėl ryšio per SOCKS5, dėl ko buvo įrašytas ilgas pagrindinio kompiuterio vardas buferyje, kuris buvo paskirtas su lūkesčiais. IP adreso ar pavadinimo saugojimo, neviršijančio 255 simbolių.

Svetainės, kuri pasiekiama naudojant curl per SOCKS5 tarpinį serverį, savininkas gali suaktyvinti kliento buferio perpildymą, grąžindamas užklausos peradresavimo kodą (HTTP 30x) ir nustatydamas antraštę „Location:“ į URL, kurio pagrindinio kompiuterio pavadinimas yra nuo 16 iki iki 64 KB (16 KB yra mažiausias dydis, reikalingas perpildyti skirtą buferį, o 65 KB yra didžiausias leistinas prieglobos serverio pavadinimo ilgis URL). Jei užklausų peradresavimas įjungtas libcurl nustatymuose ir naudojamas SOCKS5 tarpinis serveris yra pakankamai lėtas, ilgas pagrindinio kompiuterio pavadinimas bus įrašytas į mažą buferį, akivaizdžiai mažesnio dydžio.

Pažeidžiamumas daugiausia paveikia programas, pagrįstas libcurl tai yra 65541 KB, tačiau dydis keičiasi priklausomai nuo parametro „-limit-rate“ reikšmės.

Projekto autorius Danielis Stenbergas paminėjo, kad pažeidžiamumas liko nepastebėtas 1315 dienų. Jame taip pat sakoma, kad 41 % anksčiau nustatytų curl pažeidžiamumų tikriausiai būtų buvę galima išvengti, jei curl būtų parašytas atmintyje saugia kalba, tačiau artimiausioje ateityje neplanuojama perrašyti curl į kitą kalbą. Kaip priemones kodų bazės saugumui gerinti siūloma išplėsti kodo testavimo įrankius ir aktyviau naudoti programavimo kalbomis parašytas priklausomybes, kurios užtikrina saugų darbą su atmintimi. Ji taip pat svarsto galimybę laipsniškai pakeisti curl dalis parinktimis, parašytomis saugiomis kalbomis, pvz., eksperimentine „Hyper HTTP“ programa, įdiegta „Rust“.

Šaltinis: opennet.ru

Добавить комментарий