PHP Packagist の深刻な脆弱性 CVE-2022-24828:サプライチェーン攻撃にいたる恐れ

Critical Packagist Vulnerability Opened Door for PHP Supply Chain Attack

2022/10/04 SecurityWeek — 10月4日に、コード・セキュリティ企業の SonarSource は、Packagist に影響を及ぼす深刻な脆弱性の詳細を発表した。この脆弱性の悪用に成功した脅威アクターにより、PHP コミュニティを標的としたサプライチェーン攻撃が行われる可能性があるという。Packagist とは、PHP 管理ツールである Composer のデフォルト・リポジトリであり、インストール可能な PHP パッケージが集約されている場所だ。Composer は、毎月のように 20億以上のパッケージをダウンロードするために使用されている。

Sonar のセキュリティ研究者たちによると、最近になって確認された脆弱性により、悪意の依存関係が配布されることになっていた。それにより、1億以上のリクエストが乗っ取られる状況に陥り、数百万台のサーバーを危険にさらす可能性があったとのことだ。同社は、「Composer は PHP の標準パッケージ・マネージャであるため、ほとんどのオープンソース/ビジネス PHP プロジェクトが影響を受けたと思われる」とは述べている。


この脆弱性 CVE-2022-24828 は、コマンド・インジェクションに起因するものであり、Composer により実行されるコマンド・パラメータとして解釈される入力を、攻撃者が制御できるようになると説明されている。

Composer のメンテナは、「Composer のメソッド VcsDriver::getFileContent() に対して、ユーザー制御の引数として $file または $identifier を受け渡すと、引数インジェクションを引き起こす可能性がある。Mercurial または Git ドライバを使用している場合には、これを悪用した任意のコマンド実行が生じる」と説明している。

この欠陥は、昨年ぶ確認されたコマンド・インジェクションの脆弱性 CVE-2021-29472 と類似しており、Composer が外部コマンドとして呼び出す Version Control System driver (VcsDriver) のサブクラス実装に影響を与えるものである。

Git または Mercurial リポジトリを制御する悪意のユーザーが、この脆弱性を用いて、$fil e引数 (Mercurial ドライバに影響) または $identifier 引数 (Git/Mercurial ドライバに影響) にパラメータを注入することで、Packagist.org およびプライベート Packagist を標的とすることが可能となる。

Composer のメンテナは、「プロジェクトの composer.json の URL により、明示的にリストされている Git/Mercurial リポジトリを制御する人であれば、branch names を介して Composer 自体を攻撃することが可能だ」と述べている。

Sonar によると、この脆弱性を悪用する攻撃者にとって必要なことは、リモートの Mercurial リポジトリにプロジェクトを作成し、composer.json にマニフェストを追加し、悪意の readme 項目を作成し、目的のアクションを実行する .sh ペイロードを作成し、そのパッケージを Packagist に取り込むことである。

Sonar は、「次のステップは、意図しない宛先を指すようにパッケージの定義を変更し、それらが使用されるアプリケーションを危険にさらすことだ」と説明している。

この脆弱性は、4月7日に Packagist のメンテナに報告され、翌日にはホットパッチがリリースされた。この問題は、Composer の Ver 2.3.5/2.2.12/1.10.26 で対処され、実環境での悪用は確認されていない。

この記事の冒頭には、「Packagist とは、PHP 管理ツールである Composer のデフォルト・リポジトリであり、インストール可能な PHP パッケージが集約されている場所だ」と記されています。また、Packagist は標準パッケージ・マネージャでもあるので、攻撃が生じる前に対処できて、ほんとうに良かったと思います。最近の、PHP リポジトリに関連するトピックとしては、4月1日の「PEAR PHP リポジトリの 15年前の脆弱性が発覚:サプライチェーン攻撃にいたる可能性」がありました。よろしければ、PHP で検索も、ご利用ください。