
Exploit de Ejecución Remota de Código en Wing FTP Server (CVE-2025-47812)
Exploit de Ejecución Remota de Código (RCE) en Wing FTP Server (CVE-2025-47812)
📌 Crédito: Vulnerabilidad descubierta por Julien (@MrTuxracer).
Esta implementación de PoC se basa en su investigación original.
Este repositorio alberga un exploit en Python para la vulnerabilidad de Ejecución Remota de Código (RCE) en Wing FTP Server (CVE-2025-47812). Esta falla crítica permite a los atacantes lograr ejecución remota de código como root/SYSTEM en instancias afectadas de Wing FTP Server, incluso con acceso anónimo habilitado.
Esta vulnerabilidad se origina en el manejo inadecuado de los bytes NULL dentro del parámetro de nombre de usuario durante el proceso de autenticación de Wing FTP Server. Esto permite a los atacantes inyectar código Lua directamente en los archivos de sesión. Estos archivos de sesión maliciosos se ejecutan cuando se carga una sesión válida, lo que lleva a la ejecución arbitraria de comandos en el servidor.
Las características clave de este exploit incluyen:
Esta herramienta está destinada estrictamente a fines educativos y de pruebas de penetración autorizadas. El autor no asume ninguna responsabilidad por el mal uso o daño causado por este software. Asegúrese siempre de tener un permiso explícito y por escrito antes de realizar cualquier prueba en un sistema.
Esta vulnerabilidad fue descubierta y documentada en detalle por Julien (@MrTuxracer). Consulte el artículo original:
What the NULL?! Wing FTP Server RCE (CVE-2025-47812)
La vulnerabilidad CVE-2025-47812 es un problema crítico que surge de múltiples debilidades en la forma en que Wing FTP Server gestiona la autenticación de usuarios y las sesiones:
c_CheckUser(): La función c_CheckUser(), responsable de la autenticación de usuarios, utiliza internamente strlen() en el nombre de usuario proporcionado. Cuando se inyecta un byte NULL (%00) en el nombre de usuario (por ejemplo, anonymous%00...), strlen() trunca la cadena en ese punto. Esto significa que la autenticación tiene éxito para la parte del nombre de usuario anterior al byte NULL, evitando efectivamente la validación adecuada.rawset(_SESSION, "username", username) dentro de loginok.html utiliza el nombre de usuario completo, sin sanitizar, directamente de los parámetros GET o POST. Esto incluye el byte NULL y cualquier carácter posterior.anonymous%00]]%0dlocal+h+%3d+io.popen("id")%0dlocal+r+%3d+h%3aread("*a")%0dh%3aclose()%0dprint(r)%0d--) da como resultado que este código malicioso se escriba directamente en el archivo de sesión.SessionModule.load(), invocada cuando se accede a cualquier funcionalidad autenticada (como /dir.html), ejecuta directamente el archivo de sesión utilizando loadfile(filepath) seguido de f(). Este paso crucial activa el código Lua inyectado, lo que lleva a la Ejecución Remota de Código.Esta vulnerabilidad es particularmente grave porque Wing FTP Server a menudo se ejecuta con privilegios de root en Linux o privilegios de SYSTEM en Windows de forma predeterminada. Esta configuración predeterminada otorga a los atacantes el máximo control sobre el sistema comprometido tras una explotación exitosa.
Versiones afectadas: Las versiones de Wing FTP Server anteriores a 7.4.4 son vulnerables.
Este script admite varios argumentos de línea de comandos para adaptar su funcionalidad.
python3 CVE-2025-47812.py -h
usage: CVE-2025-47812.py.py [-h] [-u URL] [-f FILE] [-c COMMAND] [-v] [-o OUTPUT] [-U USERNAME]
Exploit script for command injection via login.html.
options:
-h, --help muestra este mensaje de ayuda y sale
-u URL, --url URL URL de destino (por ejemplo, [http://192.168.134.130](http://192.168.134.130)). Requerido si no se especifica -f.
-f FILE, --file FILE Archivo que contiene la lista de URLs objetivo (una por línea).
-c COMMAND, --command COMMAND
Comando personalizado a ejecutar. Por defecto: whoami. Si se especifica, la salida detallada se habilita automáticamente.
-v, --verbose Muestra la salida completa del comando (modo detallado). Se ignora si se usa -c ya que el modo detallado se auto-habilita.
-o OUTPUT, --output OUTPUT
Archivo para guardar las URLs vulnerables.
-U USERNAME, --username USERNAME
Nombre de usuario a usar en el payload del exploit. Por defecto: anonymous
python3 CVE-2025-47812.py -u http://192.168.134.130 -c ipconfig
