Was macht Prototype-Pollution?
Test auf Prototype Pollution in JavaScript-Stacks. Verwenden Sie dies, wenn Benutzereingaben in Objekte eingefügt werden (Query-Parser, JSON-Bodies, Deep Assign), bei der Konfiguration von Bibliotheken über nicht vertrauenswürdige Schlüssel oder bei der Jagd nach RCE-Gadgets durch verschmutztes Object.prototype in Node oder im Browser.
Beschreibung
Prototype Pollution ist eine Sicherheitslücke, die auftritt, wenn ein Angreifer die Eigenschaften des Object.prototype in JavaScript manipulieren kann. Dies kann zu unerwartetem Verhalten, Denial-of-Service-Angriffen oder sogar zur Ausführung von beliebigem Code führen. Dieses Tool hilft dabei, solche Schwachstellen in Ihrer Anwendung zu identifizieren.
Unterstützte Plattformen
- Node.js
- Browser (JavaScript)
Anwendungsfälle
1. Query-Parser
Wenn Benutzereingaben in Query-Strings verarbeitet werden, wie z. B. bei Express qs Parser:
GET /?__proto__[isAdmin]=true
2. JSON-Bodies
Beim Parsen von JSON-Bodies in APIs:
{
"__proto__": {
"isAdmin": true
}
}
3. Deep Assign
Wenn Bibliotheken wie lodash.merge oder jQuery.extend verwendet werden:
_.merge({}, JSON.parse(userInput))
4. Bibliothekskonfiguration
Wenn Konfigurationsobjekte mit nicht vertrauenswürdigen Schlüsseln erstellt werden:
const config = {};
for (const [key, value] of Object.entries(req.query)) {
config[key] = value; // Gefährlich, wenn key '__proto__' ist
}
Erkennungstechniken
- Statische Analyse des Quellcodes auf gefährliche Muster
- Dynamische Tests mit speziell konstruierten Payloads
- Überwachung der Prototyp-Änderungen während der Ausführung
Beispiel für einen Angriff
Ein Angreifer könnte das Object.prototype verschmutzen, um die Eigenschaft isAdmin auf true zu setzen:
// Schädlicher Input
{
"__proto__": {
"isAdmin": true
}
}
// Nach dem Merge hat jedes Objekt nun isAdmin: true
const user = {};
console.log(user.isAdmin); // true
console.log({}.isAdmin); // true
Präventionsmaßnahmen
- Verwenden Sie sichere Methoden zum Zusammenführen von Objekten
- Validieren Sie Benutzereingaben vor der Verarbeitung
- Nutzen Sie
Object.create(null)für Konfigurationsobjekte - Implementieren Sie Schema-Validierung für JSON-Inputs
Integration
Dieses Tool kann in CI/CD-Pipelines integriert werden, um automatisch auf Prototype Pollution zu testen. Es unterstützt sowohl Kommandozeilen- als auch API-gestützte Ausführung.
Lizenz
Dieses Projekt ist unter der MIT-Lizenz lizenziert.