
Ce dépôt contient une solution pour la vulnérabilité CVE-2023-26136.
Les versions du paquet tough-cookie antérieures à 4.1.3 sont vulnérables à la pollution des prototypes en raison d'une gestion incorrecte des cookies lors de l'utilisation de CookieJar en mode rejectPublicSuffixes=false. Ce problème provient de la manière dont les objets sont initialisés.
Ce projet vise à fournir une version corrigée de [email protected] qui élimine la vulnérabilité CVE-2023-26136 tout en assurant la rétrocompatibilité.
Pour corriger la vulnérabilité, nous avons modifié memstore.js afin de garantir que les cookies soient stockés dans un objet sans risque de pollution des prototypes, en remplaçant l'initialisation standard des objets par Object.create(null). Cela empêche la manipulation du prototype via des noms de cookies malveillants.
Dans le répertoire tough-cookie/, nous pouvons trouver deux répertoires supplémentaires contenant les versions originale et corrigée de tough-cookie :
Original v2.5.0/) – Version tough-cookie 2.5.0 non modifiée, qui est vulnérable.v2.5.0-PATCHED/) – Une version modifiée qui inclut un correctif pour CVE-2023-26136.Pour installer la version originale vulnérable :
npm install [email protected]
Le correctif appliqué modifie la façon dont les cookies sont stockés : this.idx = {};
a été remplacé par : this.idx = Object.create(null);
Cela empêche les attaquants d'injecter des propriétés dans la chaîne de prototypes et d'exploiter la vulnérabilité.
La vulnérabilité dans tough-cookie (CVE-2023-26136) provient de l'utilisation d'un objet JavaScript simple {} pour stocker les cookies. Comme {} hérite de Object.prototype, il peut être exploité en injectant des propriétés telles que __proto__, ce qui conduit à une pollution des prototypes. Cela pourrait permettre à un attaquant de manipuler le comportement de l'application ou de provoquer des problèmes de sécurité.
Pour atténuer ce problème, le correctif remplace {} par Object.create(null), ce qui crée un objet sans prototype ([[Prototype]] : null). Cela garantit que l'objet n'hérite d'aucune propriété de Object.prototype, empêchant ainsi les attaquants d'injecter des propriétés malveillantes.
En utilisant Object.create(null), nous isolons efficacement le stockage des cookies de l'héritage de prototype involontaire, ce qui le rend plus sûr contre les attaques de pollution des prototypes.
Pour installer la version corrigée localement, suivez ces étapes :
tar -tzf tough-cookie-2.5.0.tgz
Si nécessaire, extrayez-le :
tar -xzf tough-cookie-2.5.0.tgz
npm install ./tough-cookie-2.5.0.tgz
node index.js
Sortie attendue :
EXPLOITED SUCCESSFULLY - pour la version originale
EXPLOIT FAILED - pour la version corrigée
La version corrigée a été testée sur Node.js 20 (LTS) pour garantir la compatibilité avec l'environnement d'exécution stable le plus récent.
Le dépôt original tough-cookie (Salesforce) est actuellement à la version 5.1.1. Comme nous travaillons avec la version 2.5.0, un fork direct depuis le dépôt principal n'est pas possible. Nous avons donc créé un dépôt séparé contenant les versions originale et corrigée. Vous pouvez le trouver ici :
Dépôt GitHub - Version forkée
Pour plus de détails, consultez la page CVE officielle : CVE-2023-26136 - NVD