hackweb
appunti di hacking e tecnologia
IT EN
menù principale
menù utente
non sei loggato

Prototype pollution: avvelenare Object.prototype

15 novembre 2024 · 1 min di lettura · #web #javascript #prototype-pollution

In JavaScript ogni oggetto eredita da Object.prototype. Se un merge ricorsivo o un parser scrive una chiave __proto__ da input dell'utente, inquina il prototipo condiviso da tutti gli oggetti.

Il meccanismo

merge({}, JSON.parse('{"__proto__":{"isAdmin":true}}'))
({}).isAdmin   // true  -> ogni oggetto ora ha isAdmin

Le conseguenze dipendono dal codice: bypass di controlli (if (user.isAdmin)), DoS, e nei casi giusti RCE (una proprietà inquinata che finisce in child_process o in un template).

Difesa

Non fare merge ricorsivi ciechi di input non fidato. Blocca le chiavi __proto__, constructor, prototype. Usa Object.create(null) per mappe di dati, Map invece di oggetti, Object.freeze(Object.prototype). Librerie con guardie note (lodash aggiornato).


« torna alla home

ultimi post
 
il tuo indirizzo IP:
216.73.216.108
visitatore #0
MOTD:
Ogni astrazione perde da qualche parte.
Qui guardiamo dove.
argomenti