Un bug critique de netmask affecte des milliers d’applications

0

L’outil netmask de la bibliothèque populaire npm a une vulnérabilité critique de réseautage.

Netmask est fréquemment utilisé par des centaines de milliers d’applications pour analyser les adresses IPv4 et les blocs CIDR ou les comparer.

Le composant est téléchargé plus de 3 millions de fois par semaine, et à ce jour, compte plus de 238 millions de téléchargements au total au cours de sa durée de vie. De plus, environ 278 000 référentiels GitHub dépendent de netmask.

La faille présente dans la bibliothèque signifie que lors de l’analyse d’une adresse IP avec un zéro au début, netmask voit une adresse IP différente en raison de validations incorrectes en place.

Un zéro en tête change l’adresse IP

Les chercheurs en sécurité Victor Viale, Sick Codes, Nick Sahler, Kelly Kaoudis et John Jackson ont révélé une faille dans la populaire bibliothèque netmask.

La vulnérabilité, identifiée sous le nom de CVE-2021-28918 et plus récemment sous le nom de CVE-2021-29418, concerne la façon dont netmask gère les adresses IP de format mixte, ou plus précisément lorsqu’une adresse IPv4 décimale contient un zéro en tête.

Une adresse IP peut être représentée dans une variété de formats, y compris hexadécimale et entière, bien que les adresses IPv4 les plus souvent vues sont exprimées en format décimal.

Disons qu’on vous donne une adresse IP en format décimal, 127.0.0.1, ce qui est l’adresse loopback locale ou localhost.

Si vous mettez un 0 devant, est-ce qu’une requête devrait encore voir 0127.0.0.1 comme 127.0.0.1 ou autre chose ?

Essayez ceci dans votre navigateur Web. Dans les tests effectués, en tapant 0127.0.0.1/ dans la barre d’adresse de Chrome, le navigateur le traite comme une ADRESSE IP en format octal.

En appuyant sur entrée ou retour, l’IP change en fait à son équivalent décimal de 87.0.0.1, c’est ainsi que la plupart des applications sont censées traiter ces adresses IP ambiguës.

netmask adresse ip

Il convient de noter en particulier que 127.0.0.1 n’est pas une adresse IP publique, mais une adresse loopback, cependant, sa représentation ambiguë la modifie en une adresse IP publique conduisant à un hôte complètement différent.

Mais, dans le cas de netmask, tous les zéros en tête seraient supprimés.

Selon les spécifications originales de l’IETF, certaines parties d’une adresse IPv4 peuvent être interprétées comme octales si elles sont préfixées avec un « 0 ».

« Mais netmask ignore cela. Il considérera toujours ces parties comme étant décimales, ce qui signifie que si vous essayez de valider qu’une adresse IP appartient à une gamme, cela sera erroné pour les représentations octales des adresses IPv4 », ont déclaré Sahler et Viale dans une interview.

Contournement Anti-SSRF et de liste noire pour l’inclusion de fichier à distance

À première vue, ce bogue peut ne pas sembler grave, mais si un attaquant est en mesure d’influencer l’entrée d’adresse IP analysée par l’application, le bogue peut donner lieu à diverses vulnérabilités, allant des contournements anti-Server-Side Request Forgery (SSRF) jusqu’à l’inclusion de fichiers à distance (RFI).

Les chercheurs ont partagé divers exemples démontrant la même chose.

« Quelqu’un utilise un serveur pour assainir une requête entrante ou un paramètre de requête censé être un URI utilisé pour une connexion ultérieure, pour récupérer des ressources, quelque chose comme ça. »

« L’attaquant crée une adresse IP avec certains ou tous les octets en base 8, dans l’ancienne représentation JavaScript avec le préfixe 0. »

« Cela pourrait être utile pour un SSRF, par exemple, pour forcer un serveur à se connecter à 127.0.0.1 en écrivant 0177.0.0.01. 177 en base-8 équivaut à 127 en décimal(base 10) », a déclaré Kaoudis.

