Aikido

Prévenir la pollution des prototypes dans votre référentiel

Willem Delbare
Willem Delbare
|
#

Si vous êtes arrivé sur cette page directement à partir d'une Pull Request d'Aikido Autofix et que vous voulez juste apprendre comment terminer la PR, passez directement à Comment implémenter.

L'écosystème JavaScript a un problème qui s'appelle la pollution par les prototypes. Pour une entreprise SaaS qui utilise JavaScript/npm, 20 à 30 % de toutes les vulnérabilités connues (CVE) détectées dans les dépendances sont causées par la pollution des prototypes. Elles ne sont généralement pas faciles à exploiter, mais dans les cas les plus graves, elles peuvent conduire à des failles d'exécution de code à distance. Il est donc difficile de les ignorer complètement.

Deux façons de prévenir la pollution des prototypes

Il existe un support expérimental dans Node.js pour geler le prototype par défaut sous un drapeau appelé --frozen-intrinsics. L'activation de ce drapeau met en échec toutes les attaques par pollution du prototype. Cependant, nous ne pouvons pas encore le recommander parce qu'il est expérimental et qu'il ne fonctionnera pas sur les bases de code frontales. Cela vous empêcherait de construire la même protection pour votre frontend et votre backend.

Une alternative est nopp (No Prototype Pollution), une bibliothèque de 14 lignes qui gèle le prototype (et certains autres points d'entrée).

Comment mettre en œuvre

1. Importer la bibliothèque

Après avoir installé nopp, tout ce que vous avez à faire est d'aller dans le script qui démarre votre application. Là, il vous suffit d'exiger la bibliothèque, après avoir exigé toutes vos autres bibliothèques. Exemple de livraison ci-dessous :

Prévention de la pollution des prototypes par la mise en œuvre de la nopp, étape 1 : exemple de validation pour l'importation de la bibliothèque.
Importation de la bibliothèque nopp (étape 1)

2. Vérification de la sécurité des bibliothèques à l'échelle de l'application en fonction de la manipulation du prototype

La raison pour laquelle nous gelons le prototype après avoir inclus d'autres bibliothèques est que certaines de vos autres bibliothèques peuvent dépendre de la modification du prototype pour fonctionner ! Même en s'assurant de geler le prototype APRES avoir inclus d'autres bibliothèques, il est toujours possible que vous ayez besoin d'un remaniement avant que votre application ne fonctionne à nouveau !

Par exemple, le kit aws-sdk d'Amazon pour Node.js modifie le prototype lors de la construction d'objets tels que "new AWS.S3(...)". Dans de tels cas, vous devrez peut-être procéder à un remaniement comme indiqué ci-dessous, en vous assurant que l'objet est créé lorsque votre processus Node.js est démarré et non lors d'une phase ultérieure.

Prévenir la pollution des prototypes en implémentant nopp, étape 2 : faire un petit refactor pour corriger l'utilisation d'AWS
Faire un petit refactor pour corriger l'utilisation d'AWS (étape 2)

S'assurer que votre application fonctionne toujours après ce changement peut représenter un investissement en temps plus important pour les grands dépôts qui ont une faible couverture de test. Pour les référentiels plus petits, cela vaut la peine de ne plus jamais avoir à s'occuper de la pollution des prototypes. Pour les référentiels plus importants, cela peut s'avérer plus complexe, mais l'investissement en ingénierie aura probablement un retour sur investissement positif à long terme.

Obtenir la sécurité gratuitement

Sécurisez votre code, votre cloud et votre environnement d'exécution dans un système central.
Trouvez et corrigez rapidement et automatiquement les vulnérabilités.

Aucune carte de crédit n'est requise |Résultats du balayage en 32 secondes.