
Prova de conceito de exploit para CVE-2024-28397, uma fuga de sandbox no js2py que permite execução remota de código via JavaScript malicioso, com uma correção dinâmica de patch.
js2py é um pacote Python popular que permite avaliar código JavaScript dentro do interpretador Python. É usado por vários scrapers web para analisar código JavaScript em sites.
Existe uma vulnerabilidade na implementação de variáveis globais no js2py que pode permitir que um atacante obtenha referências a objetos Python no ambiente js2py, permitindo assim que o atacante saia do ambiente JS e execute comandos arbitrários no host.
Normalmente, o usuário chama js2py.disable_pyimport() para impedir que o código JavaScript saia do ambiente js2py. Mas com esta vulnerabilidade, um atacante pode contornar essa restrição e executar qualquer comando no host.
Atores de ameaças podem hospedar sites que contenham arquivos JS maliciosos ou enviar scripts maliciosos via API HTTP para que as vítimas os decifrem. Ao fazer isso, o ator pode realizar execução remota de código no host executando qualquer comando shell no alvo.
js2py não suporta Python 3.12.pip install js2py para instalar o js2py e execute poc.py, que tentará executar head -n 1 /etc/passwd; calc; gnome-calculator; kcalc; no host.Success! the vulnerability exists... ou abrir a calculadora.Atualmente, não há correção oficial disponível. O usuário pode usar fix.py para aplicar patch dinamicamente no js2py ou usar patch.txt para corrigir o código-fonte.
Descobri esta vulnerabilidade em fevereiro e enviei um PR para o repositório oficial. Mas depois disso, o PR foi esquecido e quatro meses se passaram. Decidi divulgar o PoC e a correção agora.