Prototype Pollution
Was ist Prototype Pollution?
Prototype PollutionJavaScript-Schwachstelle, bei der nicht vertrauenswürdiger Input Object.prototype verändert, jedem Objekt Eigenschaften aufzwingt und so Verhalten ändert oder bis zu RCE führt.
Prototype Pollution missbraucht JavaScripts Prototype-Chain: Setzt man bei Merge/Clone/Assign Schlüssel wie proto, constructor.prototype oder prototype, mutiert man Object.prototype, sodass alle einfachen Objekte diese Properties erben. Häufig in rekursiven Merge-Utilities, Deep-Clone-Funktionen, Query-String-Parsern oder Template-Engines mit nutzerkontrolliertem JSON. Folgen reichen von DoS und Auth-Bypass bis hin zu RCE, wenn vergiftete Properties Sicherheitsentscheidungen beeinflussen (isAdmin, Sandbox, Render-Optionen). Bekannte CVEs sind u. a. lodash CVE-2019-10744 sowie viele Node.js-Bibliotheken. Schutz: proto/constructor-Schlüssel ablehnen, Map oder Object.create(null) für untrusted Daten, Prototyp einfrieren, sicherere Bibliotheken wählen.
● Beispiele
- 01
POST {"__proto__":{"isAdmin":true}} an einen JSON-Merge-Endpoint und überall Admin-Rechte erhalten.
- 02
Prototyp vergiften, um Template-Render-Optionen zu ändern und RCE auszulösen.
● Häufige Fragen
Was ist Prototype Pollution?
JavaScript-Schwachstelle, bei der nicht vertrauenswürdiger Input Object.prototype verändert, jedem Objekt Eigenschaften aufzwingt und so Verhalten ändert oder bis zu RCE führt. Es gehört zur Kategorie Schwachstellen der Cybersicherheit.
Was bedeutet Prototype Pollution?
JavaScript-Schwachstelle, bei der nicht vertrauenswürdiger Input Object.prototype verändert, jedem Objekt Eigenschaften aufzwingt und so Verhalten ändert oder bis zu RCE führt.
Wie schützt man sich gegen Prototype Pollution?
Schutzmaßnahmen gegen Prototype Pollution kombinieren typischerweise technische Kontrollen und operative Praktiken, wie in der Definition oben beschrieben.
Welche anderen Bezeichnungen gibt es für Prototype Pollution?
Übliche alternative Bezeichnungen: Object.prototype-Pollution, __proto__-Injection.