Biblioteka SandboxJS w wersjach przed 0.9.6 pozwala na ucieczkę z piaskownicy JavaScript poprzez nadużycie właściwości Function.caller. Atakujący może wykonać dowolny kod JavaScript po stronie hosta, co stanowi krytyczne zagrożenie dla aplikacji izolujących kod użytkownika.
▸ Pokaż oryginał (EN)
SandboxJS is a JavaScript sandboxing library. Prior to 0.9.6, sandbox-defined functions expose Function.caller, allowing sandboxed code to recover the internal LispType.Call runtime callback. That callback can then be invoked with attacker-controlled fake context and obj values to extract blocked host statics, recover the real host Function constructor, and execute arbitrary host JavaScript. This vulnerability is fixed in 0.9.6.
Funkcje zdefiniowane wewnątrz piaskownicy ujawniają właściwość Function.caller, umożliwiając sandboxowanemu kodowi uzyskanie dostępu do wewnętrznego callbacku środowiska uruchomieniowego LispType.Call. Atakujący może następnie wywołać ten callback z kontrolowanymi przez siebie fałszywymi wartościami kontekstu (context) i obiektu (obj), co pozwala na wydobycie zablokowanych statycznych elementów hosta. W dalszej kolejności możliwe jest odzyskanie prawdziwego konstruktora Function hosta i wykonanie dowolnego kodu JavaScript poza piaskownicą (code injection, CWE-94).
Atakujący może w pełni obejść mechanizm izolacji piaskownicy i wykonać dowolny kod JavaScript w kontekście procesu hosta, uzyskując dostęp do zasobów, danych i funkcji, które powinny pozostać dla niego niedostępne.
Należy zaktualizować bibliotekę SandboxJS do wersji 0.9.6, w której podatność została naprawiona. Commit naprawczy dostępny jest pod adresem: https://github.com/nyariv/SandboxJS/commit/826865251232611ec94078bab5a18ec875dad4a5
Nyariv SandboxJS w wersjach przed 0.9.6
Podatność zgłoszona i opisana w ramach GitHub Security Advisory GHSA-g8f2-4f4f-5jqw. CVSS 10.0 wynika z braku wymagań co do uwierzytelnienia, interakcji użytkownika oraz pełnego zakresu wpływu na poufność, integralność i dostępność z możliwością wyjścia poza zakres komponentu (Scope: Changed).
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HNyariv Sandboxjs
APPNyariv< 0.9.6
Powiązane podatności
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
Ucieczka z sandboxa w SandboxJS — wykonanie kodu poza piaskownicą
Ucieczka z sandboxa w bibliotece SandboxJS poprzez nadpisanie Map.prototype