Rust ja Go keelte võrguteekide haavatavus, mis võimaldab teil IP-aadressi kontrollimisest mööda minna

Rooste ja Go keelte standardsetes teekides on tuvastatud haavatavused, mis on seotud kaheksandnumbritega IP-aadresside vale töötlemisega aadressi parsimise funktsioonides. Haavatavus võimaldab rakendustes kehtivate aadresside kontrollimisest mööda minna, näiteks SSRF-i (serveripoolse päringu võltsimise) rünnakute läbiviimisel korraldada juurdepääsu loopback-liidese aadressidele (127.xxx) või sisevõrgu alamvõrkudele. Haavatavused jätkavad varem tuvastatud probleemide tsüklit teekides 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) ja Net::Netmask (Perl, CVE-2021-29424).

Spetsifikatsiooni kohaselt tuleks nulliga algavaid IP-aadressi stringi väärtusi tõlgendada kaheksandarvudena, kuid paljud raamatukogud ei võta seda arvesse ja jätavad nulli lihtsalt kõrvale, käsitledes väärtust kümnendarvuna. Näiteks number 0177 kaheksandkohana võrdub 127 kümnendkohaga. Ründaja saab taotleda ressurssi, määrates väärtuse "0177.0.0.1", mis kümnendmärgistuses vastab väärtusele "127.0.0.1". Probleemse teegi kasutamisel ei tuvasta rakendus, et aadress 0177.0.0.1 on alamvõrgus 127.0.0.1/8, kuid tegelikult pääseb päringu saatmisel ligi aadressile “0177.0.0.1”, mille võrgufunktsioone töödeldakse kujul 127.0.0.1. Sarnasel viisil saate petta sisevõrgu aadressidele juurdepääsu kontrollimist, määrates sellised väärtused nagu "012.0.0.1" (võrdne "10.0.0.1").

Rustis mõjutas standardset teeki "std::net" probleem (CVE-2021-29922). Selle teegi IP-aadressi parser jättis aadressi väärtuste ette nulli, kuid ainult siis, kui määratud pole rohkem kui kolm numbrit, näiteks „0177.0.0.1” tajutakse vale väärtusena ja vale tulemusena. tagastataks vastusena 010.8.8.8 ja 127.0.026.1 . Rakendused, mis kasutavad kasutaja määratud aadresside sõelumisel std::net::IpAddr-i, on potentsiaalselt vastuvõtlikud SSRF-i (serveripoolse päringu võltsimise), RFI- (Remote File Inclusion) ja LFI (kohaliku faili kaasamise) rünnakutele. Haavatavus parandati Rust 1.53.0 harus.

Rust ja Go keelte võrguteekide haavatavus, mis võimaldab teil IP-aadressi kontrollimisest mööda minna

Go puhul mõjutab see standardset teeki "net" (CVE-2021-29923). Sisseehitatud funktsioon net.ParseCIDR jätab kaheksandarvu ees olevad nullid vahele, selle asemel et neid töödelda. Näiteks võib ründaja edastada väärtuse 00000177.0.0.1, mis funktsioonis net.ParseCIDR(00000177.0.0.1/24) parsitakse kui 177.0.0.1/24, mitte 127.0.0.1/24. Probleem avaldub ka Kubernetese platvormil. Haavatavus on parandatud Go versioonis 1.16.3 ja beetaversioonis 1.17.

Rust ja Go keelte võrguteekide haavatavus, mis võimaldab teil IP-aadressi kontrollimisest mööda minna


Allikas: opennet.ru

Lisa kommentaar