Buffer overflow sa curl at libcurl, na ipinakita kapag nag-a-access sa pamamagitan ng SOCKS5 proxy

Natukoy ang isang kahinaan (CVE-2023-38545) sa utility para sa pagtanggap at pagpapadala ng data sa curl network at sa libcurl library, na binuo nang magkatulad, na maaaring humantong sa isang buffer overflow at potensyal na pagpapatupad ng attacker code sa ang client side kapag na-access gamit ang curl utility o isang application gamit ang libcurl, sa isang HTTPS server na kinokontrol ng attacker. Ang problema ay lilitaw lamang kung ang pag-access sa pamamagitan ng isang SOCKS5 proxy ay pinagana sa curl. Kapag direktang nag-access nang walang proxy, hindi lalabas ang kahinaan. Ang kahinaan ay naayos sa curl 8.4.0 release. Ang security researcher na nakatuklas sa bug ay nakatanggap ng $4660 na reward bilang bahagi ng Internet Bug Bounty initiative ng Hackerone.

Ang kahinaan ay sanhi ng isang error sa code ng resolution ng hostname bago i-access ang SOCKS5 proxy. Kung hanggang 256 na character ang haba ng host name, agad na ipapasa ng curl ang pangalan sa SOCKS5 proxy para sa resolution sa gilid nito, at kung ang pangalan ay higit sa 255 character, lilipat ito sa local resolver at ipapasa ang tinukoy na address sa SOCKS5 . Dahil sa isang error sa code, ang bandila na nagpapahiwatig ng pangangailangan para sa lokal na resolution ay maaaring itakda sa maling halaga sa panahon ng mabagal na negosasyon ng isang koneksyon sa pamamagitan ng SOCKS5, na humantong sa pag-record ng isang mahabang pangalan ng host sa isang buffer na inilaan na may inaasahan. ng pag-iimbak ng IP address o pangalan , hindi hihigit sa 255 character.

Ang may-ari ng isang site na na-access sa pamamagitan ng curl sa pamamagitan ng isang SOCKS5 proxy ay maaaring mag-trigger ng isang client-side buffer overflow sa pamamagitan ng pagbabalik ng request redirect code (HTTP 30x) at pagtatakda ng "Lokasyon:" header sa isang URL na may hostname sa hanay na 16 pataas hanggang 64 KB (16 KB ang minimum na laki na kinakailangan para umapaw sa inilalaan na buffer, at 65 KB ang maximum na pinapayagang haba ng hostname sa isang URL). Kung ang pag-redirect ng kahilingan ay pinagana sa mga setting ng libcurl at ang SOCKS5 proxy na ginamit ay sapat na mabagal, kung gayon ang mahabang pangalan ng host ay isusulat sa isang maliit na buffer, malinaw na mas maliit ang sukat.

Pangunahing nakakaapekto ang kahinaan sa mga application batay sa libcurl at lumilitaw lamang sa curl utility kapag ginagamit ang opsyong "--limit-rate" na may halagang mas mababa sa 65541 - ang libcurl bilang default ay naglalaan ng buffer na 16 KB ang laki, at sa curl utility ito ay 100 KB, ngunit nagbabago ang laki nito depende sa halaga ng parameter na "-limit-rate".

Binanggit ni Daniel Stenberg, ang may-akda ng proyekto, na ang kahinaan ay nanatiling hindi natukoy sa loob ng 1315 araw. Sinasabi rin nito na malamang na naiwasan ang 41% ng mga dating natukoy na kahinaan sa curl kung naisulat ang curl sa isang memory-safe na wika, ngunit walang planong muling isulat ang curl sa ibang wika sa nakikinita na hinaharap. Bilang mga hakbang upang mapabuti ang seguridad ng base ng code, iminungkahi na palawakin ang mga tool para sa pagsubok ng code at mas aktibong gumamit ng mga dependency na nakasulat sa mga programming language na nagsisiguro ng ligtas na operasyon na may memorya. Isinasaalang-alang din nito ang posibilidad na unti-unting palitan ang mga bahagi ng curl ng mga opsyon na nakasulat sa mga secure na wika, tulad ng eksperimentong Hyper HTTP backend na ipinatupad sa Rust.

Pinagmulan: opennet.ru

Magdagdag ng komento