Biblioteka SandboxJS przed wersją 0.8.29 zawiera krytyczną podatność umożliwiającą ucieczkę z sandbox (sandbox escape) przez manipulację kluczami obiektów JavaScript. Luka pozwala atakującemu na wykonanie niezaufanego kodu poza izolowanym środowiskiem, co stanowi bezpośrednie zagrożenie dla systemu hosta.
▸ Pokaż oryginał (EN)
SandboxJS is a JavaScript sandboxing library. Prior to 0.8.29, there is a sandbox escape vulnerability due to a mismatch between the key on which the validation is performed and the key used for accessing properties. Even though the key used in property accesses is annotated as string, this is never enforced. So, attackers can pass malicious objects that coerce to different string values when used, e.g., one for the time the key is sanitized using hasOwnProperty(key) and a different one for when the key is used for the actual property access. This vulnerability is fixed in 0.8.29.
Podatność wynika z rozbieżności (time-of-check to time-of-use, CWE-367) pomiędzy kluczem używanym podczas walidacji a kluczem faktycznie użytym przy dostępie do właściwości obiektu. Mimo że klucz jest oznaczony jako typ string, jego wartość nie jest nigdy faktycznie wymuszana jako taki. Atakujący może przekazać złośliwy obiekt, który podczas wywołania hasOwnProperty(key) w fazie sanityzacji zwraca jedną wartość, natomiast podczas rzeczywistego dostępu do właściwości zwraca inną — co pozwala ominąć mechanizm kontroli bezpieczeństwa. W efekcie możliwe jest odwołanie się do właściwości, które nie przeszły weryfikacji.
Atakujący może uciec z izolowanego środowiska sandbox i uzyskać dostęp do zasobów hosta, co może prowadzić do pełnego naruszenia poufności, integralności oraz dostępności systemu.
Należy zaktualizować bibliotekę SandboxJS do wersji 0.8.29 lub nowszej, w której podatność została usunięta. Poprawka dostępna jest w repozytorium producenta (commit 67cb186c41c78c51464f70405504e8ef0a6e43c3).
Nyariv SandboxJS we wszystkich wersjach przed 0.8.29
Podatność jest sklasyfikowana jako CVSS 10.0 (maksymalny wynik) z wektorem sieciowym, bez wymaganych uprawnień ani interakcji użytkownika, z wpływem na zakres poza komponentem dotkniętym luką (S:C).
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HNyariv Sandboxjs
APPNyariv< 0.8.29
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
Ucieczka z sandboxa w SandboxJS — wykonanie kodu poza piaskownicą