Kwetsbaarheid in de netwerkbibliotheken van de talen Rust en Go, waardoor de controle op IP-adressen kan worden omzeild

In de standaardbibliotheken van de talen Rust en Go zijn kwetsbaarheden vastgesteld met betrekking tot de onjuiste verwerking van IP-adressen met octale cijfers in de adresparserfuncties. De kwetsbaarheden maken het mogelijk om controles op geldige adressen in applicaties te omzeilen, bijvoorbeeld voor het maken van verbinding met loopback-adressen (127.x.x.x) of intranet-subnetten tijdens SSRF-aanvallen (Server-side request forgery). Deze kwetsbaarheden voegen zich bij de reeks problemen die eerder zijn ontdekt in de bibliotheken 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) en Net::Netmask (Perl, CVE-2021-29424).

Volgens de specificatie moeten stringwaarden IP-adressen, die met een nul beginnen, als octale getallen worden geĆÆnterpreteerd, maar veel bibliotheken houden hier geen rekening mee en werpen de nul gewoon af, waarbij ze de waarde als een decimaal getal verwerken. Bijvoorbeeld, het getal 0177 in het octale systeem is gelijk aan 127 in het decimale systeem. Een aanvaller kan een bron opvragen door de waarde "0177.0.0.1" op te geven, wat in decimale notatie overeenkomt met "127.0.0.1". Bij gebruik van een problematische bibliotheek zal de applicatie niet herkennen dat het adres 0177.0.0.1 in het subnet 127.0.0.1/8 valt, maar kan het feitelijk bij het verzenden van de aanvraag verbinding maken met het adres "0177.0.0.1", dat door netwerffuncties als 127.0.0.1 zal worden verwerkt. Evenzo kan de controle voor interne adressen worden bedrogene door waarden zoals "012.0.0.1" op te geven (equivalent aan "10.0.0.1").

In Rust was de standaardbibliotheek "std::net" (CVE-2021-29922) kwetsbaar. De IP-adresparser van deze bibliotheek wierp de nul af voor waarden in het adres, maar alleen als er niet meer dan drie cijfers zijn opgegeven; bijvoorbeeld, "0177.0.0.1" wordt opgevat als een ongeldige waarde, terwijl voor 010.8.8.8 en 127.0.026.1 een onjuist resultaat zal worden teruggegeven. Applicaties die std::net::IpAddr gebruiken bij het parseren van door de gebruiker opgegeven adressen zijn potentieel kwetsbaar voor SSRF-aanvallen (Server-side request forgery), RFI (Remote File Inclusion) en LFI (Local File Inclusion). De kwetsbaarheid is verholpen in de Rust-versie 1.53.0.

Kwetsbaarheid in de netwerkbibliotheken van de talen Rust en Go, waardoor de controle op IP-adressen kan worden omzeild

In de programmeertaal Go is de standaardbibliotheek 'net' kwetsbaar (CVE-2021-29923). De ingebouwde functie net.ParseCIDR negeert nullen voor octale getallen in plaats van deze correct te verwerken. Bijvoorbeeld, een aanvaller kan de waarde 00000177.0.0.1 doorgeven, die bij controle in de functie net.ParseCIDR(00000177.0.0.1/24) als 177.0.0.1/24 wordt geĆÆnterpreteerd in plaats van 127.0.0.1/24. Dit probleem doet zich ook voor op het Kubernetes-platform. De kwetsbaarheid is verholpen in versie Go 1.16.3 en de bĆØtaversie 1.17.

Kwetsbaarheid in de netwerkbibliotheken van de talen Rust en Go, waardoor de controle op IP-adressen kan worden omzeild
Video afspelen


Bron: opennet.ru
Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster