
Questo repository contiene una soluzione per la vulnerabilità CVE-2023-26136.
Le versioni del pacchetto tough-cookie precedenti alla 4.1.3 sono vulnerabili a Prototype Pollution a causa di una gestione impropria dei cookie quando si utilizza CookieJar in modalità rejectPublicSuffixes=false. Questo problema deriva dal modo in cui gli oggetti vengono inizializzati.
Questo progetto mira a fornire una versione corretta di [email protected] che elimina la vulnerabilità CVE-2023-26136 garantendo al contempo la compatibilità con le versioni precedenti.
Per correggere la vulnerabilità, abbiamo modificato memstore.js per garantire che i cookie siano memorizzati in un oggetto senza rischi di prototype pollution, sostituendo l'inizializzazione standard degli oggetti con Object.create(null). Questo impedisce la manipolazione del prototipo tramite nomi di cookie creati malevolmente.
Nella directory tough-cookie/ possiamo trovare due directory aggiuntive contenenti le versioni originale e corretta di tough-cookie:
Original v2.5.0/) – tough-cookie 2.5.0 non modificato, che è vulnerabile.v2.5.0-PATCHED/) – Una versione modificata che include una correzione per CVE-2023-26136.Per installare la versione originale vulnerabile:
npm install [email protected]
La patch applicata modifica il modo in cui vengono memorizzati i cookie: this.idx = {};
è stato cambiato in: this.idx = Object.create(null);
Questo impedisce agli aggressori di iniettare proprietà nella catena del prototipo e sfruttare la vulnerabilità.
La vulnerabilità in tough-cookie (CVE-2023-26136) sorge a causa dell'uso di un semplice oggetto JavaScript {} per memorizzare i cookie. Poiché {} eredita da Object.prototype, può essere sfruttato iniettando proprietà come proto, portando a prototype pollution. Ciò potrebbe consentire a un aggressore di manipolare il comportamento dell'applicazione o causare problemi di sicurezza.
Per mitigare ciò, la patch sostituisce {} con Object.create(null), che crea un oggetto senza prototipo ([[Prototype]]: null). Ciò garantisce che l'oggetto non erediti alcuna proprietà da Object.prototype, impedendo agli aggressori di iniettare proprietà malevole.
Utilizzando Object.create(null), isoliamo efficacemente il deposito dei cookie dall'ereditarietà del prototipo non desiderata, rendendolo più sicuro contro gli attacchi di prototype pollution.
Per installare la versione corretta localmente, segui questi passaggi:
tar -tzf tough-cookie-2.5.0.tgz
Se necessario, estrailo:
tar -xzf tough-cookie-2.5.0.tgz
npm install ./tough-cookie-2.5.0.tgz
node index.js
Output previsto:
EXPLOITED SUCCESSFULLY - per la versione originale
EXPLOIT FAILED - per la versione corretta
La versione corretta è stata testata su Node.js 20 (LTS) per garantire la compatibilità con l'ultimo ambiente runtime stabile.
Il repository originale tough-cookie (Salesforce) è attualmente alla versione 5.1.1. Poiché stiamo lavorando con la versione 2.5.0, un fork diretto dal repository principale non è possibile. Invece, abbiamo creato un repository separato contenente sia la versione originale che quella corretta. Puoi trovarlo qui:
Repository GitHub - Versione Forkata
Per maggiori dettagli, visita la pagina CVE ufficiale: CVE-2023-26136 - NVD