パス・トラバーサル脆弱性の公表を受け、Composerのユーザーには更新が呼びかけられています。この脆弱性を悪用すると、悪意あるPHPパッケージ、あるいは侵害されたPHPパッケージが、自身のインストールディレクトリ外にあるファイルのパーミッションを変更できてしまう恐れがあります。
Criticalvulnerability alerts
この脆弱性はCVE-2026-59944およびGHSA-96h3-5x6v-m776として追跡されており、Composerバージョン2.3.0から2.10.2まで、およびバージョン1.0から2.2.29までが影響を受けます。
Composerのパス・トラバーサル脆弱性
この問題はComposerバージョン2.10.3および2.2.30で修正済みです。GitHubはこの脆弱性の深刻度を「Moderate(中程度)」と評価しており、CVSS v3.1のベクター文字列はCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:Nとなっています。これは、悪用にはローカルでのインストールや更新操作が必要となる一方で、機密性に対する影響は大きいことを示しています。
この脆弱性は、Composerがインストール済みパッケージによって宣言されたバイナリを処理する際の挙動に起因します。悪意のある依存パッケージが、パス・トラバーサルやシンボリックリンクの挙動を悪用することで、パッケージ本来のディレクトリ外に解決されるバイナリパスを提供できてしまう可能性があります。
インストール時、Composerは指定されたバイナリのパーミッションを変更し、それを`vendor/bin`に実行可能コマンドとして登録することができます。
パッチ適用前は、攻撃者がこの処理を悪用し、依存パッケージ自身のディレクトリ外にあるファイルをComposerに指し示すよう仕向けることが可能でした。これにより、インストール時に設定されたパーミッション次第で、Composerがその外部ファイルを他のユーザーから読み取り・実行可能な状態にしてしまう恐れがありました。
この脆弱性は、リモートコード実行を直接可能にするものではなく、攻撃者が被害者の環境からファイルを自動的に取得できるようになるわけでもありません。しかし、共有サーバーやマルチテナントのホスティング環境、あるいは他のローカルユーザーが世界読み取り可能になったファイルにアクセスできるビルドシステムにおいて、機密ファイルの内容を露出させる可能性があります。
アドバイザリによると、この脆弱性は、GHSA-gjfg-22fp-rrxxに対して以前導入されたハードニング対策を回避できてしまうとのことです。以前の緩和策では、パッケージが宣言するバイナリパス内のリテラルな「..」セグメントを拒否していましたが、検証は依存関係解決プロセス中の1箇所でのみ行われていました。
そのため、Composerが`vendor/composer/installed.json`に保存された依存関係のメタデータから欠落したバイナリを再構築する場合や、パッケージディレクトリ外に解決されるシンボリックリンクをたどる場合に、この保護機構が回避されてしまう可能性がありました。
この問題は特に、現在の信頼できるインストールプロセス中に生成されたものではない`vendor`ディレクトリをプロジェクトが再利用している場合に懸念されます。
例えば、共有または信頼できないCIキャッシュから復元された`vendor`ディレクトリ、以前のコンテナビルドステージからコピーされたもの、古いComposerリリースから引き継がれたもの、あるいは信頼度の低いビルドプロセスによって改変されたものなどが該当します。
現実的な攻撃シナリオとしては、改ざんされたメタデータや悪意のあるシンボリックリンクを含む再利用された`vendor`ディレクトリに対して、ビルドまたはデプロイのパイプラインが`composer install`を実行するケースが考えられます。
Composerはコマンドを実行しているアカウントの権限を使って、パーミッションを黙って変更してしまいます。つまり、細工されたバイナリ宣言を通じて、CIランナーやデプロイアカウント、共有ホスティングのユーザーが意図せずファイルのアクセス制御を変更してしまう恐れがあるということです。
アドバイザリでは、この問題をCWE-22(パス名の制限が不適切)、CWE-59(リンク解決が不適切)、CWE-732(重要リソースに対する権限割り当てが不適切)に関連付けています。
Composerは現在、対象ファイルを変更する前に、宣言された各バイナリがインストール対象のパッケージ内に解決されることを検証するようになりました。バイナリがそのディレクトリ外に解決される場合、Composerはそれをスキップし、警告を生成します。
この問題への完全な対処法はアップグレードのみであるため、組織にはComposerバージョン2.10.3または2.2.30へ直ちにアップグレードすることが強く推奨されています。
また、チームは信頼できない`vendor`ディレクトリの復元を避け、CIキャッシュをプロジェクトおよび信頼レベルごとに分離し、本番ビルド時には信頼できるロックファイルから依存関係を再生成することも求められます。
調査の遅れによるインシデントを防ぎましょう。15,000のSOCから得られる脅威インテリジェンスで、Tier 1のセキュリティ運用を強化できます。 SOCにTI Lookupを統合する
翻訳元: https://gbhackers.com/composer-path-traversal-flaw/