Kwesbaarheid in die netwerkbiblioteke van Rust and Go-tale wat jou toelaat om IP-adresverifikasie te omseil

Kwesbaarhede wat verband hou met verkeerde verwerking van IP-adresse met oktale syfers in adresontledingsfunksies is in die standaardbiblioteke van die Rust en Go-tale geïdentifiseer. Die kwesbaarhede maak dit moontlik om kontrole vir geldige adresse in toepassings te omseil, byvoorbeeld om toegang tot teruglus-koppelvlak-adresse (127.xxx) of intranet-subnette te organiseer wanneer SSRF (Bediener-kant versoek vervalsing) aanvalle uitgevoer word. Die kwesbaarhede gaan voort met die siklus van probleme wat voorheen geïdentifiseer is in die biblioteke node-netmasker (JavaScript, CVE-2021-28918, CVE-2021-29418), private-ip (JavaScript, CVE-2020-28360), ipaddress (Python, CVE- 2021-29921), Data::Valideer::IP (Perl, CVE-2021-29662) en Net::Netmasker (Perl, CVE-2021-29424).

Volgens die spesifikasie moet IP-adresstringwaardes wat met 'n nul begin, as oktale getalle geïnterpreteer word, maar baie biblioteke neem dit nie in ag nie en gooi bloot die nul weg en behandel die waarde as 'n desimale getal. Byvoorbeeld, die getal 0177 in oktaal is gelyk aan 127 in desimale. 'n Aanvaller kan 'n hulpbron versoek deur die waarde "0177.0.0.1" te spesifiseer, wat in desimale notasie ooreenstem met "127.0.0.1". As die problematiese biblioteek gebruik word, sal die toepassing nie bespeur dat die adres 0177.0.0.1 in die subnet 127.0.0.1/8 is nie, maar in werklikheid, wanneer 'n versoek gestuur word, kan dit toegang verkry tot die adres "0177.0.0.1", wat die netwerkfunksies sal as 127.0.0.1 verwerk. Op 'n soortgelyke manier kan u die kontrole van toegang tot intranetadresse bedrieg deur waardes soos "012.0.0.1" (gelykstaande aan "10.0.0.1") te spesifiseer.

In Rust is die standaardbiblioteek "std::net" deur 'n probleem geraak (CVE-2021-29922). Die IP-adresontleder van hierdie biblioteek het 'n nul voor die waardes in die adres weggegooi, maar slegs as nie meer as drie syfers gespesifiseer is nie, byvoorbeeld, sou "0177.0.0.1" as 'n ongeldige waarde en 'n verkeerde resultaat beskou word sal teruggestuur word in reaksie op 010.8.8.8 en 127.0.026.1. Toepassings wat std::net::IpAddr gebruik wanneer gebruikergespesifiseerde adresse ontleed word, is moontlik vatbaar vir SSRF (Bedienerkantversoekvervalsing), RFI (Afgeleë lêerinsluiting) en LFI (plaaslike lêerinsluiting) aanvalle. Die kwesbaarheid is in die Rust 1.53.0-tak opgelos.

Kwesbaarheid in die netwerkbiblioteke van Rust and Go-tale wat jou toelaat om IP-adresverifikasie te omseil

In Go word die standaard biblioteek "net" geraak (CVE-2021-29923). Die net.ParseCIDR ingeboude funksie slaan voorste nulle voor oktale getalle oor in plaas daarvan om dit te verwerk. Byvoorbeeld, 'n aanvaller kan die waarde 00000177.0.0.1 deurgee, wat, wanneer dit in die net.ParseCIDR(00000177.0.0.1/24)-funksie gekontroleer is, ontleed sal word as 177.0.0.1/24, en nie 127.0.0.1/24 nie. Die probleem manifesteer hom ook in die Kubernetes-platform. Die kwesbaarheid is reggestel in Go-vrystelling 1.16.3 en beta 1.17.

Kwesbaarheid in die netwerkbiblioteke van Rust and Go-tale wat jou toelaat om IP-adresverifikasie te omseil


Bron: opennet.ru

Voeg 'n opmerking