Curl'i ja selle kĂ”rval areneva libcurl'i teabe edastamise ja vastuvĂ”tmise utiliidis avastati haavatavus (CVE-2023-38545), mis vĂ”ib pĂ”hjustada mĂ€lupuhvrisse ĂŒlevoolu ning potentsiaalselt vĂ”imaldada rĂŒndajal koodi kĂ€ivitada kliendi poolel, kui curl'i utiliidi vĂ”i libcurl'i kasutav rakendus suunab pĂ€ringu HTTPS-serverisse, mis on rĂŒndaja kontrolli all. Probleem ilmneb ainult siis, kui curl'is on aktiveeritud SOCKS5-proksi kasutamine. Otsese juurdepÀÀsu korral proksita haavatavus ei avaldu. Haavatavus on kĂ”rvaldatud curl'i versioonis 8.4.0. Vea tuvastanud turva-uuringute spetsialist sai $4660 suuruse tasu Internet Bug Bounty algatuse raames Hackerone'is.
Turvahaave on pĂ”hjustatud veast hostinime lahendamise koodis enne SOCKS5-proksile pöördumist. Kui hostinimi on kuni 256 tĂ€hemĂ€rki pikk, edastab curl kohe nime SOCKS5-proksile, et see lahendada. Kui nimi on pikem kui 255 tĂ€hemĂ€rki, vahetab see kohaliku lahendaja vastu ja edastab SOCKS5-le juba mÀÀratud aadressi. Koodivea tĂ”ttu vĂ”is aeglase SOCKS5 ĂŒhenduse loomise protsessis olla vajalik kohaliku lahenduse mĂ€rk kujundatud vÀÀralt, mis viis pika hostinime kirjutamiseni puhvri, mis oli ette nĂ€htud sĂ€ilitamiseks. IP-aadressid vĂ”i nime, mis ei ĂŒleta 255 tĂ€hemĂ€rki.
Veebisaidi omanik, kellele curl pöördub SOCKS5-proksi kaudu, saab algatada kliendipoolse puhverserveri ĂŒlevoolu, tagastades vastuseks pĂ€ringu suunamise koodi (HTTP 30x) ja seades pĂ€isesse "Location:" URL, mille hostinimi on vahemikus 16 kuni 64 KB (16 KB vÀÀrtus on tingitud minimaalsetest nĂ”uetest, mis on vajalikud reserveeritud puhverserveri ĂŒlevooluks, ja 65 KB vÀÀrtus on seotud lubatud maksimaalse hostinime pikkusega URL-is). Kui libcurl seadistustes on lubatud pĂ€ringute suunamine ja kasutatav SOCKS5-proksi on piisavalt aeglane, siis pikk hostinimi salvestatakse vĂ€iksemasse puhverserverisse, mis on selgelt vĂ€iksema suurusega.
Vulnerability mainly affects applications based on libcurl and manifests in the curl utility only when using the "âlimit-rate" option with a value less than 65541 â libcurl by default allocates a buffer size of 16 KB, while in the curl utility it is 100 KB, but this size changes based on the value of the "âlimit-rate" parameter.
Daniel Stenberg, projekti autor, mainis, et haavatavus jĂ€i 1315 pĂ€eva jooksul mĂ€rkamata. Samuti öeldi, et 41% varasematest curl'i haavatavustest oleks tĂ”enĂ€oliselt olnud vĂ€ltimatu, kui curl oleks kirjutatud keeles, mis tagab mĂ€luga ohutu töötamise, kuid curl'i ĂŒmberkirjutamine teise keelde lĂ€hiajal ei ole plaanis. Koodibaasi turvalisuse suurendamiseks soovitatakse laiendada koodi testimise tööriistu ja aktiivsemalt kasutada sĂ”ltuvusi, mis on kirjutatud mĂ€luga ohutuks programmeerimiskeeleks. Samuti kaalutakse curlâi osade jĂ€rk-jĂ€rgulist asendamist ohutuma keelevariantidega, nĂ€iteks katsetatud HTTP-tagakĂŒljega Hyper, mis on loodud Rust keeles.
Allikas: opennet.ru