« Un bon exemple est un système qui expose les webhooks et valide les URL des utilisateurs via une vérification de masque de réseau qui est vulnérable à SSRF », a également ajouté Viale.

Alors que ce bogue peut également être exploité pour l’inclusion de fichiers distants (RFI) si un attaquant crée une adresse IP qui semble privée au masque de réseau, en raison de la façon dont le masque de réseau convertit toutes les parties IPv4 (octets) au format décimal, mais est vue comme public par d’autres composants, a expliqué Kaoudis.

En 2018, le populaire projet logiciel curl s’est également avéré avoir une faille identique dans laquelle il traitait l’analyse des adresses IPv4 octales comme décimales.

À l’époque, un hacker éthique Nicolas Grégoire avait également mis en lumière comment une telle faille pouvait être exploitée pour contourner les listes de contrôle d’accès (ACL) basées sur l’adresse IP.

«J’utilise souvent ces conversions pour contourner les listes noires anti-SSRF», a déclaré Grégoire.

Divers produits d’infrastructure de réseau et de sécurité, tels que les pare-feu d’applications Web, s’appuient sur le masque de réseau pour filtrer les adresses IP présentes sur les listes de blocage et les listes d’autorisation.

Cela signifie également que de telles failles, si elles ne sont pas vérifiées, peuvent entraîner de graves dérapages dans les contrôles de sécurité du périmètre.

Auparavant, Sick Codes, Jackson et Sahler avaient identifié une faille similaire dans le package private-ip qui, en fait, utilise également le masque de réseau comme dépendance, même aujourd’hui.

En fin de compte, dit Jackson, ce problème récemment découvert dans le masque de réseau laisse des milliers de projets vulnérables au contournement SSRF.

« Netmask a des millions de téléchargements chaque semaine, ce qui rend l’impact assez lourd. Il s’agit d’une énorme vulnérabilité de la chaîne d’approvisionnement de logiciels. »

«Rétrospectivement, notre CVE sur private-ip a atteint un niveau de sévérité de 9,8 et n’a enregistré qu’environ 175 000 téléchargements par semaine», a déclaré Jackson.

La principale préoccupation du chercheur est que de nombreux projets utilisant un masque de réseau pour l’analyse IP peuvent se tromper en pensant qu’ils sont protégés contre SSRF.

Les versions corrigées de netmask sur npm

Suite au signalement responsable de la vulnérabilité par les chercheurs, le développeur de netmask et directeur de l’ingénierie chez Netflix, Olivier Poitrey, a déployé une série de correctifs [1, 2, 3] pour le bogue sur GitHub, ainsi que des cas de test validant que les octets IPv4 avec un 0 en préfixe sont traités comme des nombres octaux et non décimaux.

Un correctif pour CVE-2021-28918 a été publié dans la version 2.0.0 de netmask sur les téléchargements npm, cependant, le chercheur RyotaK a rapidement identifié les correctifs comme étant incomplets.

En tant que tel, un nouvel identifiant CVE-2021-29418 a été attribué à cette vulnérabilité, avec un correctif réécrit introduit dans netmask version 2.0.1.

Les utilisateurs de netmask de la bibliothèque npm sont encouragés à mettre à niveau vers la version corrigée 2.0.1.

Les chercheurs ont divulgué leurs résultats dans un avis sur GitHub et dans un article de blog.

Le composant Perl Net::Netmask a également souffert de cette faille (identifié comme CVE-2021-29424), et son mainteneur, Joelle Maslak a publié un correctif dans la version 2.0000 .

Les développeurs utilisant les composants Perl Netmask et quelques autres (par exemple Net-IPAddress-Util, Net-CIDR-Lite, Net-CIDR, etc.) sont invités à s’assurer que leurs applications nettoient et normalisent les adresses IP avant de les transmettre comme entrées à ces composants , ou de préférence, passez à la version corrigée le cas échéant.

Si cet article vous a plu, jetez un œil à notre article précédent.

Laisser un commentaire