Haavatavus Rusti ja Go võrgu teeke, mis võimaldab IP-aadressi kontrolli kõrvaldada

Rust ja Go keelte standartraamatukogudes on tuvastatud haavatavused, mis on seotud ebatäpse IP-aadresside töötlemisega, sealhulgas kaheksandike numbritega aadresside analüüsi funktsioonides. Haavatavused võimaldavad rikkuda kehtivate aadresside kontrolli rakendustes, näiteks loopback-interfääside (127.x.x.x) või sisevõrgu alajaotuste aadresside kutsumise korral SSRF (serveripoolse päringu valeandmine) rünnakute jaoks. Need haavatavused jätkavad probleemide tsüklit, mida on varem tuvastatud 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) raamatukogudes.

Vastavalt spetsifikatsioonile stringiväärtused IP-aadresse, algavad nulliga, peavad olema tõlgendatud kui kaheksandikud, kuid paljud teegid ei arvesse seda omadust ning lihtsalt heidavad nulli minema, töötledes väärtust kümnendina. Näiteks number 0177 kaheksandikute süsteemis on kümnendina 127. Rünnakuvõimalus võib küsida ressursse, märkides väärtuse «0177.0.0.1», mis kümnendina vastab «127.0.0.1». Probleemse teegi kasutamisel ei suuda rakendus tuvastada, et aadress 0177.0.0.1 kuulub alamvõrku 127.0.0.1/8, kuid tegelikult võib päringu saatmise korral pöörduda aadressi «0177.0.0.1» poole, mille võrgu funktsioonid töötlevad kui 127.0.0.1. Samamoodi saab petta ka intraneti aadresside kontrolli, märkides selliseid väärtusi nagu «012.0.0.1» (ekvivalent «10.0.0.1»).

Rust-is on probleemsete raamatukogude hulgas standardne teek «std::net» (CVE-2021-29922). Selle teegi IP-aadresside parser heidab nulli aadressi väärtuste ees, kuid ainult siis, kui numbreid on kolm või vähem, näiteks «0177.0.0.1» tõlgendatakse kui kehtetu väärtus, aga vastuseks «010.8.8.8» ja «127.0.026.1» antakse vale tulemus. Rakendused, mis kasutavad std::net::IpAddr antud kasutaja määratud aadresside analüüsimiseks, on potentsiaalselt vastuvõtlikud SSRF (Server-side request forgery), RFI (Remote File Inclusion) ja LFI (Local File Inclusion) rünnakutele. Haavatavus on kõrvaldatud Rusti versioonis 1.53.0.

Haavatavus Rusti ja Go võrgu teeke, mis võimaldab IP-aadressi kontrolli kõrvaldada

Go keeles on probleemsete teekide hulgas standardne teek «net» (CVE-2021-29923). Sisseehitatud funktsioon net.ParseCIDR jätab nullid kaheksandike numbrite ees kõrvale, selle asemel et neid töödelda. Näiteks ründaja võib edastada väärtuse 00000177.0.0.1, mis net.ParseCIDR(00000177.0.0.1/24) kontrollimisel tõlgendatakse kui 177.0.0.1/24, mitte 127.0.0.1/24. Probleem avaldub ka Kubernetes platvormil. Haavatavus on kõrvaldatud Go versioonis 1.16.3 ja beetaversioonis 1.17.

Haavatavus Rusti ja Go võrgu teeke, mis võimaldab IP-aadressi kontrolli kõrvaldada
Vaata videot


Allikas: opennet.ru
Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster