Vulnerabileco en la retaj bibliotekoj de Rust kaj Go-lingvoj, kiu ebligas al vi preterpasi IP-adreskonfirmon

Vundeblecoj ligitaj al malĝusta prilaborado de IP-adresoj kun oktalaj ciferoj en adres-analizaj funkcioj estis identigitaj en la normaj bibliotekoj de la Rust kaj Go lingvoj. La vundeblecoj ebligas preteriri kontrolojn pri validaj adresoj en aplikoj, ekzemple, organizi aliron al buklaj interfaco-adresoj (127.xxx) aŭ intraretaj subretoj dum farado de atakoj SSRF (Server-side request forgery). La vundeblecoj daŭrigas la ciklon de problemoj antaŭe identigitaj en la bibliotekoj nodo-retmasko (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) kaj Net::Netmask (Perl, CVE-2021-29424).

Laŭ la specifo, IP-adresaj ĉenoj komencantaj per nulo devas esti interpretitaj kiel oktalaj nombroj, sed multaj bibliotekoj ne konsideras tion kaj simple forĵetas la nulon, traktante la valoron kiel dekuma nombro. Ekzemple, la nombro 0177 en oktalo estas egala al 127 en decimalo. Atakanto povas peti rimedon specifante la valoron "0177.0.0.1", kiu en dekuma skribmaniero respondas al "127.0.0.1". Se la problema biblioteko estas uzata, la aplikaĵo ne detektos, ke la adreso 0177.0.0.1 estas en la subreto 127.0.0.1/8, sed fakte, sendante peton, ĝi povas aliri la adreson "0177.0.0.1", kiun la retaj funkcioj procesiĝos kiel 127.0.0.1. Simile, vi povas trompi la kontrolon de aliro al intraretaj adresoj specifante valorojn kiel "012.0.0.1" (ekvivalenta al "10.0.0.1").

En Rust, la norma biblioteko "std::net" estis tuŝita de problemo (CVE-2021-29922). La analizilo de IP-adreso de ĉi tiu biblioteko forĵetis nulon antaŭ la valoroj en la adreso, sed nur se ne pli ol tri ciferoj estus specifitaj, ekzemple, "0177.0.0.1" estus perceptita kiel nevalida valoro, kaj malĝusta rezulto. estus resendita responde al 010.8.8.8 kaj 127.0.026.1. Aplikoj kiuj uzas std::net::IpAddr dum analizado de uzant-specifitaj adresoj estas eble sentemaj al atakoj SSRF (Servilflanka petofalsado), RFI (Fora Dosiera Inkludo) kaj LFI (Loka Dosiera Inkludo). La vundebleco estis riparita en la branĉo Rust 1.53.0.

Vulnerabileco en la retaj bibliotekoj de Rust kaj Go-lingvoj, kiu ebligas al vi preterpasi IP-adreskonfirmon

En Go, la norma biblioteko "reto" estas tuŝita (CVE-2021-29923). La enkonstruita funkcio net.ParseCIDR preterpasas antaŭajn nulojn antaŭ oktalaj nombroj anstataŭ prilabori ilin. Ekzemple, atakanto povas pasi la valoron 00000177.0.0.1, kiu, kiam kontrolite en la funkcio net.ParseCIDR(00000177.0.0.1/24), estos analizita kiel 177.0.0.1/24, kaj ne 127.0.0.1/24. La problemo ankaŭ manifestiĝas en la platformo Kubernetes. La vundebleco estas riparita en Go eldono 1.16.3 kaj beta 1.17.

Vulnerabileco en la retaj bibliotekoj de Rust kaj Go-lingvoj, kiu ebligas al vi preterpasi IP-adreskonfirmon


fonto: opennet.ru

Aldoni komenton