Pagkahuyang sa mga librarya sa network sa Rust ug Go nga mga pinulongan nga nagtugot kanimo sa pag-bypass sa pag-verify sa IP address

Ang mga kahuyangan nga may kalabotan sa dili husto nga pagproseso sa mga IP address nga adunay octal nga numero sa mga function sa pag-parse sa address nahibal-an sa mga standard nga librarya sa Rust ug Go nga mga pinulongan. Ang mga kahuyangan nagpaposible sa pag-bypass sa mga tseke alang sa balido nga mga adres sa mga aplikasyon, pananglitan, aron ma-organisar ang pag-access sa mga address sa loopback interface (127.xxx) o mga subnet sa intranet sa dihang nagpahigayon sa mga pag-atake sa SSRF (Server-side request forgery). Ang mga kahuyangan nagpadayon sa siklo sa mga problema nga nahibal-an kaniadto sa mga librarya node-netmask (JavaScript, CVE-2021-28918, CVE-2021-29418), private-ip (JavaScript, CVE-2020-28360), ipaddress (Python, CVE- 2021-29921 ), Data :: Validate :: IP (Perl, CVE-2021-29662) ug Net :: Netmask (Perl, CVE-2021-29424).

Sumala sa espesipikasyon, ang IP address string values ​​​​nga nagsugod sa usa ka zero kinahanglan nga hubaron nga octal nga mga numero, apan daghang mga librarya ang wala magtagad niini ug yano nga isalikway ang zero, nga nagtagad sa bili isip usa ka decimal nga numero. Pananglitan, ang numero nga 0177 sa octal katumbas sa 127 sa decimal. Ang usa ka tig-atake mahimong mohangyo ug kahinguhaan pinaagi sa pagtino sa kantidad nga "0177.0.0.1", nga sa decimal nga notasyon katumbas sa "127.0.0.1". Kung gigamit ang problema nga librarya, ang aplikasyon dili makamatikod nga ang adres nga 0177.0.0.1 naa sa subnet 127.0.0.1/8, apan sa tinuud, kung magpadala usa ka hangyo, mahimo’g ma-access ang adres nga "0177.0.0.1", diin ang Ang mga function sa network moproseso isip 127.0.0.1. Sa parehas nga paagi, mahimo nimong manikas ang tseke sa pag-access sa mga adres sa intranet pinaagi sa pagtino sa mga kantidad sama sa "012.0.0.1" (katumbas sa "10.0.0.1").

Sa Rust, ang standard library "std::net" naapektuhan sa usa ka isyu (CVE-2021-29922). Ang IP address parser niini nga librarya nagsalikway sa usa ka zero sa wala pa ang mga bili sa adres, apan kung dili molapas sa tulo ka mga numero ang gitakda, pananglitan, ang "0177.0.0.1" mahimong isipon nga dili balido nga bili, ug usa ka sayop nga resulta. ibalik isip tubag sa 010.8.8.8 ug 127.0.026.1 . Ang mga aplikasyon nga naggamit sa std::net::IpAddr kung ang pag-parse sa mga adres nga gitakda sa gumagamit mahimo’g maapektuhan sa mga pag-atake sa SSRF (Server-side request forgery), RFI (Remote File Inclusion) ug LFI (Local File Inclusion). Ang pagkahuyang giayo sa Rust 1.53.0 nga sanga.

Pagkahuyang sa mga librarya sa network sa Rust ug Go nga mga pinulongan nga nagtugot kanimo sa pag-bypass sa pag-verify sa IP address

Sa Go, ang standard library "net" apektado (CVE-2021-29923). Ang net.ParseCIDR built-in nga function molaktaw sa nag-unang mga sero sa wala pa ang octal nga mga numero imbes nga iproseso kini. Pananglitan, ang usa ka tig-atake mahimong mopasa sa kantidad nga 00000177.0.0.1, nga, kung susihon sa net.ParseCIDR(00000177.0.0.1/24) function, ma-parse isip 177.0.0.1/24, ug dili 127.0.0.1/24. Ang problema nagpakita usab sa iyang kaugalingon sa plataporma sa Kubernetes. Ang pagkahuyang naayo sa Go release 1.16.3 ug beta 1.17.

Pagkahuyang sa mga librarya sa network sa Rust ug Go nga mga pinulongan nga nagtugot kanimo sa pag-bypass sa pag-verify sa IP address


Source: opennet.ru

Idugang sa usa ka comment