Biblioteka SandboxJS w wersjach przed 0.8.29 umożliwia ucieczkę z izolowanego środowiska JavaScript poprzez przesłonięcie (shadowing) metody hasOwnProperty na obiekcie sandbox. Podatność ma ocenę CVSS 10.0 i pozwala atakującemu bez żadnych uprawnień na trwałe zainfekowanie Object.prototype hosta.
▸ Pokaż oryginał (EN)
SandboxJS is a JavaScript sandboxing library. Prior to 0.8.29, a sandbox escape is possible by shadowing hasOwnProperty on a sandbox object, which disables prototype whitelist enforcement in the property-access path. This permits direct access to __proto__ and other blocked prototype properties, enabling host Object.prototype pollution and persistent cross-sandbox impact. This vulnerability is fixed in 0.8.29.
Mechanizm ochronny biblioteki SandboxJS opiera się na białej liście właściwości prototypów, której egzekwowanie odbywa się w ścieżce dostępu do właściwości z wykorzystaniem metody hasOwnProperty. Atakujący może zadeklarować własną właściwość o nazwie hasOwnProperty bezpośrednio na obiekcie sandbox, co sprawia, że oryginalna kontrola białej listy zostaje pominięta. Po wyłączeniu tej ochrony możliwy jest bezpośredni dostęp do zablokowanych normalnie właściwości, takich jak __proto__, co umożliwia przeprowadzenie ataku prototype pollution na Object.prototype hosta. Efekty takiego zatrucia prototypu są trwałe i mogą wpływać na wszystkie inne obiekty działające w tym samym procesie, w tym inne instancje sandbox.
Atakujący może przeprowadzić atak prototype pollution na globalny Object.prototype hosta, co prowadzi do trwałego, przekrojowego wpływu na wszystkie sandbox i obiekty w procesie, potencjalnie umożliwiając zdalne wykonanie kodu (RCE) lub przejęcie kontroli nad aplikacją.
Należy zaktualizować SandboxJS do wersji 0.8.29 lub nowszej, w której podatność została naprawiona. Patch dostępny jest w repozytorium GitHub producenta (commit 67cb186c41c78c51464f70405504e8ef0a6e43c3).
Nyariv SandboxJS w wersjach przed 0.8.29
Podatność została zgłoszona i naprawiona przez autora biblioteki. Advisory dostępne pod GHSA-jjpw-65fv-8g48 w repozytorium GitHub nyariv/SandboxJS.
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ą