
إثبات المفهوم لثغرة CVE-2026-84361، والتي توضح حقن الأوامر في برنامج تشغيل Perforce الخاص بـ Composer عبر P4PORT خبيث، مع التحقق القائم على Docker وإرشادات التخفيف.
باستخدام Docker Compose يمكنك التحقق في بيئة معزولة تتضمن Composer 2.10.2 المتأثر وعميل Perforce p4. حاوية التشغيل معطلة الشبكة، للقراءة فقط، مع إزالة جميع القدرات (capabilities)، والمناطق الوحيدة القابلة للكتابة هي /tmp و /work عبر tmpfs.
# بناء الصورة (يتم جلب p4 من الموزع الرسمي والتحقق من SHA-256)
docker compose build
# التحقق المباشر من سلوك rsh: الخاص بـ p4 (الافتراضي)
docker compose run --rm poc
# التحقق عبر Composer الضعيف
docker compose run --rm poc /usr/local/bin/run-composer-poc.sh
يقوم الأمر الأخير بتنفيذ composer update --prefer-source في مساحة عمل مؤقتة داخل الحاوية. بما أنه يتم استخدام أمر علامة (marker) وليس خادم Perforce، فقد يفشل Composer نفسه، لكن إذا تم إنشاء العلامة فسيتم عرض والخروج بنجاح.
[+] VULNERABLEهذا إثبات مفهوم (PoC) للتحقق المحلي من CVE-2026-84361 الموجودة في برنامج تشغيل Perforce VCS في Composer. في Composer المتأثر، عندما يكون source.type للحزمة هو perforce، يتم تمرير source.url الذي يتحكم فيه المهاجم كـ P4PORT لعميل p4.
يتعامل p4 مع P4PORT من نوع rsh: / jsh: كأوامر محلية وليس كوجهات اتصال شبكي. لذلك، عند تثبيت مصدر من بيانات حزمة غير موثوقة أو composer.lock، يتم تنفيذ الأوامر بصلاحيات المستخدم الذي شغّل Composer أو حساب CI.
حمولة هذا الـ PoC تقوم فقط بإنشاء ملف علامة فارغ في منطقة مؤقتة.
المكتشف: saku0512 (GitHub)
استخدم هذا الأداة للأغراض التعليمية والتحقق الأمني في بيئات حصلت فيها على إذن صريح فقط. لا تقم بالتنفيذ على أنظمة الآخرين أو بيئات CI دون إذن.
>= 1.0, < 2.2.30 و >= 2.3.0, < 2.10.3يتطلب نجاح الاستغلال توفر جميع الشروط التالية: وجود p4 في PATH، قدرة المهاجم على التحكم في بيانات مصدر Perforce، وتثبيت الحزمة المستهدفة من المصدر. بما أن Packagist.org لا يسمح ببيانات مصدر Perforce، فإن الاستخدام الحصري لـ Packagist غير متأثر.
p4php -v
p4 -V
بشكل افتراضي لا يتم تشغيل p4، بل يتم فقط عرض P4PORT الخطير والأمر المزمع تنفيذه.
php poc.php
يقوم --execute بتمرير P4PORT من نوع rsh: إلى p4. الحمولة تقوم فقط بإنشاء علامة فريدة تحت sys_get_temp_dir() وتنظيفها افتراضيًا بعد ذلك.
php poc.php --execute
إذا ظهر [+] VULNERABLE فهذا يؤكد تنفيذ أمر محلي عبر P4PORT. لإبقاء العلامة أضف --keep-marker.
ملف composer.json المرفق هو مثال مصغر لمستودع حزم مضمّن (inline package repository) يوزعه المهاجم. نفّذ ما يلي باستخدام Composer غير مصحح و p4 في بيئة معزولة:
composer update --prefer-source
الإصدار المصحح يرفض source.url كمنفذ Perforce غير صالح قبل تشغيل p4.
قم بتحديث Composer إلى 2.2.30 أو 2.10.3 أو أحدث. استخدم فقط المستودعات وملفات lock الموثوقة، واستبعد p4 من PATH في البيئات التي لا تستخدم Perforce.