Sårbarhed i netværksbibliotekerne i Rust and Go-sprogene, der giver dig mulighed for at omgå IP-adressebekræftelse

Sårbarheder relateret til forkert behandling af IP-adresser med oktale cifre i adresseparsing-funktioner er blevet identificeret i standardbibliotekerne for Rust- og Go-sprogene. Sårbarhederne gør det muligt at omgå kontrol af gyldige adresser i applikationer, for eksempel for at organisere adgang til loopback-interfaceadresser (127.xxx) eller intranetundernet, når der udføres SSRF-angreb (Server-side request forgery). Sårbarhederne fortsætter den cyklus af problemer, der tidligere er identificeret i bibliotekernes node-netmaske (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) og Net::Netmaske (Perl, CVE-2021-29424).

Ifølge specifikationen skal IP-adressestrengværdier, der starter med et nul, fortolkes som oktale tal, men mange biblioteker tager ikke højde for dette og kasserer blot nullet og behandler værdien som et decimaltal. For eksempel er tallet 0177 i oktal lig med 127 i decimal. En angriber kan anmode om en ressource ved at angive værdien "0177.0.0.1", som i decimalnotation svarer til "127.0.0.1". Hvis det problematiske bibliotek bruges, vil applikationen ikke registrere, at adressen 0177.0.0.1 er i undernettet 127.0.0.1/8, men faktisk kan den, når du sender en anmodning, få adgang til adressen "0177.0.0.1", som netværksfunktioner behandles som 127.0.0.1. På lignende måde kan du snyde kontrollen af ​​adgang til intranetadresser ved at angive værdier som "012.0.0.1" (svarende til "10.0.0.1").

I Rust blev standardbiblioteket "std::net" berørt af et problem (CVE-2021-29922). IP-adresseparseren af ​​dette bibliotek kasserede et nul før værdierne i adressen, men kun hvis der ikke var angivet mere end tre cifre, for eksempel ville "0177.0.0.1" blive opfattet som en ugyldig værdi og et forkert resultat ville blive returneret som svar på 010.8.8.8 og 127.0.026.1. Programmer, der bruger std::net::IpAddr ved parsing af brugerspecificerede adresser, er potentielt modtagelige for SSRF (Server-side request forgery), RFI (Remote File Inclusion) og LFI (Local File Inclusion) angreb. Sårbarheden blev rettet i Rust 1.53.0-grenen.

Sårbarhed i netværksbibliotekerne i Rust and Go-sprogene, der giver dig mulighed for at omgå IP-adressebekræftelse

I Go er standardbiblioteket "net" påvirket (CVE-2021-29923). Den indbyggede net.ParseCIDR-funktion springer foranstillede nuller over før oktale tal i stedet for at behandle dem. For eksempel kan en angriber sende værdien 00000177.0.0.1, som, når den er markeret i net.ParseCIDR(00000177.0.0.1/24)-funktionen, vil blive parset som 177.0.0.1/24 og ikke 127.0.0.1/24. Problemet viser sig også i Kubernetes-platformen. Sårbarheden er rettet i Go release 1.16.3 og beta 1.17.

Sårbarhed i netværksbibliotekerne i Rust and Go-sprogene, der giver dig mulighed for at omgå IP-adressebekræftelse


Kilde: opennet.ru

Tilføj en kommentar