
CVE-2025-47812 POC
Ceci est une preuve de concept (PoC) de l'exploit du serveur Wing FTP (CVE-2025-47812)
Les versions du serveur Wing FTP antérieures à 7.4.4 présentaient une vulnérabilité d'exécution de code à distance (RCE) résultant d'un traitement non sécurisé du paramètre username. Lorsque la connexion est autorisée sur la page /loginok.html, il est possible d'injecter un octet nul %00
suivi de code Lua afin d'obtenir une RCE.
Lorsque nous envoyons une requête POST à la page loginok.html, la fonction c_CheckUser() (celle qui valide le nom d'utilisateur et le mot de passe) utilise strlen(). Le problème est que la fonction utilisée est vulnérable à la troncature par octet nul.
Cela signifie que si nous envoyons %00 après le nom d'utilisateur, la fonction c_CheckUser() ne validera que la partie de la chaîne située avant l'octet nul : "anonymous%00........." --> "anonymous".
Ensuite, l'application crée une variable SESSION, qui est écrite dans un fichier. Cependant, ce fichier contient non seulement le nom d'utilisateur, mais aussi la chaîne entière, y compris l'octet nul et le code qui le suit. Comme le fichier est un fichier Lua, du code Lua peut être injecté, ce qui entraîne une RCE.
Imaginez que la connexion anonyme soit autorisée. Si nous envoyons une requête POST avec cette structure : username=anonymous%00]]%0dlocal+h+%3d+io.popen("whoami")%0dlocal+r+%3d+h%3aread(\"*a\")%0dh%3aclose()%0dprint(r)%0d--&password=&username_val=anonymous&password_val=, nous aurons injecté la commande whoami après les octets nuls en utilisant du code Lua. Une fois cela fait, nous devons copier l'UID de la réponse et envoyer une requête GET
vers n'importe quelle page authentifiée, par exemple la page dir.html, en utilisant le même UID.
Le script CVE-2025-47812.py effectue ce processus pour nous.