Im NPM-Paket node-netmask, das etwa 3 Millionen Downloads pro Woche verzeichnet und in über 270.000 Projekten auf GitHub als Abhängigkeit eingesetzt wird, wurde eine Schwachstelle (CVE-2021-28918) entdeckt, die es ermöglicht, die Überprüfungen zu umgehen, bei denen die Netzwerkmaske verwendet wird, um das Eintreffen in Adressbereiche zu bestimmen oder zur Filterung. Das Problem wurde in der Version node-netmask 2.0.0 behoben.
Die Schwachstelle ermöglicht es, eine externe IP-Adresse als Adresse aus dem internen Netzwerk zu behandeln und umgekehrt. Bei bestimmter Logik der Verwendung des node-netmask-Moduls in der Anwendung können SSRF (Server-Side Request Forgery), RFI (Remote File Inclusion) und LFI (Local File Inclusion) Angriffe durchgeführt werden, um auf Ressourcen im internen Netzwerk zuzugreifen und externe oder lokale Dateien in die Ausführungskette einzufügen. Das Problem liegt darin, dass laut Spezifikation die mit Null beginnenden Stringwerte von Adressen als oktale Zahlen interpretiert werden sollten, aber das Modul „node-netmask“ berücksichtigt diese Besonderheit nicht und verarbeitet sie als dezimale Zahlen.
Beispielsweise kann ein Angreifer eine lokale Ressource anfordern, indem er den Wert „0177.0.0.1“ angibt, der „127.0.0.1“ entspricht. Das Modul „node-netmask“ verwirft jedoch die Null und verarbeitet „0177.0.0.1“ als „177.0.0.1“, was in der Anwendung bei der Bewertung von Zugriffsregeln nicht die Identität mit „127.0.0.1“ ermöglicht. Ebenso kann ein Angreifer die Adresse „0127.0.0.1“ angeben, die identisch mit „87.0.0.1“ sein sollte, aber im Modul „node-netmask“ als „127.0.0.1“ verarbeitet wird. Ebenso kann die Überprüfung des Zugriffs auf Intranet-Adressen durch Werte wie „012.0.0.1“ (äquivalent zu „10.0.0.1“, aber bei der Überprüfung als „12.0.0.1“ behandelt) ausgetrickst werden.
Die Forscher, die das Problem entdeckt haben, beschreiben die Schwachstelle als katastrophal und nennen mehrere Angriffsszenarien, wobei die meisten von ihnen jedoch spekulativ erscheinen. Zum Beispiel wird die Möglichkeit erwähnt, eine Anwendung auf Basis von Node.js anzugreifen, die externe Verbindungen aufbaut, um Ressourcen basierend auf Parametern oder Daten der Eingabeanfrage anzufordern, wobei jedoch keine spezifische Anwendung genannt oder detailliert beschrieben wird. Selbst wenn Anwendungen gefunden werden, die Ressourcen basierend auf Eingaben herunterladen, IP-Adressen, ist nicht ganz klar, wie die Schwachstelle in der Praxis ausgebeutet werden kann, ohne mit dem lokalen Netzwerk verbunden zu sein oder die Kontrolle über „spiegelnde“ IP-Adressen zu erhalten.
Forscher vermuten lediglich, dass die Inhaber von 87.0.0.1 (Telecom Italia) und 0177.0.0.1 (Brasil Telecom) in der Lage sind, die Zugangsbeschränkung zu 127.0.0.1 zu umgehen. Ein realistischeres Szenario ist die Nutzung einer Schwachstelle zum Umgehen verschiedener auf der Anwendungsebene implementierter Sperrlisten. Das Problem kann auch für den Austausch der Definition von Intranetbereichen im NPM-Modul „private-ip“ angewendet werden.
Quelle: opennet.ru
