Bufera pārpilde curl un libcurl, kas izpaužas, piekļūstot, izmantojot SOCKS5 starpniekserveri

Paralēli izstrādātajā utilītprogrammā curl tīkla un libcurl bibliotēkas datu saņemšanai un sūtīšanai ir identificēta ievainojamība (CVE-2023-38545), kas var izraisīt bufera pārpildīšanu un, iespējams, uzbrucēja koda izpildi. klienta pusē, kad tai piekļūst, izmantojot curl utilītu vai lietojumprogrammu, kas izmanto libcurl, HTTPS serverim, ko kontrolē uzbrucējs. Problēma parādās tikai tad, ja lokā ir iespējota piekļuve, izmantojot SOCKS5 starpniekserveri. Piekļūstot tieši bez starpniekservera, ievainojamība neparādās. Ievainojamība ir novērsta curl 8.4.0 laidienā. Drošības pētnieks, kurš atklāja kļūdu, saņēma $ 4660 atlīdzību kā daļu no Hackerone interneta kļūdu Bounty iniciatīvas.

Ievainojamību izraisa kļūda resursdatora nosaukuma izšķirtspējas kodā pirms piekļūšanas SOCKS5 starpniekserverim. Ja resursdatora nosaukums ir līdz 256 rakstzīmēm garš, curl nekavējoties nodod nosaukumu SOCKS5 starpniekserveram, lai tā pusē veiktu izšķirtspēju, un, ja nosaukums ir garāks par 255 rakstzīmēm, tas pārslēdzas uz vietējo atrisinātāju un nodod jau definēto adresi SOCKS5. . Koda kļūdas dēļ karogam, kas norāda uz nepieciešamību pēc vietējās izšķirtspējas, lēnas savienojuma sarunas laikā, izmantojot SOCKS5, var tikt iestatīta nepareiza vērtība, kā rezultātā tika ierakstīts garš resursdatora nosaukums buferī, kas tika piešķirts ar cerību. IP adreses vai nosaukuma glabāšanai, nepārsniedzot 255 rakstzīmes.

Vietnes īpašnieks, kurai piekļūst curl, izmantojot SOCKS5 starpniekserveri, var izraisīt klienta puses bufera pārpildīšanu, atgriežot pieprasījuma novirzīšanas kodu (HTTP 30x) un iestatot galveni "Atrašanās vieta:" uz URL ar saimniekdatora nosaukumu diapazonā no 16 līdz. līdz 64 KB (16 KB ir minimālais izmērs, kas nepieciešams, lai pārpildītu piešķirto buferi, un 65 KB ir maksimālais atļautais resursdatora nosaukuma garums URL). Ja pieprasījuma pāradresācija ir iespējota libcurl iestatījumos un izmantotais SOCKS5 starpniekserveris ir pietiekami lēns, tad garais resursdatora nosaukums tiks ierakstīts nelielā buferī, acīmredzami mazāka izmēra.

Ievainojamība galvenokārt skar lietojumprogrammas, kuru pamatā ir libcurl, un curl utilītprogrammā parādās tikai tad, ja tiek izmantota opcija “--limit-rate” ar vērtību, kas mazāka par 65541 — libcurl pēc noklusējuma piešķir buferi 16 KB lielumā un curl utilītprogrammā. tas ir 100 KB, taču tas mainās atkarībā no parametra “-limit-rate” vērtības.

Projekta autors Daniels Stenbergs minēja, ka ievainojamība palika neatklāta 1315 dienas. Tajā arī teikts, ka 41% no iepriekš identificētajām curl ievainojamībām, visticamāk, būtu varējuši izvairīties, ja curl būtu rakstīts tādā valodā, kurai nav atmiņas, taču pārskatāmā nākotnē nav plānots pārrakstīt curl citā valodā. Kā pasākumi koda bāzes drošības uzlabošanai tiek piedāvāts paplašināt koda testēšanas rīkus un aktīvāk izmantot programmēšanas valodās rakstītās atkarības, kas nodrošina drošu darbību ar atmiņu. Tā arī apsver iespēju pakāpeniski aizstāt curl daļas ar variantiem, kas rakstīti drošās valodās, piemēram, eksperimentālo Hyper HTTP aizmugursistēmu, kas ieviesta Rust.

Avots: opennet.ru

Pievieno komentāru