
Correctif pour tough-cookie v2.5.0 corrigeant la vulnérabilité de pollution de prototype CVE-2023-26136 avec Object.create(null) dans MemoryCookieStore, incluant une démonstration d’exploitation et des tests unitaires.
Ce dépôt contient une version patchée du paquet tough-cookie, version 2.5.0, pour corriger la vulnérabilité critique de Pollution de Prototype (CVE-2023-26136). La vulnérabilité permet à des attaquants de manipuler la chaîne de prototypes en injectant des propriétés dans les objets JavaScript. Cela peut entraîner des comportements inattendus, des risques de sécurité tels que l'exécution de code à distance, et des problèmes de compatibilité dans les applications utilisant ce paquet.
Les versions du paquet tough-cookie antérieures à la v4.1.3 sont vulnérables à la Pollution de Prototype lorsqu'elles utilisent CookieJar avec le mode rejectPublicSuffixes=false. La vulnérabilité provient d'une gestion incorrecte des cookies, notamment lorsque cookie.domain est défini sur . Cela permet aux attaquants de modifier l'objet de base, provoquant potentiellement des problèmes généralisés dans l'application.
__proto__Object.prototypePour plus de détails sur la CVE-2023-26136, consultez :
La pollution de prototype peut introduire plusieurs risques critiques, notamment :
Vulnérabilités de Sécurité : En modifiant l'Object.prototype de base, les attaquants peuvent manipuler le comportement des objets, potentiellement escalader les privilèges, accéder à des données sensibles, ou contourner les mécanismes de sécurité de l'application.
Déni de Service (DoS) : Polluer la chaîne de prototypes peut provoquer des comportements inattendus dans le système, entraînant des plantages, des boucles infinies ou une épuisement des ressources, rendant l'application indisponible pour les utilisateurs légitimes.
Problèmes de Compatibilité : Modifier l'Object.prototype peut provoquer des erreurs et des comportements inattendus lors de l'interaction avec d'autres bibliothèques ou frameworks. Les dépendances qui reposent sur les chaînes de prototypes peuvent se casser, entraînant des problèmes d'intégration ou un comportement défectueux de l'application lors des mises à jour.
Comportement Inattendu de l'Application : La pollution de prototype peut conduire à un comportement erratique du programme, y compris la corruption de données, les failles de sécurité, et potentiellement exposer l'application à d'autres exploits.
Le patch consiste à modifier la classe MemoryCookieStore, plus précisément la méthode putCookie, pour empêcher la pollution de prototype en créant des objets sans prototype. Les changements clés incluent :
Object.create(null) au lieu de {} pour créer des objets sans prototype.cookie.domain = __proto__.Pour installer la version patchée de tough-cookie, utilisez la commande suivante :
npm install ./tough-cookie-2.5.0-PATCHED.tgz
Ce dépôt inclut un test unitaire conçu pour vérifier que la vulnérabilité de pollution de prototype a été corrigée avec succès.
Le test, nommé prototype_pollution_test, vérifie spécifiquement que la définition de cookies avec un domaine de __proto__ n'affecte plus la chaîne de prototypes JavaScript. Cela garantit que la pollution de prototype est empêchée, préservant l'intégrité de l'application.
Pour exécuter les tests et confirmer la correction, exécutez la commande suivante :
npm test
Pour démontrer l'exploit dans les versions originale et patchée, suivez les étapes ci-dessous :
Installez la version vulnérable de tough-cookie :
npm install [email protected] && node index.js
Sortie Attendue :
Polluted object: {
Slonser: Cookie="Slonser=polluted; Domain=__proto__; Path=/notauth; hostOnly=false; aAge=5ms; cAge=5ms",
Auth: Cookie="Auth=Lol; Domain=google.com; Path=/notauth; hostOnly=false; aAge=5ms; cAge=5ms"
} EXPLOITED SUCCESSFULLY
Cela indique que le prototype d'un objet a été pollué, confirmant que la vulnérabilité est présente dans la version originale.
npm install ./tough-cookie-2.5.0-PATCHED.tgz && node index.js
Sortie Attendue :
EXPLOIT FAILED
Cela montre que l'exploit a été bloqué avec succès, confirmant que la vulnérabilité de pollution de prototype a été corrigée.
Le processus de correction de la vulnérabilité de Pollution de Prototype dans tough-cookie v2.5.0 a impliqué plusieurs étapes méthodiques pour garantir que la correction soit complète et efficace. Voici un aperçu de l'approche que j'ai suivie :
J'ai commencé par rechercher la Pollution de Prototype (CVE-2023-26136) pour comprendre son impact. La vulnérabilité permet aux attaquants d'injecter des propriétés dans la chaîne de prototypes via la propriété cookie.domain, posant potentiellement des risques de sécurité comme l'exécution de code à distance.
J'ai exploré les problèmes GitHub et les discussions autour de la vulnérabilité, y compris la correction dans tough-cookie v4.1.3, qui utilise Object.create(null) pour empêcher la pollution de prototype. Cela m'a aidé à identifier les changements nécessaires pour corriger la v2.5.0.
J'ai comparé v2.5.0 avec v4.1.3 pour comprendre les différences et identifier les changements nécessaires. La modification clé consistait à utiliser des objets sans prototype pour empêcher l'exploitation.
J'ai mis à jour la classe MemoryCookieStore pour utiliser Object.create(null) au lieu de {}, garantissant ainsi qu'aucune pollution de prototype ne se produise.
J'ai écrit des tests unitaires pour vérifier la correction et créé un script de démonstration de l'exploit (index.js) pour montrer comment la vulnérabilité est empêchée dans la version patchée.
Enfin, j'ai documenté la correction, y compris les instructions d'installation et de test, et j'ai empaqueté la version patchée (tough-cookie-2.5.0-PATCHED.tgz) pour une distribution facile.
Fichiers ajoutés/modifiés par rapport à v2.5.0
index.js : Script principal pour démontrer la vulnérabilité et la correction.lib/memstore.js : La classe MemoryCookieStore modifiée pour empêcher la pollution de prototype.test/ietf_data/parser.json : Mis à jour pour corriger les dates obsolètes dans les données de test.test/prototype_pollution_test.js : Tests unitaires pour vérifier que la pollution de prototype est corrigée.tough-cookie-2.5.0-PATCHED.tgz : La version patchée du paquet tough-cookie.