Dobësi në bibliotekat e rrjetit të gjuhëve Rust dhe Go që ju lejon të anashkaloni verifikimin e adresës IP

Dobësitë që lidhen me përpunimin e gabuar të adresave IP me shifra oktal në funksionet e analizimit të adresave janë identifikuar në bibliotekat standarde të gjuhëve Rust dhe Go. Dobësitë bëjnë të mundur anashkalimin e kontrolleve për adresa të vlefshme në aplikacione, për shembull, organizimin e aksesit në adresat e ndërfaqes loopback (127.xxx) ose nënrrjetet e intranetit kur kryeni sulme SSRF (Falsifikim i kërkesës nga ana e serverit). Dobësitë vazhdojnë ciklin e problemeve të identifikuara më parë në maskën e nyjeve të bibliotekave (JavaScript, CVE-2021-28918, CVE-2021-29418), ip private (JavaScript, CVE-2020-28360), adresën ipad (Python, CVE-C), 2021-29921 ), Të dhënat::Vërteto::IP (Perl, CVE-2021-29662) dhe Net::Netmask (Perl, CVE-2021-29424).

Sipas specifikimit, vlerat e vargut të adresës IP që fillojnë me një zero duhet të interpretohen si numra oktalë, por shumë biblioteka nuk e marrin parasysh këtë dhe thjesht e hedhin zeron, duke e trajtuar vlerën si një numër dhjetor. Për shembull, numri 0177 në oktal është i barabartë me 127 në dhjetor. Një sulmues mund të kërkojë një burim duke specifikuar vlerën "0177.0.0.1", e cila në shënimin dhjetor korrespondon me "127.0.0.1". Nëse përdoret biblioteka problematike, aplikacioni nuk do të zbulojë se adresa 0177.0.0.1 është në nënrrjetin 127.0.0.1/8, por në fakt, kur dërgon një kërkesë, ai mund të hyjë në adresën "0177.0.0.1", e cila Funksionet e rrjetit do të përpunohen si 127.0.0.1. Në mënyrë të ngjashme, ju mund të mashtroni kontrollin e aksesit në adresat e intranetit duke specifikuar vlera si "012.0.0.1" (ekuivalente me "10.0.0.1").

Në Rust, biblioteka standarde "std::net" u prek nga një problem (CVE-2021-29922). Analisti i adresës IP të kësaj biblioteke hodhi një zero përpara vlerave në adresë, por vetëm nëse nuk specifikoheshin më shumë se tre shifra, për shembull, "0177.0.0.1" do të perceptohej si një vlerë e pavlefshme dhe një rezultat i pasaktë do të kthehej në përgjigje të 010.8.8.8 dhe 127.0.026.1. Aplikacionet që përdorin std::net::IpAddr kur analizojnë adresat e specifikuara nga përdoruesi janë potencialisht të ndjeshëm ndaj sulmeve SSRF (Falsifikim i kërkesës nga ana e serverit), RFI (Përfshirja e skedarit në distancë) dhe LFI (Përfshirja e skedarit lokal). Dobësia u rregullua në degën Rust 1.53.0.

Dobësi në bibliotekat e rrjetit të gjuhëve Rust dhe Go që ju lejon të anashkaloni verifikimin e adresës IP

Në Go, preket "net" standard i bibliotekës (CVE-2021-29923). Funksioni i integruar net.ParseCIDR kapërcen zerat kryesore përpara numrave oktalë në vend që t'i përpunojë ato. Për shembull, një sulmues mund të kalojë vlerën 00000177.0.0.1, e cila, kur kontrollohet në funksionin net.ParseCIDR(00000177.0.0.1/24), do të analizohet si 177.0.0.1/24, dhe jo 127.0.0.1/24. Problemi shfaqet edhe në platformën Kubernetes. Dobësia është fiksuar në versionin Go version 1.16.3 dhe beta 1.17.

Dobësi në bibliotekat e rrjetit të gjuhëve Rust dhe Go që ju lejon të anashkaloni verifikimin e adresës IP


Burimi: opennet.ru

Shto një koment