A vulnerability in the network libraries of Rust and Go languages, allowing the bypass of IP address verification

A Rust és Go nyelvek standard könyvtáraiban olyan sebezhetőségeket találtak, amelyek az IP-címek nem megfelelő kezelésével kapcsolatosak, amikor nyolcas számjegyeket tartalmaznak az címkibővítő funkciókban. Ezek a sebezhetőségek lehetővé teszik a megengedett címek ellenőrzésének megkerülését az alkalmazásokban, például a loopback interfész (127.x.x.x) címeinek vagy intranet alhálózatok hozzáférésének megszerzését SSRF (Server-side request forgery) támadások végrehajtásakor. Ezek a sebezhetőségek folytatják a problémák ciklusát, amelyeket korábban a 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) és Net::Netmask (Perl, CVE-2021-29424) könyvtárakban azonosítottak.

A specifikáció szerint a nullával kezdődő karakterlánc értékeket nyolcas számként kell értelmezni, de sok könyvtár nem veszi figyelembe ezt a jellemzőt és egyszerűen eltávolítja a nullát, a számot decimális számként kezelve. IP-címekPéldául a 0177 nyolcas számrendszerben 127 decimális formában. A támadó kérheti az erőforrást az "0177.0.0.1" érték megadásával, amely decimális formában "127.0.0.1"-nek felel meg. Ha problémás könyvtárat használnak, az alkalmazás nem határozza meg, hogy az 0177.0.0.1 cím a 127.0.0.1/8 alhálózathoz tartozik, de a kérés elküldésekor végrehajthatja az "0177.0.0.1" cím lekérdezését, amelyet a hálózati funkciók 127.0.0.1-ként kezelnek. Hasonló módon becsapják az intranetes címek ellenőrzését is, ha hasonló értékeket adnak meg, mint például az "012.0.0.1" (amelynek megfelelője "10.0.0.1").

A Rust problémája a standard könyvtárat, a "std::net"-et (CVE-2021-29922) érintette. Ennek a könyvtárnak az IP-cím-parsere eltávolította a nullát a cím értékeiből, de csak akkor, ha legfeljebb három számjegy volt megadva, például az "0177.0.0.1" érvénytelen értékként jelenik meg, míg a 010.8.8.8 és 127.0.026.1 válaszában helytelen eredményt ad. Azok az alkalmazások, amelyek a std::net::IpAddr-ot használják a felhasználó által megadott címek feldolgozásakor, potenciálisan ki vannak téve SSRF (Server-side request forgery), RFI (Remote File Inclusion) és LFI (Local File Inclusion) támadásoknak. A sebezhetőséget a Rust 1.53.0 verziójában orvosolták.

A vulnerability in the network libraries of Rust and Go languages, allowing the bypass of IP address verification

A Go nyelvben a "net" standard könyvtára problémás (CVE-2021-29923). A beépített net.ParseCIDR függvény figyelmen kívül hagyja a nullákat a nyolcadik számjegyek előtt, ahelyett, hogy kezelné őket. Például a támadó átadhatja az 00000177.0.0.1 értéket, amely a net.ParseCIDR(00000177.0.0.1/24) függvény ellenőrzésénél 177.0.0.1/24-ként kerül feldolgozásra, nem pedig 127.0.0.1/24-ként. A probléma a Kubernetes platformon is megjelenik. A sebezhetőséget a Go 1.16.3 és a 1.17 bétaverziójában orvosolták.

A vulnerability in the network libraries of Rust and Go languages, allowing the bypass of IP address verification
Videó lejátszása


Forrás: opennet.ru
Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster