IT-Sicherheit Glossar

Was ist Prototype Pollution?

Prototype Pollution ist eine JavaScript-Schwachstelle, bei der ein Angreifer Eigenschaften an einem gemeinsam geerbten Prototyp verändert. Andere Objekte besitzen diese Werte anschließend scheinbar ebenfalls. Abhängig von der späteren Nutzung entstehen Autorisierungsfehler, manipulierte Konfigurationen, Cross-Site Scripting oder serverseitig sogar Codeausführung.

Warum sind __proto__ und constructor gefährlich?

JavaScript löst fehlende Eigenschaften entlang der Prototypenkette auf. Unsichere rekursive Merge- oder Pfadfunktionen behandeln Schlüssel aus JSON wie normale Eigenschaften. Besondere Schlüssel wie __proto__ oder die Kette constructor.prototype können dadurch statt eines lokalen Werts den Prototyp verändern.

Vereinfachtes Codebeispiel

Verwundbar:

function setPath(target, path, value) {
  const parts = path.split('.');
  let current = target;

  for (const part of parts.slice(0, -1)) {
    current = current[part] ??= {};
  }

  current[parts.at(-1)] = value;
}

setPath({}, 'constructor.prototype.isAdmin', true);
console.log(({}).isAdmin); // true

Sicherer: Schlüssel ablehnen und nur erwartete Felder übernehmen.

const BLOCKED_KEYS = new Set(['__proto__', 'prototype', 'constructor']);

function safeSet(target, path, value) {
  const parts = path.split('.');
  if (parts.some((part) => BLOCKED_KEYS.has(part))) {
    throw new Error('Unsafe property path');
  }
  // Zusätzlich: Pfad gegen eine fachliche Allowlist prüfen.
}

Eine Blockliste ist nur eine zusätzliche Grenze. Robuster ist eine kleine Positivliste erwarteter Felder, ein Schema-Validator mit additionalProperties: false und der Verzicht auf generische Deep-Merge- Funktionen für nicht vertrauenswürdige Daten.

Client- und serverseitige Auswirkungen

KontextMögliche Folge
BrowserManipulierte DOM- oder Sanitizer-Konfiguration, XSS, veränderte Request-Optionen.
Node.jsUmgehung von Prüfungen, veränderte Template-/Prozessoptionen, in bestimmten Gadgets Command Injection.
BibliothekViele Anwendungen werden indirekt über verwundbare Merge-, Querystring- oder Utility-Pakete betroffen.

Prävention und Erkennung

  • - Abhängigkeiten aktualisieren und Advisories für transitive Pakete beachten.
  • - Eingaben mit einem Schema validieren und unbekannte Eigenschaften ablehnen.
  • - Object.hasOwn() statt impliziter geerbter Werte für Sicherheitsentscheidungen nutzen.
  • - Für reine Schlüssel-Wert-Container gegebenenfalls Object.create(null) oder Map verwenden.
  • - Nach verdächtigen Schlüsseln in Requests und nach unerwarteten Prototypwerten in Tests suchen.

Nützliche Open-Source-Werkzeuge

ppfuzz prüft Webanwendungen auf serverseitige Prototype-Pollution-Pfade. PPMap unterstützt bei der Suche nach client- und serverseitigen Varianten. Für Abhängigkeiten eignen sich OSV-Scanner oder Trivy. Scanner finden nicht jedes anwendungsspezifische Gadget; Ergebnisse müssen im Code und in einer isolierten Testumgebung bestätigt werden.

Penetrationstests

Sicherheitslücken aufdecken

Professionelle Penetrationstests für Ihr Unternehmen

Web Apps
Netzwerke
Mobile Apps
10% Neukunden-Rabatt
Jetzt planen

Mehr Informationsmaterial

Vielen Dank für dein Feedback! Wir werden es prüfen und unseren Artikel anpassen.

Hast du Feedback zum Thema Prototype Pollution? Schreib uns!