
Dieses Repository enthält eine Lösung für die Sicherheitslücke CVE-2023-26136.
Versionen des Pakets tough-cookie vor 4.1.3 sind anfällig für Prototype Pollution aufgrund unsachgemäßer Handhabung von Cookies bei Verwendung von CookieJar im Modus rejectPublicSuffixes=false. Dieses Problem ergibt sich aus der Art und Weise, wie Objekte initialisiert werden.
Dieses Projekt zielt darauf ab, eine gepatchte Version von [email protected] bereitzustellen, die die Schwachstelle CVE-2023-26136 beseitigt und gleichzeitig die Rückwärtskompatibilität gewährleistet.
Um die Schwachstelle zu beheben, haben wir memstore.js modifiziert, um sicherzustellen, dass Cookies in einem Objekt ohne Risiken der Prototype Pollution gespeichert werden, indem die Standard-Objektinitialisierung durch Object.create(null) ersetzt wurde. Dies verhindert die Manipulation des Prototyps durch bösartig gestaltete Cookie-Namen.
Im Verzeichnis tough-cookie/ finden wir zwei zusätzliche Verzeichnisse mit der originalen und der gepatchten Version von tough-cookie:
Original v2.5.0/) – Unveränderte tough-cookie 2.5.0, die anfällig ist.v2.5.0-PATCHED/) – Eine modifizierte Version, die einen Fix für CVE-2023-26136 enthält.Um die ursprünglich anfällige Version zu installieren:
npm install [email protected]
Der angewendete Patch ändert die Art und Weise, wie Cookies gespeichert werden: this.idx = {}; wurde geändert in: this.idx = Object.create(null);
Dies verhindert, dass Angreifer Eigenschaften in die Prototyp-Kette einschleusen und die Schwachstelle ausnutzen.
Die Schwachstelle in tough-cookie (CVE-2023-26136) entsteht durch die Verwendung eines einfachen JavaScript-Objekts {} zum Speichern von Cookies. Da {} von Object.prototype erbt, kann es durch das Einfügen von Eigenschaften wie __proto__ ausgenutzt werden, was zu Prototype Pollution führt. Dies könnte einem Angreifer ermöglichen, das Anwendungsverhalten zu manipulieren oder Sicherheitsprobleme zu verursachen.
Um dies zu entschärfen, ersetzt der Patch {} durch Object.create(null), das ein Objekt ohne Prototyp ([[Prototype]]: null) erstellt. Dadurch wird sichergestellt, dass das Objekt keine Eigenschaften von Object.prototype erbt, und verhindert, dass Angreifer schädliche Eigenschaften einfügen.
Durch die Verwendung von Object.create(null) isolieren wir den Cookie-Speicher effektiv von unbeabsichtigter Prototyp-Vererbung und machen ihn sicherer gegen Prototype-Pollution-Angriffe.
Um die gepatchte Version lokal zu installieren, befolgen Sie diese Schritte:
tar -tzf tough-cookie-2.5.0.tgz
Falls nötig, entpacken Sie es:
tar -xzf tough-cookie-2.5.0.tgz
npm install ./tough-cookie-2.5.0.tgz
node index.js
Erwartete Ausgabe:
EXPLOITED SUCCESSFULLY - für die Originalversion
EXPLOIT FAILED - für die gepatchte Version
Die gepatchte Version wurde auf Node.js 20 (LTS) getestet, um die Kompatibilität mit der aktuellen stabilen Laufzeitumgebung sicherzustellen.
Das ursprüngliche tough-cookie-Repository (Salesforce) befindet sich derzeit in Version 5.1.1. Da wir mit Version 2.5.0 arbeiten, ist ein direkter Fork vom Haupt-Repository nicht möglich. Stattdessen haben wir ein separates Repository erstellt, das sowohl die Original- als auch die gepatchte Version enthält. Sie finden es hier:
GitHub Repository - Geforkte Version
Für weitere Details besuchen Sie die offizielle CVE-Seite: CVE-2023-26136 - NVD