
ابحث عن خوادم Plex Media Server المتأثرة بـ Plex2Shell (CVE-2026-96652 وثلاث ثغرات أخرى)
يكتشف خوادم Plex Media Server المتأثرة بـ Plex2Shell، وهي سلسلة من أربع ثغرات (CVE-2026-96652، CVE-2026-96654، CVE-2026-96655، CVE-2026-96656) تتيح للمهاجمين الاستيلاء على خادم Plex Media Server أقدم من 1.43.3.10861 دون تسجيل الدخول. جزء من shouldipanic.ch.
جرى استغلال Plex2Shell منذ 17 أكتوبر 2026 (برامج تعدين العملات المشفرة، ووكلاء الوسيط) وهو مدرج في قائمة الثغرات المعروفة المستغلة لدى CISA. كل خادم Plex Media Server أقدم من 1.43.3.10861 ويمكن الوصول إليه من الإنترنت معرّض للخطر.
يتوفر plex2scan بصيغتين:
plex2scan.py: ملف Python واحد بلا أي تبعيات لفحص
خوادمك الخاصة: نطاقات IP، وفحص المنافذ بما في ذلك منفذ Plex رقم 32400، واكتشاف
vhost، وفحص إصدار Plex.
كل خادم Plex Media Server يستجيب لـ GET /identity دون تسجيل دخول ويعلن
إصداره هناك. يحمّل plex2scan صفحة البداية (للتعرف على Plex عبر ترويسة
X-Plex-Protocol أو صفحة Plex Web) ويطلب /identity مرة واحدة.
لا يُرسَل أي شيء آخر: لا تسجيل دخول، ولا استغلال.
curl -LO https://github.com/akaihigurashi/plex2scan/releases/latest/download/plex2scan.py
python3 plex2scan.py 203.0.113.0/24
Python 3.8 أو أحدث، لا شيء لتثبيته. أمثلة:
python3 plex2scan.py 203.0.113.10 # 21 ports incl. 32400 + every vhost on the IP
python3 plex2scan.py 203.0.113.10:32400 # only Plex's own port
python3 plex2scan.py plex.example.ch # a Plex behind a reverse proxy
python3 plex2scan.py 203.0.113.0/24 --names domains.txt # + hostnames from your own data
python3 plex2scan.py 203.0.113.10 -p all -o out.csv # all 65535 ports, CSV output
python3 plex2scan.py -h # all options
| الحالة | المعنى |
|---|---|
VULNERABLE | Plex Media Server أقدم من 1.43.3.10861 |
POSSIBLY VULNERABLE | تم العثور على Plex Media Server، الإصدار مخفي |
PATCHED | Plex Media Server 1.43.3.10861 أو أحدث |
NOT DETECTED | لا يوجد Plex Media Server ظاهر |
تُدرج النتائج من الأسوأ أولاً، مع سبب موجز. تظهر النتائج المخفية (المنافذ المغلقة،
الأخطاء، المضيفات الافتراضية التي تعرض الموقع الافتراضي فقط) مع -a، وتظهر الأدلة مع -v.
| الخيار | ما يفعله |
|---|---|
-p LIST | المنافذ: web (20 منفذاً شائعاً + 32400، الافتراضي)، all، أو 80,443,32400 |
-n | بدون فحص منافذ، فقط 443 و80 |
--names FILE | قائمة أسماء المضيفين الخاصة بك، تُفحص كمضيفات افتراضية |
--no-vhosts | لا تبحث عن مواقع أخرى على نفس عنوان IP |
-a / -v | إظهار النتائج المخفية / إظهار الأدلة |
-o FILE | كتابة جميع النتائج أيضاً إلى CSV |
-d | تصحيح الأخطاء: كل طلب وترويسة ومطابقة |
-q | بدون لافتة (للسكربتات) |
-V | طباعة الإصدار |
-h | جميع الخيارات |
myawesomeproxy،
mylovelyminer أو x12345، ملفات .so/.dll غير معروفة في مجلد Codecs الخاص بـ Plex،
اتصالات إلى proxystream.st، حمل عالٍ على المعالج بينما لا يُشغَّل أي شيء. التحديث
لا يزيل مهاجماً موجوداً بالفعل.يعمل AlienVault OTX وHackerTarget بدون مفاتيح. يحتاج VirusTotal وShodan و SecurityTrails إلى مفتاح API، يُقرأ من متغيرات البيئة:
| المتغير | المصدر |
|---|---|
PANIC_VT_KEY | VirusTotal passive DNS |
PANIC_SHODAN_KEY | Shodan hostnames |
PANIC_SECURITYTRAILS_KEY | SecurityTrails reverse IP |
احتفظ بها في ملف .env لا يمكن لأحد غيرك قراءته، وحمّله للفحص فقط:
( set -a; . ./.env; set +a; python3 plex2scan.py 203.0.113.10 )
--vt-key و--shodan-key و--securitytrails-key تعمل أيضًا، لكن وسائط سطر الأوامر
مرئية للمستخدمين المحليين الآخرين (ps) وتنتهي في سجل shell الخاص بك.
يتم إخفاء قيم المفاتيح في رسائل الخطأ. (شكرًا لـ Jonas Hüsser على هذا.)
docker run -d --name plex2scan --restart unless-stopped \
-p 127.0.0.1:8091:8091 \
-e PANIC_ORIGIN=https://plex2scan.example.ch \
-v plex2scan-data:/data \
ghcr.io/akaihigurashi/plex2scan:latest
أو باستخدام Compose: نزّل docker-compose.yml، واضبط
PANIC_ORIGIN، ثم docker compose up -d. تستمع الحاوية على localhost
فقط؛ ضع وكيلًا عكسيًا مع TLS أمامها
(مثال nginx).
| المتغير | الافتراضي | الغرض |
|---|---|---|
PANIC_ORIGIN | – | العنوان العام. تُرفض الطلبات من أصول أخرى. اضبطه. |
PANIC_OPERATOR / PANIC_CONTACT | – | قسم اتصال اختياري أسفل الصفحة |
PANIC_IMPRINT_URL | – | رابط اختياري إلى بيانات الناشر الموجودة |
PANIC_TRUSTED_PROXY | 127.0.0.1,::1 | الوكلاء الذين يُوثق بترويسة X-Real-IP الخاصة بهم |
PANIC_DENY_HOSTS / PANIC_DENY_IPS | – | لا تفحص هذه النطاقات / العناوين أبدًا |
PANIC_AUDIT_DIR | /data/audit | ملفات سجل التدقيق اليومية |
PANIC_RETENTION_DAYS | 30 | تُحذف ملفات التدقيق الأقدم من هذا |
تتمتع الصفحة بنفس الحمايات الموجودة في php2scan: مربع اختيار الموافقة، وسجل التدقيق، ورفض عملاء VPN/Tor/مراكز البيانات، وحد المعدل، وذاكرة التخزين المؤقت للنتائج، والأسماء المضيفة العامة فقط مع تثبيت الاتصال على العنوان المفحوص، والمواقع التي لا تُفحص أبدًا (الخدمات المعروفة، وأكثر 100 موقع زيارةً، والمواقع الحكومية، والدول الخاضعة للعقوبات)، ومنع الوصول من الدول الخاضعة للعقوبات. إلى جانب الموقع نفسه (443، ثم 80) لا تنظر الصفحة إلا إلى المنفذ 32400، وفقط إذا كان مفتوحًا.
يعيش محرك الفحص (الجلب، والبصمة، وفحص المنافذ، واكتشاف المضيفين الافتراضيين، وخادم
الويب) في panic-core.
كل ما يخص Plex2Shell موجود في check.py.
يُولَّد plex2scan.py وweb.py من كليهما:
git clone https://github.com/akaihigurashi/panic-core ../panic-core
python3 ../panic-core/bundle.py check.py
GPL-3.0، انظر LICENSE. الخطوط: Inter وJetBrains Mono (رخصة SIL Open Font License). غير مرتبط بـ Plex, Inc. ولا معتمد منها؛ "Plex" هي علامتها التجارية.