
PoC e correção para CVE-2024-28397: escape de sandbox no js2py permitindo execução remota de código (RCE) por meio de manipulação de referência de objetos Python. Inclui etapas de reprodução e patch dinâmico.
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.