Biblioteka SandboxJS do izolacji kodu JavaScript zawiera podatność umożliwiającą ucieczkę z piaskownicy (sandbox escape). Błąd pozwala atakującemu uzyskać dostęp do konstruktora Function i wykonać dowolny kod JavaScript poza izolowanym środowiskiem.
▸ Pokaż oryginał (EN)
SandboxJS is a JavaScript sandboxing library. Prior to 0.8.34, it is possible to obtain arrays containing Function, which allows escaping the sandbox. Given an array containing Function, and Object.fromEntries, it is possible to construct {[p]: Function} where p is any constructible property. This vulnerability is fixed in 0.8.34.
W wersjach wcześniejszych niż 0.8.34 możliwe jest uzyskanie tablicy zawierającej referencję do wbudowanego konstruktora Function, który powinien być zablokowany przez sandbox. Następnie, przy użyciu metody Object.fromEntries, atakujący może skonstruować obiekt w postaci {[p]: Function}, gdzie p jest dowolną konstruowalną właściwością. W ten sposób ograniczenia narzucone przez piaskownicę zostają ominięte, a atakujący uzyskuje dostęp do pełnej funkcjonalności środowiska JavaScript — w tym możliwość wykonania arbitralnego kodu (CWE-94: code injection).
Atakujący może uciec z izolowanego środowiska sandbox i wykonać dowolny kod JavaScript w kontekście aplikacji hosta, co może prowadzić do pełnego przejęcia kontroli nad aplikacją, wycieku danych lub dalszego kompromitowania systemu.
Należy zaktualizować bibliotekę SandboxJS do wersji 0.8.34 lub nowszej, w której podatność została naprawiona. Szczegóły dostępne w referencjach producenta na GitHub Security Advisories.
Nyariv SandboxJS w wersjach wcześniejszych niż 0.8.34
Podatność została naprawiona w wersji 0.8.34 biblioteki SandboxJS. Pomimo oceny CVSS 10.0 (CRITICAL), CISA nie umieściła jej w katalogu Known Exploited Vulnerabilities (KEV), dlatego poziom pilności określono jako WYSOKI.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HNyariv Sandboxjs
APPNyariv< 0.8.34
Powiązane podatności
SandboxJS: ucieczka z piaskownicy przez Function.caller i RCE
SandboxJS: obejście ochrony sandbox przez ścieżkę konstruktora
SandboxJS: ucieczka z sandboxu i prototype pollution umożliwiająca RCE
Ucieczka z sandboxa w SandboxJS — wykonanie kodu poza piaskownicą
Ucieczka z sandboxa w bibliotece SandboxJS poprzez nadpisanie Map.prototype