
CVE-2024-28397: escape de sandbox js2py, contornando a restrição pyimport.
js2py é um pacote python popular que permite avaliar código JavaScript dentro do interpretador python. É utilizado por vários scrapers web para analisar código JavaScript em websites.
Existe uma vulnerabilidade na implementação de uma variável global dentro do js2py, permitindo que um atacante obtenha uma referência a um objeto python no ambiente js2py, possibilitando assim que o atacante escape do ambiente JS e execute comandos arbitrários no hospedeiro.
Normalmente, um usuário chamaria js2py.disable_pyimport() para impedir que o código JavaScript escape do ambiente js2py. Mas com esta vulnerabilidade, um atacante pode contornar esta restrição e executar qualquer comando no hospedeiro alvo.
O ator da ameaça pode hospedar um site contendo um arquivo JavaScript malicioso ou enviar um script malicioso via API HTTP para a vítima analisar. Ao fazer isso, o ator pode executar código remoto no hospedeiro executando qualquer comando shell no alvo.
js2py não suporta python3.12.pip install js2py para instalar js2py e execute poc.py, que tentará executar head -n 1 /etc/passwd; calc; gnome-calculator; kcalc; no hospedeiro.Success! the vulnerability exists... ou abrir a calculadora.Atualmente, não há correção oficial disponível; os usuários podem usar fix.py para aplicar patch dinamicamente no js2py ou usar patch.txt para corrigir o código-fonte.
Encontrei esta vulnerabilidade em Fevereiro e submeti um PR ao repositório oficial. Mas depois disso, o PR foi esquecido e após quatro meses, decidi lançar o PoC e a correção agora.