In het NPM-pakket node-netmask, met ongeveer 3 miljoen downloads per week en gebruikt als afhankelijkheid door meer dan 270.000 projecten op GitHub, is een kwetsbaarheid (CVE-2021-28918) ontdekt die checks omzeilt waarbij het subnetmasker wordt gebruikt om toegang tot adresbereiken te bepalen of voor filtering. Dit probleem is opgelost in release node-netmask 2.0.0.
De kwetsbaarheid maakt het mogelijk om een extern IP-adres te behandelen als een adres uit het interne netwerk en vice versa. Bij een bepaalde logica van gebruik van de node-netmask module in een applicatie kunnen aanvallen zoals SSRF (Server-side request forgery), RFI (Remote File Inclusion) en LFI (Local File Inclusion) uitgevoerd worden om toegang te krijgen tot middelen in het interne netwerk en om externe of lokale bestanden in de uitvoeringsketen op te nemen. Het probleem ligt in het feit dat volgens de specificatie stringwaarden voor adressen die met nul beginnen, als octale getallen moeten worden geĆÆnterpreteerd, maar de 'node-netmask'-module houdt hier geen rekening mee en behandelt ze als decimale getallen.
Bijvoorbeeld, een aanvaller kan een lokaal bronbestand opvragen door de waarde '0177.0.0.1' op te geven, die gelijk is aan '127.0.0.1', maar de 'node-netmask'-module zal de nul negeren en '0177.0.0.1' behandelen als '177.0.0.1', waardoor het in de applicatie bij het beoordelen van toegangsregels niet mogelijk is om gelijkheid vast te stellen met '127.0.0.1'. Evenzo kan een aanvaller het adres '0127.0.0.1' opgeven, dat gelijk zou moeten zijn aan '87.0.0.1', maar in de 'node-netmask'-module als '127.0.0.1' zal worden behandeld. Op dezelfde manier kan de controle van toegang tot intranetadressen worden misleid door waarden zoals '012.0.0.1' op te geven (equivalent aan '10.0.0.1', maar zal bij controle worden behandeld als '12.0.0.1').
Onderzoekers die het probleem hebben ontdekt, beschrijven het als catastrofaal en geven verschillende aanvalscenario's, maar de meeste lijken hypothetisch. Zo wordt er gesproken over de mogelijkheid om een op Node.js gebaseerde applicatie aan te vallen die externe verbindingen tot stand brengt om middelen op te vragen op basis van parameters of gegevens uit de binnenkomende aanvraag, maar de specifieke applicatie wordt niet genoemd en niet gedetailleerd. Zelfs als men applicaties zou vinden die middelen laden op basis van ingevoerde IP-adressen, is het niet helemaal duidelijk hoe de kwetsbaarheid in de praktijk kan worden toegepast zonder verbinding te maken met het lokale netwerk of zonder controle te krijgen over 'spiegel'-IP-adressen.
Onderzoekers vermoeden slechts dat de eigenaren van 87.0.0.1 (Telecom Italia) en 0177.0.0.1 (Brasil Telecom) in staat zijn om de toegangsbeperking tot 127.0.0.1 te omzeilen. Een realistischere scenario is het gebruik van een kwetsbaarheid om verschillende blokkades, geĆÆmplementeerd aan de applicatiekant, te omzeilen. Het probleem kan ook van toepassing zijn op het delen van intranetbereiken in de NPM-module "private-ip".
Bron: opennet.ru
