Në bibliotekat standarde të gjuhëve Rust dhe Go janë identifikuar dobësi të lidhura me përpunimin e gabuar të adresave IP që përmbajnë cifra oktonale në funksionet e analizës së adresave. Këto dobësi lejojnë kalimin e kontrollit të adresave të lejueshme në aplikacione, për shembull, për të organizuar akses në adresat e ndërfaqes loopback (127.x.x.x) ose në subnetet intranet gjatë sulmeve SSRF (Server-side request forgery). Këto dobësi vazhdojnë ciklin e problemeve, të identifikuara më parë në bibliotekat 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) dhe Net::Netmask (Perl, CVE-2021-29424).
Sipas specifikacioneve, vlerat e vargjeve IP-adresave, që fillojnë me zero, duhet të interpretohen si numra oktalë, por shumë biblioteka nuk e kanë marrë parasysh këtë veçori dhe thjesht e heqin zero-n, duke e trajtuar vlerën si numër decimal. Për shembull, numri 0177 në sistemin oktal është i barabartë me 127 në atë decimal. Një sulmues mund të kërkojë një burim duke specifikuar vlerën "0177.0.0.1", e cila në reprezentimin decimal korrespondon me "127.0.0.1". Nëse përdoret një bibliotekë problematike, aplikacioni nuk do të identifikojë përfshirjen e adresës 0177.0.0.1 në subnetin 127.0.0.1/8, por në praktikë, duke dërguar kërkesën, mund të kryejë një akses në adresën "0177.0.0.1", e cila do të përpunohet nga funksionet rrjet si 127.0.0.1. Në mënyrë të ngjashme, mund të përvetësohet edhe kontrolli i aksesit në adresat intranet, duke specifikuar vlera si "012.0.0.1" (barazohet me "10.0.0.1").
Në Rust, problemi ka prekur bibliotekën standarde "std::net" (CVE-2021-29922). Parseri i adresave IP të kësaj biblioteke heq zero-n përpara vlerave në adresë, por vetëm nëse ndodhen jo më shumë se tri cifra, për shembull, "0177.0.0.1" do të perceptohet si një vlerë të pavlefshme, ndërsa në përgjigje të 010.8.8.8 dhe 127.0.026.1 do të kthehet një rezultat të gabuar. Aplikacionet që përdorin std::net::IpAddr për të analizuar adresat e dhëna nga përdoruesit janë potencialisht të ekspozuara ndaj sulmeve SSRF (Server-side request forgery), RFI (Remote File Inclusion) dhe LFI (Local File Inclusion). Dobësia është zgjidhur në degën Rust 1.53.0.

Në gjuhën Go, problemi prek bibliotekën standarde "net" (CVE-2021-29923). Funksioni i integruar net.ParseCIDR lë në anë zero-t përpara numrave oktalë, në vend që t'i përpunojë ato. Për shembull, një sulmues mund të dërgojë vlerën 00000177.0.0.1, e cila në verifikimin e funksionit net.ParseCIDR(00000177.0.0.1/24) do të analizohet si 177.0.0.1/24, dhe jo 127.0.0.1/24. Problemi gjithashtu shfaqet në platformën Kubernetes. Dobësia është zgjidhur në versionin Go 1.16.3 dhe në versionin beta 1.17.


Burimi: opennet.ru
