
Patch di sicurezza per CVE-2023-26136 in tough-cookie 2.5.0 - Correzione della vulnerabilità di prototype pollution con retrocompatibilità
Questo progetto affronta CVE-2023-26136, una vulnerabilità critica di prototype pollution in tough-cookie precedente alla versione 4.1.3. La vulnerabilità colpisce l'applicazione web di Penguin Software Inc., che utilizza [email protected] per l'elaborazione dei cookie.
CVE-2023-26136 è una vulnerabilità di prototype pollution che si verifica quando CookieJar viene utilizzato con rejectPublicSuffixes=false. Il problema deriva da un'inizializzazione impropria degli oggetti nella classe MemoryCookieStore, che consente agli aggressori di iniettare proprietà nel Object.prototype tramite domini di cookie appositamente predisposti.
La vulnerabilità è presente in lib/memstore.js, dove i cookie vengono memorizzati utilizzando oggetti JavaScript semplici ({}). Poiché questi oggetti ereditano da Object.prototype, gli aggressori possono sfruttare questo comportamento impostando cookie con domini come __proto__, constructor o prototype, provocando una prototype pollution.
La correzione sostituisce tutte le istanze di {} con Object.create(null) nella classe MemoryCookieStore:
// Before (vulnerable)
this.idx = {};
// After (fixed)
this.idx = Object.create(null);
Questa modifica previene la prototype pollution creando oggetti senza catena di prototipi, isolando di fatto la memorizzazione dei cookie da un'ereditarietà indesiderata.
lib/memstore.js: inizializzazione degli oggetti aggiornata per utilizzare 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 versione corretta è disponibile come tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz.
Per installare:
npm install ./tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz
La suite di test originale di tough-cookie dovrebbe superare tutti i test. Per eseguire i test:
cd tough-cookie/v2.5.0-PATCHED
npm install
npm test
Nota: La versione originale di tough-cookie 2.5.0 non include una directory di test in questa distribuzione, ma la versione corretta mantiene la piena compatibilità con l'API originale.
Esegui il test unitario personalizzato per verificare la correzione:
node test-cve-2023-26136.js
Output previsto:
Testing CVE-2023-26136 fix...
✅ CVE-2023-26136 fix verified: No prototype pollution detected
✅ Test passed: The vulnerability has been successfully patched
Il progetto include una dimostrazione dell'exploit in tough-cookie/index.js:
cd tough-cookie
node index.js
Questo testerà sia la versione originale vulnerabile sia la versione corretta, mostrando:
EXPLOITED SUCCESSFULLY per la versione originaleEXPLOIT FAILED per la versione correttaIl file changes.diff contiene un diff compatibile con git che può essere applicato utilizzando:
git apply changes.diff
Questo diff include solo le modifiche necessarie per correggere la vulnerabilità, senza alcuna alterazione indesiderata.
L'exploit funziona:
CookieJar con rejectPublicSuffixes: false__proto__Object.prototypeDanni Potenziali:
✅ Testato e verificato su Node.js 20 (LTS)
Repository GitHub: Repository tough-cookie biforcato
Tag Git: v2.5.0-patched-cve-2023-26136-fix
GitHub Actions - Livello esperto
Jenkins - Livello avanzato
Travis CI - Livello intermedio
CircleCI - Livello intermedio
GitLab CI/CD - Livello avanzato
Questo progetto mantiene la licenza originale di tough-cookie (BSD-3-Clause) aggiungendo al contempo la correzione di sicurezza.
Nota: Questa è una patch incentrata sulla sicurezza che mantiene la piena retrocompatibilità eliminando la vulnerabilità CVE-2023-26136.