Express Prototype Pollution Gadgets
XSS-Antworten bereitstellen
Für weitere Details sehen Sie sich die ursprüngliche Forschung an
Ändern Sie den JSON-Inhaltstyp in HTML
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.
UTF7 rendern
Es ist möglich, dass Express UTF-7-Inhalt rendert mit:
Sichere Scanning-Techniken
JSON-Räume
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:
Exposed Headers
Das 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
OPTIONS-Methode
Mit dem folgenden Payload ist es möglich, eine Methode aus einer OPTIONS-Antwort zu verbergen:
Status
Es ist möglich, den zurückgegebenen Statuscode mit dem folgenden PP-Payload zu ändern:
Fehler
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:
Reflected Value
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 Prototype Pollution (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:
Misc
Erlaube Punkte
Es gibt eine Option in Express, die es dir ermöglicht, Objekte aus Abfragezeichenfolgenparametern zu erstellen. Du könntest es definitiv in einer Fehler Kette verwenden, um eine Prototype Pollution-Sicherheitsanfälligkeit auszunutzen.
?foo.bar=baz
erstellt ein Objekt in Node.
Referenzen
Last updated