Express Prototype Pollution Gadgets
Last updated
Last updated
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aby uzyskać więcej szczegółów zobacz oryginalne badania
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ść opiera się 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.
Możliwe jest, aby express renderował zawartość UTF-7 za pomocą:
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:
Następujący gadżet PP spowoduje, że serwer wyśle nagłówek HTTP: Access-Control-Expose_headers: foo
Wymaga zainstalowania modułu CORS
Za pomocą poniższego ładunku możliwe jest ukrycie metody w odpowiedzi OPTIONS:
Możliwe jest zmienienie zwracanego kodu statusu za pomocą następującego ładunku PP:
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:
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:
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.
?foo.bar=baz
tworzy obiekt w Node.
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)