
Sicherheitspatch für CVE-2023-26136 in tough-cookie 2.5.0 - Behebung einer Prototyp-Verschmutzungs-Sicherheitslücke mit Abwärtskompatibilität
Dieses Projekt behandelt CVE-2023-26136, eine kritische Prototype-Pollution-Schwachstelle in tough-cookie-Versionen vor 4.1.3. Die Schwachstelle betrifft die Webanwendung der Penguin Software Inc., die [email protected] zur Cookie-Verarbeitung verwendet.
CVE-2023-26136 ist eine Prototype-Pollution-Schwachstelle, die auftritt, wenn CookieJar mit rejectPublicSuffixes=false verwendet wird. Das Problem entsteht durch eine fehlerhafte Objektinitialisierung in der Klasse MemoryCookieStore, die es Angreifern ermöglicht, Eigenschaften in Object.prototype durch bösartig gestaltete Cookie-Domains einzuschleusen.
Die Schwachstelle befindet sich in lib/memstore.js, wo Cookies mit einfachen JavaScript-Objekten ({}) gespeichert werden. Da diese Objekte von Object.prototype erben, können Angreifer dies ausnutzen, indem sie Cookies mit Domains wie __proto__, constructor oder prototype setzen, was zu Prototype Pollution führt.
Der Fix ersetzt alle Vorkommen von {} mit Object.create(null) in der Klasse MemoryCookieStore:
// Before (vulnerable)
this.idx = {};
// After (fixed)
this.idx = Object.create(null);
Diese Änderung verhindert Prototype Pollution, indem Objekte ohne Prototyp-Kette erstellt werden, wodurch die Cookie-Speicherung effektiv von unbeabsichtigter Vererbung isoliert wird.
lib/memstore.js: Aktualisierte Objektinitialisierung zur Verwendung von Object.create(null)├── README.md # Diese Datei
├── changes.diff # Git-kompatible Diff-Datei
├── test-cve-2023-26136.js # Unit-Test für den Fix
├── tough-cookie/
│ ├── index.js # Exploit-Demonstration
│ ├── Original v2.5.0/ # Ursprüngliche anfällige Version
│ ├── v2.5.0-PATCHED/ # Gepatchte Version
│ │ └── tough-cookie-2.5.0.tgz # Gepackte Version
│ └── package.json
└── mission.txt # Ursprüngliche Missionsanforderungen
Die gepatchte Version ist als tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz verfügbar.
Zur Installation:
npm install ./tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz
Die originale tough-cookie-Testsuite sollte bestehen. So führen Sie Tests durch:
cd tough-cookie/v2.5.0-PATCHED
npm install
npm test
Hinweis: Das originale tough-cookie 2.5.0 enthält in dieser Distribution kein Testverzeichnis, aber die gepatchte Version bleibt voll kompatibel mit der ursprünglichen API.
Führen Sie den benutzerdefinierten Unit-Test aus, um den Fix zu überprüfen:
node test-cve-2023-26136.js
Erwartete Ausgabe:
Testing CVE-2023-26136 fix...
✅ CVE-2023-26136 fix verified: No prototype pollution detected
✅ Test passed: The vulnerability has been successfully patched
Das Projekt enthält eine Exploit-Demonstration in tough-cookie/index.js:
cd tough-cookie
node index.js
Dies testet sowohl die ursprünglich anfällige Version als auch die gepatchte Version und zeigt:
EXPLOITED SUCCESSFULLY für die OriginalversionEXPLOIT FAILED für die gepatchte VersionDie Datei changes.diff enthält einen git-kompatiblen Diff, der wie folgt angewendet werden kann:
git apply changes.diff
Dieser Diff enthält nur die notwendigen Änderungen zur Behebung der Schwachstelle ohne unbeabsichtigte Modifikationen.
Der Exploit funktioniert wie folgt:
CookieJar mit rejectPublicSuffixes: false__proto__Object.prototype-KetteMögliche Schäden:
✅ Getestet und verifiziert auf Node.js 20 (LTS)
GitHub-Repository: Geforktes tough-cookie-Repository
Git-Tag: v2.5.0-patched-cve-2023-26136-fix
GitHub Actions - Expertenniveau
Jenkins - Fortgeschrittenes Niveau
Travis CI - Mittleres Niveau
CircleCI - Mittleres Niveau
GitLab CI/CD - Fortgeschrittenes Niveau
Dieses Projekt behält die originale tough-cookie-Lizenz (BSD-3-Clause) bei und fügt den Sicherheits-Fix hinzu.
Hinweis: Dies ist ein sicherheitsorientierter Patch, der die vollständige Rückwärtskompatibilität bewahrt und gleichzeitig die Schwachstelle CVE-2023-26136 beseitigt.