Express Prototype Pollution Gadgets
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Für weitere Details sehen Sie sich die ursprüngliche Forschung an
In einer Express-App, die eine JSON-Inhaltstyp-Antwort verwendet und ein JSON widerspiegelt:
In diesen Fällen ist XSS normalerweise nicht mit einem JSON-Inhaltstyp möglich. Mit Prototype Pollution können wir jedoch Express verwirren, um eine HTML-Antwort bereitzustellen. Diese Schwachstelle beruht darauf, dass die Anwendung res.send(obj)
verwendet und den Body-Parser mit dem Inhaltstyp application/json nutzt.
Durch das Verschmutzen der body
- und _body
-Eigenschaften ist es möglich, Express dazu zu bringen, den HTML-Inhaltstyp bereitzustellen und die _body
-Eigenschaft widerzuspiegeln, was zu gespeichertem XSS führt.
Es ist möglich, dass Express UTF-7-Inhalt mit:
Die folgende PP wird Attribute innerhalb eines JSON einen zusätzlichen Raum geben, der die Funktionalität nicht beeinträchtigt:
Dann sieht ein reflektiertes JSON so aus:
Der folgende PP-Gadget wird den Server dazu bringen, den HTTP-Header zurückzusenden: Access-Control-Expose_headers: foo
Es erfordert, dass das CORS-Modul installiert ist
Mit dem folgenden Payload ist es möglich, eine Methode aus einer OPTIONS-Antwort zu verbergen:
Es ist möglich, den zurückgegebenen Statuscode mit dem folgenden PP-Payload zu ändern:
Wenn Sie einem Prototypen mit einem primitiven Wert wie einem String zuweisen, erzeugt dies eine no-op-Operation, da der Prototyp ein Objekt sein muss. Wenn Sie versuchen, ein Prototypobjekt dem Object.prototype
selbst zuzuweisen, wird dies eine Ausnahme auslösen. Wir können diese beiden Verhaltensweisen nutzen, um festzustellen, ob die Prototypverschmutzung erfolgreich war:
Wenn eine Anwendung ein Objekt in ihrer Antwort enthält, kann das Erstellen eines Attributs mit einem ungewöhnlichen Namen neben __proto__
aufschlussreich sein. Insbesondere wenn nur das ungewöhnliche Attribut in der Antwort zurückgegeben wird, könnte dies auf die Verwundbarkeit der Anwendung hinweisen:
Darüber hinaus bietet in Szenarien, in denen eine Bibliothek wie Lodash verwendet wird, das Setzen einer Eigenschaft sowohl über Prototypenverschmutzung (PP) als auch direkt im Objekt einen weiteren diagnostischen Ansatz. Wenn eine solche Eigenschaft aus der Antwort weggelassen wird, deutet dies darauf hin, dass Lodash die Existenz der Eigenschaft im Zielobjekt überprüft, bevor es zusammenführt:
Es gibt eine Option in Express, die es dir ermöglicht, Objekte aus Abfragezeichenfolgenparametern zu erstellen. Du könntest es definitiv in einer Bug-Kette verwenden, um eine Prototype Pollution-Sicherheitsanfälligkeit auszunutzen.
?foo.bar=baz
erstellt ein Objekt in Node.
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)