Express Prototype Pollution Gadgets
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:
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.
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:
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:
Dann wird ein reflektiertes JSON wie folgt aussehen:
Offenlegung von Headern
Das folgende PP-Gadget lässt den Server den HTTP-Header zurücksenden: 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 vor einer OPTIONS-Antwort zu verbergen:
Status
Es ist möglich, den zurückgegebenen Statuscode mithilfe des folgenden PP-Payloads zu ändern:
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:
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:
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:
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.
?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:
Last updated