A Rust és Go nyelvek hálózati könyvtárainak sebezhetősége, amely lehetővé teszi az IP-cím ellenőrzésének megkerülését

A Rust és Go nyelvek szabványos könyvtáraiban a címelemző funkciókban az oktális számjegyeket tartalmazó IP-címek helytelen feldolgozásával kapcsolatos sebezhetőségeket azonosítottak. A sérülékenységek lehetővé teszik az érvényes címek ellenőrzésének megkerülését az alkalmazásokban, például a visszacsatolási felület címeihez (127.xxx) vagy intranet alhálózatokhoz való hozzáférés megszervezését SSRF (Server-side request forgery) támadások végrehajtásakor. A sérülékenységek folytatják a korábban a node-netmask (JavaScript, CVE-2021-28918, CVE-2021-29418), a private-ip (JavaScript, CVE-2020-28360), az ipaddress (Python, CVE-) könyvtárakban azonosított problémák körét. 2021-29921 ), Data::Validate::IP (Perl, CVE-2021-29662) és Net::Netmask (Perl, CVE-2021-29424).

A specifikáció szerint a nullával kezdődő IP-cím karakterlánc-értékeket oktális számként kell értelmezni, de sok könyvtár ezt nem veszi figyelembe, és egyszerűen elveti a nullát, az értéket decimális számként kezelve. Például a 0177 oktális szám 127 decimális számmal egyenlő. A támadó a „0177.0.0.1” érték megadásával kérhet erőforrást, amely decimális jelöléssel a „127.0.0.1” értéknek felel meg. A problémás könyvtár használata esetén az alkalmazás nem észleli, hogy a 0177.0.0.1 cím a 127.0.0.1/8 alhálózatban van, de valójában kérés elküldésekor hozzáférhet a „0177.0.0.1” címhez, amelyet a A hálózati funkciók feldolgozása 127.0.0.1. Hasonló módon csalhatja az intranetes címekhez való hozzáférés ellenőrzését, ha olyan értékeket ad meg, mint a „012.0.0.1” (egyenértékű a „10.0.0.1”-el).

A Rustban az "std::net" szabványos könyvtárat érintette egy probléma (CVE-2021-29922). Ennek a könyvtárnak az IP-cím-elemzője elvetett egy nullát a címben szereplő értékek előtt, de csak akkor, ha három számjegynél több nem volt megadva, például a „0177.0.0.1” érvénytelen értéknek és hibás eredménynek számít. 010.8.8.8 és 127.0.026.1 válaszként kerül visszaküldésre. Az std::net::IpAddr-t használó alkalmazások a felhasználó által megadott címek elemzésekor potenciálisan érzékenyek az SSRF (Server-side request forgery), RFI (Remote File Inclusion) és LFI (Local File Inclusion) támadásokra. A biztonsági rést a Rust 1.53.0 ágában javították ki.

A Rust és Go nyelvek hálózati könyvtárainak sebezhetősége, amely lehetővé teszi az IP-cím ellenőrzésének megkerülését

A Go programban a szabványos "net" könyvtár érintett (CVE-2021-29923). A beépített net.ParseCIDR függvény feldolgozás helyett kihagyja az oktális számok előtti nullákat. Például egy támadó átadhatja a 00000177.0.0.1 értéket, amely a net.ParseCIDR(00000177.0.0.1/24) függvényben 177.0.0.1/24ként lesz értelmezve, nem pedig 127.0.0.1/24. A probléma a Kubernetes platformon is megnyilvánul. A sérülékenységet a Go 1.16.3-as és béta 1.17-es verziójában javították.

A Rust és Go nyelvek hálózati könyvtárainak sebezhetősége, amely lehetővé teszi az IP-cím ellenőrzésének megkerülését


Forrás: opennet.ru

Hozzászólás