Ranjivost u mrežnim bibliotekama Rust i Go jezika koja vam omogućava da zaobiđete verifikaciju IP adrese

U standardnim bibliotekama Rust i Go jezika identifikovane su ranjivosti u vezi sa netačnom obradom IP adresa sa oktalnim ciframa u funkcijama raščlanjivanja adresa. Ranjivosti omogućavaju da se zaobiđu provjere valjanih adresa u aplikacijama, na primjer, da se organizuje pristup adresama interfejsa povratne petlje (127.xxx) ili intranet podmrežama prilikom izvođenja SSRF (Falsifikovanje zahteva na strani servera) napada. Ranjivosti nastavljaju ciklus problema prethodno identifikovanih u bibliotekama 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) i Net::Netmask (Perl, CVE-2021-29424).

Prema specifikaciji, vrijednosti niza IP adrese koje počinju nulom trebale bi se tumačiti kao oktalni brojevi, ali mnoge biblioteke to ne uzimaju u obzir i jednostavno odbacuju nulu, tretirajući vrijednost kao decimalni broj. Na primjer, broj 0177 u oktalnom obliku jednak je 127 u decimalnom obliku. Napadač može zatražiti resurs specificiranjem vrijednosti "0177.0.0.1", koja u decimalnom zapisu odgovara "127.0.0.1". Ako se koristi problematična biblioteka, aplikacija neće otkriti da se adresa 0177.0.0.1 nalazi u podmreži 127.0.0.1/8, ali u stvari, prilikom slanja zahtjeva, može pristupiti adresi "0177.0.0.1", koju mrežne funkcije će obraditi kao 127.0.0.1. Na sličan način možete prevariti provjeru pristupa intranet adresama navodeći vrijednosti poput “012.0.0.1” (ekvivalentno “10.0.0.1”).

U Rustu, standardna biblioteka "std::net" je bila pogođena problemom (CVE-2021-29922). Parser IP adrese ove biblioteke odbacio je nulu ispred vrijednosti u adresi, ali samo ako nije navedeno više od tri cifre, na primjer, "0177.0.0.1" bi se percipirala kao nevažeća vrijednost, a netačan rezultat će biti vraćen kao odgovor na 010.8.8.8 i 127.0.026.1. Aplikacije koje koriste std::net::IpAddr prilikom raščlanjivanja korisnički specificiranih adresa potencijalno su podložne SSRF (krivotvorenje zahtjeva na strani servera), RFI (udaljeno uključivanje datoteka) i LFI (lokalno uključivanje datoteka) napadima. Ranjivost je ispravljena u grani Rust 1.53.0.

Ranjivost u mrežnim bibliotekama Rust i Go jezika koja vam omogućava da zaobiđete verifikaciju IP adrese

U Go, standardna biblioteka "net" je pogođena (CVE-2021-29923). Ugrađena funkcija net.ParseCIDR preskače vodeće nule prije oktalnih brojeva umjesto da ih obrađuje. Na primjer, napadač može proslijediti vrijednost 00000177.0.0.1, koja će, kada se provjeri u funkciji net.ParseCIDR(00000177.0.0.1/24), biti raščlanjena kao 177.0.0.1/24, a ne 127.0.0.1/24. Problem se manifestuje i na Kubernetes platformi. Ranjivost je ispravljena u Go izdanju 1.16.3 i beta 1.17.

Ranjivost u mrežnim bibliotekama Rust i Go jezika koja vam omogućava da zaobiđete verifikaciju IP adrese


izvor: opennet.ru

Dodajte komentar