
Correctif de sécurité pour CVE-2023-26136 dans tough-cookie 2.5.0 - Correction de vulnérabilité de pollution du prototype avec rétrocompatibilité
Ce projet corrige CVE-2023-26136, une vulnérabilité critique de pollution de prototype dans les versions de tough-cookie antérieures à 4.1.3. La vulnérabilité affecte l'application web de Penguin Software Inc., qui utilise [email protected] pour le traitement des cookies.
CVE-2023-26136 est une vulnérabilité de pollution de prototype qui se produit lorsque CookieJar est utilisé avec rejectPublicSuffixes=false. Le problème provient d'une initialisation incorrecte des objets dans la classe MemoryCookieStore, permettant à des attaquants d'injecter des propriétés dans Object.prototype via des domaines de cookies malveillants.
La vulnérabilité existe dans lib/memstore.js où les cookies sont stockés à l'aide d'objets JavaScript simples ({}). Comme ces objets héritent de Object.prototype, les attaquants peuvent exploiter cela en définissant des cookies avec des domaines comme __proto__, constructor ou prototype, entraînant une pollution de prototype.
Le correctif remplace toutes les occurrences de {} par Object.create(null) dans la classe MemoryCookieStore :
// Before (vulnerable)
this.idx = {};
// After (fixed)
this.idx = Object.create(null);
Ce changement empêche la pollution de prototype en créant des objets sans chaîne de prototype, isolant efficacement le stockage des cookies des héritages non intentionnels.
lib/memstore.js : Mise à jour de l'initialisation des objets pour utiliser Object.create(null)├── README.md # This file
├── changes.diff # Git-compatible diff file
├── test-cve-2023-26136.js # Unit test for the fix
├── tough-cookie/
│ ├── index.js # Exploit demonstration
│ ├── Original v2.5.0/ # Original vulnerable version
│ ├── v2.5.0-PATCHED/ # Patched version
│ │ └── tough-cookie-2.5.0.tgz # Packed version
│ └── package.json
└── mission.txt # Original mission requirements
La version corrigée est disponible sous forme de tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz.
Pour installer :
npm install ./tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz
La suite de tests originale de tough-cookie devrait réussir. Pour exécuter les tests :
cd tough-cookie/v2.5.0-PATCHED
npm install
npm test
Note : La version originale tough-cookie 2.5.0 n'inclut pas de répertoire de test dans cette distribution, mais la version corrigée maintient une compatibilité totale avec l'API d'origine.
Exécutez le test unitaire personnalisé pour vérifier le correctif :
node test-cve-2023-26136.js
Sortie attendue :
Testing CVE-2023-26136 fix...
✅ Correction de CVE-2023-26136 vérifiée : Aucune pollution de prototype détectée
✅ Test réussi : La vulnérabilité a été corrigée avec succès
Le projet inclut une démonstration de l'exploit dans tough-cookie/index.js :
cd tough-cookie
node index.js
Cela testera à la fois la version vulnérable originale et la version corrigée, montrant :
EXPLOITED SUCCESSFULLY pour la version originaleEXPLOIT FAILED pour la version corrigéeLe fichier changes.diff contient un diff compatible git qui peut être appliqué en utilisant :
git apply changes.diff
Ce diff n'inclut que les changements nécessaires pour corriger la vulnérabilité sans modifications non intentionnelles.
L'exploit fonctionne en :
CookieJar avec rejectPublicSuffixes: false__proto__Object.prototypeDommages potentiels :
✅ Testé et vérifié sur Node.js 20 (LTS)
Dépôt GitHub : Dépôt tough-cookie forké
Git Tag : v2.5.0-patched-cve-2023-26136-fix
GitHub Actions - Niveau expert
Jenkins - Niveau avancé
Travis CI - Niveau intermédiaire
CircleCI - Niveau intermédiaire
GitLab CI/CD - Niveau avancé
Ce projet conserve la licence originale de tough-cookie (BSD-3-Clause) tout en ajoutant le correctif de sécurité.
Note : Il s'agit d'un correctif axé sur la sécurité qui maintient une compatibilité ascendante complète tout en éliminant la vulnérabilité CVE-2023-26136.