
Corregge il pacchetto open source che utilizza tough-cookie 2.5.0 - CVE-2023-26136,
Le versioni del pacchetto tough-cookie precedenti alla 4.1.3 sono vulnerabili a Prototype Pollution a causa della gestione impropria dei Cookie quando si utilizza CookieJar in modalità rejectPublicSuffixes=false. Il problema deriva dal modo in cui gli oggetti vengono inizializzati.
https://nvd.nist.gov/vuln/detail/CVE-2023-26136
Prototype Pollution è una vulnerabilità che colpisce JavaScript. Prototype Pollution si riferisce alla capacità di iniettare proprietà nei prototipi dei costrutti linguistici esistenti di JavaScript, come gli oggetti. JavaScript consente di alterare tutti gli attributi degli Object, inclusi i loro attributi magici come proto, constructor e prototype. Un attaccante manipola questi attributi per sovrascrivere, o inquinare, il prototipo dell'oggetto base di un'applicazione JavaScript iniettando altri valori. Le proprietà su Object.prototype vengono poi ereditate da tutti gli oggetti JavaScript attraverso la catena dei prototipi. Quando ciò accade, porta a un denial of service attivando eccezioni JavaScript, oppure manomette il codice sorgente dell'applicazione per forzare il percorso di codice iniettato dall'attaccante, portando così all'esecuzione di codice remoto.
Ci sono due modi principali in cui avviene l'inquinamento dei prototipi:
nota importante: https://github.com/salesforce/tough-cookie/issues/282 https://security.snyk.io/package/npm/tough-cookie/2.5.0
=> Per correggere la vulnerabilità nella classe MemoryCookieStore, è necessario modificare il metodo putCookie per prevenire la Prototype Pollution quando cookie.domain è impostato a proto.
https://github.com/salesforce/tough-cookie/pull/283
a. Modifica tough_cookie_2.5.0\node_modules\tough-cookie\lib\memstore.js
Tutte le occorrenze di creazione di nuovi oggetti in memstore.js sono state modificate da {} Object.create(Object.prototype) a Object.create(null)
così da utilizzare istanze di oggetti che non hanno una proprietà prototype che possa essere inquinata.
b. Creato un nuovo file, /node_modules/tough-cookie/lib/test-unit.js usato in vanillajs, come riportato nel file cookie_jar_test.js nella cartella tests "Issue #282 - Prototype pollution"
Comando: node test-unit.js
c. Creato un nuovo file, /node_modules/tough-cookie/lib/testVerifyVulnerable.js verifica che il comportamento vulnerabile sia stato corretto.
Comando: node testVerifyVulnerable.js
change.diff : https://github.com/ronmadar/Open-Source-Seal-Security/blob/cf768f1932f087c30ebec7fe60c3fca323b4e54b/change.diff
a. Pacchetto standard tough-cookie V 2.5.0
Comando: npm install [email protected] && node index.js
b. Pacchetto compresso tough-cookie V 2.5.0 in formato tgz con le modifiche
Comando: npm install ./tough-cookie-2.5.0-PATCHED.tgz && node index.js
c.
Prototype Pollution: Aggiungendo proprietà direttamente a Object. prototype, c'è il rischio di inquinare l'intera catena dei prototipi. Questo può portare a comportamenti imprevisti nell'applicazione, poiché qualsiasi oggetto che attraversa la catena dei prototipi può essere influenzato.
Rischi per la Sicurezza: In un contesto di applicazione web, la Prototype Pollution può essere sfruttata dagli attaccanti per manipolare oggetti e proprietà, portando potenzialmente a vulnerabilità di sicurezza come l'escalation dei privilegi, la fuga di informazioni.
Problemi di Compatibilità: Modificare prototipi core come Object. prototype può introdurre problemi di compatibilità con altre librerie o framework che si basano sul comportamento standard. Ciò può causare errori o comportamenti imprevisti durante l'integrazione o l'aggiornamento delle dipendenze. d. scritto sopra.
Come installare questo progetto