Biblioteka SandboxJS przed wersją 0.8.27 nie ogranicza prawidłowo dostępu do metody __lookupGetter__, co umożliwia uzyskanie dostępu do prototypów obiektów JavaScript i ucieczkę z izolowanego środowiska wykonawczego (sandbox escape). Podatność uzyskała maksymalny wynik CVSS 10.0 i może prowadzić do zdalnego wykonania kodu (RCE).
▸ Pokaż oryginał (EN)
SandboxJS is a JavaScript sandboxing library. Prior to 0.8.27, SanboxJS does not properly restrict __lookupGetter__ which can be used to obtain prototypes, which can be used for escaping the sandbox / remote code execution. This vulnerability is fixed in 0.8.27.
SandboxJS nie blokuje wywołania __lookupGetter__, które jest mechanizmem pozwalającym na odczyt metod dostępowych (getter) przypisanych do właściwości obiektu. Atakujący może użyć tej metody do pobrania referencji do prototypów obiektów JavaScript, które normalnie powinny być niedostępne z poziomu sandboxowanego kodu. Uzyskanie dostępu do prototypów umożliwia obejście ograniczeń narzuconych przez sandbox i wykonanie dowolnego kodu poza jego granicami (prototype pollution lub bezpośrednia eskalacja uprawnień środowiska).
Atakujący może uciec z izolowanego środowiska JavaScript i wykonać dowolny kod po stronie serwera lub aplikacji hostującej bibliotekę (RCE). Skutkuje to pełną utratą poufności, integralności oraz dostępności systemu.
Należy zaktualizować bibliotekę SandboxJS do wersji 0.8.27 lub nowszej, w której podatność została usunięta. Aktualizacja dostępna jest w repozytorium GitHub projektu (commit 75c8009db32e6829b0ad92ca13bf458178442bd3).
Biblioteka Nyariv SandboxJS we wszystkich wersjach przed 0.8.27.
Podatność została zgłoszona i naprawiona przez autora biblioteki w wersji 0.8.27. Szczegóły techniczne dotyczące podatnego fragmentu kodu znajdują się w pliku src/executor.ts (linie 368–398). Pełne advisory opublikowano w systemie GitHub Security Advisories (GHSA-9p4w-fq8m-2hp7).
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HNyariv Sandboxjs
APPNyariv< 0.8.27
Powiązane podatności
SandboxJS: ucieczka z piaskownicy przez Function.caller i RCE
SandboxJS: obejście ochrony sandbox przez ścieżkę konstruktora
Ucieczka z sandbox w bibliotece Nyariv SandboxJS (RCE)
SandboxJS: ucieczka z sandboxu i prototype pollution umożliwiająca RCE
SandboxJS — ucieczka z sandbox przez shadowing hasOwnProperty