Express Prototype Pollution Gadgets
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 z typem zawartości JSON i odzwierciedlającej JSON:
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.
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ą:
Bezpieczne techniki skanowania
Przestrzenie JSON
Następujące PP spowoduje, że atrybuty wewnątrz JSON będą miały dodatkową przestrzeń, co nie wpłynie na funkcjonalność:
Wtedy odzwierciedlony JSON będzie wyglądać następująco:
Exposed Headers
Następujący gadżet PP spowoduje, że serwer wyśle z powrotem nagłówek HTTP: Access-Control-Expose_headers: foo
Wymaga zainstalowania modułu CORS
Metoda OPTIONS
Za pomocą poniższego ładunku możliwe jest ukrycie metody w odpowiedzi OPTIONS:
Status
Możliwe jest zmienienie zwracanego kodu statusu za pomocą następującego ładunku PP:
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:
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:
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:
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ć wrażliwość na zanieczyszczenie prototypu.
?foo.bar=baz
tworzy obiekt w Node.
References
Last updated