速報

Apache HTTP ServerのHTTP/2に認証不要RCE|2.4.71更新と構成別の確認

CATEGORY

Composerのロックファイルからコマンド実行のおそれ|2.11.2更新とCI入力の点検

※本ページのリンクにはプロモーションが含まれています。

ロックファイルを処理するCIからコマンド実行・展開先逸脱・認証情報送信へ分岐する概念イラスト

この記事のポイント

深刻度

HIGH

対象
Composer通常系列:コマンド実行は2.10.0以上2.11.2未満、Composer 2.2 LTS系列:ZIP展開・認証情報漏えいは2.2.32で修正
悪用状況
不明
推奨対応
通常系列は2.11.2、該当するLTS系列は2.2.32へ更新し、CIが使う実行版と入力ファイル・キャッシュ・取得先を確認する。
公表日

目次

Composerの開発元は2026年11月10日、を介したコマンド実行、ZIP展開先の逸脱、の漏えいに関する3件の勧告を公開しました。PHPアプリケーションの依存ライブラリーだけでなく、依存関係を取得するComposer本体が更新対象です。通常系列は2.11.2、2.2 LTS系列は該当する問題に対して2.2.32を確認します。

特に、第三者が変更したcomposer.lockをで処理する環境は優先して点検してください。コマンド実行の問題は、のスクリプトやプラグインを無効にしても防げません。アプリケーションのコードレビューだけでは見落とす、依存関係の記録ファイルと取得処理の境界が今回の焦点です。

本稿は11月11日に取得した開発元の勧告と変更履歴に基づくニュースです。以下の運用手順は本サイトの提案であり、攻撃を実行して動作を実測したものではありません。3件の勧告には確認時点で番号がなく、実環境での悪用確認の記載もありません。

スポンサーリンク

まずComposerの実行版と入力元を組にする

端末で使うComposerと、CIやコンテナで使うComposerが同じとは限りません。最初に、依存関係を取得するジョブ、実行ファイルの配置場所、起動版、取得するリポジトリ、使う認証情報を対応付けます。Webサーバー上でComposerを実行していなければ、そのサーバーのPHP版だけを調べても今回の影響判断は終わりません。

通常系列の2.10.0以上2.11.2未満では、ロックファイル等から読み込む設定の問題があります。一方、2.2 LTS系列はこのコマンド実行には該当しません。ただし、LTS利用者もZIP展開と認証情報漏えいの問題を別に判断する必要があります。「LTSだから3件とも対象外」とまとめないことが重要です。

ロックファイルからコマンドが実行される条件

開発元のコマンド実行に関する勧告は、composer.lockまたはvendor/composer/installed.jsonへ攻撃者が影響を与えられ、その内容に対してinstallやupdateを実行する構成を対象としています。transport-options.prevent_url_access_callableがデータファイルから取り込まれ、ダウンロードの解決時にコマンドが実行され得ます。

開発元は、未審査のプルリクエスト、外部テンプレート、侵害された更新Bot、汚染されたCIを具体例に挙げています。悪性パッケージのインストールやパッケージ内コードの起動を待たず、チェックサム等の整合性検証より前に実行される点が、通常の依存パッケージの危険性とは異なります。

2.11.2の修正は、ロックファイルやインストール済み情報から来たダウンロード時コールバックを無視し、プログラムで設定したものだけを扱う変更です。勧告は--no-scriptsと--no-pluginsでは防げないと明記しています。これらの指定がCIにあることだけを理由に、未審査ファイルを安全に処理できるとは判断しないでください。

開発元評価は v3.1で8.8、Highです。この値は-jhfp-4ppm-crmmの評価として扱い、他の2件やプロジェクト全体の危険度へ流用しません。第三者が入力ファイルを操作できる経路と、Composerを実行する必要があり、公開Webサイトへ任意の要求を送るだけで成立する問題と同一視しないようにします。

スポンサーリンク

ZIPは展開先とフォールバックを確認する

ZIP展開の公式勧告は、シンボリックリンクを含む細工されたアーカイブで、想定するパッケージディレクトリ外へファイルを書き込める問題です。unzipからPHPのZipArchiveへ処理が切り替わる経路に関係します。修正版は2.11.2と2.2.32です。

成立条件には、攻撃者が配布ZIPを制御できること、実行環境にunzipコマンドとPHPのZIP拡張があることが挙げられています。通常のPackagist.org由来のアーカイブのみを使う構成は、開発元が示す現実的な攻撃経路ではありません。非信頼のリポジトリ、独自ホスト、ミラーや任意のdist URLを使う場合を重点的に確認します。

この問題の直接の作用は任意ファイル書き込みです。Webアプリの入口など、後から実行される場所が上書きされればコード実行へつながり得ますが、すべてのZIPで即座にコマンドが動くという説明ではありません。配置先への書き込み権限と、生成物を本番へ渡す工程まで含めて影響を考えます。

インラインHTTPヘッダーの秘密情報を点検する

認証情報漏えいの公式勧告の対象版は2.11.0、2.11.1、2.2.31です。リポジトリのオプションにAuthorizationやなどの秘密をHTTPヘッダーとして直接設定し、攻撃者がロックファイル等を改変できる場合、取得ミラーを攻撃者のホストへ向けて認証情報を送信させる可能性があります。

こちらは当該リポジトリの認証情報の漏えいであり、それ自体によるコード実行やファイル変更ではありません。インラインの秘密ヘッダーを使わない構成は、勧告が示す条件に該当しません。修正版への更新に加え、自組織がどの方式で認証情報を渡しているかを確かめ、秘密の実値をログへ出さずに設定箇所と利用先を把握します。

スポンサーリンク

更新はライブラリーではなくツール本体へ行う

Composer 2.11.2の公式変更履歴は11月11日公開として表示されています。勧告の11月10日という日付と、変更履歴の日付を分けて記録してください。通常系列の更新先は2.11.2、2.2 LTSを維持する構成では2.2.32です。

まずcomposer --versionで実行版を記録します。自己更新で管理している実体なら、通常系列の例はcomposer self-update 2.11.2です。LTSならcomposer self-update 2.2.32を使う判断になります。OSパッケージ、、CIセットアップ処理が管理する場合は、その配布元の更新手順を使い、同じファイルを複数の方式で上書き管理しないようにします。

プロジェクト内でcomposer updateを実行するだけでは、Composer本体の更新にはなりません。逆に今回の対応を名目として依存パッケージを一斉更新すると、アプリケーションの差分とツール修正の差分が混ざります。まず本体の更新と実行版の確認を行い、依存関係を変更する必要があるかは別の作業として判断します。

イメージにComposerを組み込む場合は、Dockerfileや取得スクリプトが固定する版、キャッシュ、実際に起動するジョブのイメージを照合します。共有Runnerのホスト側だけを更新しても、ジョブ内のコンテナが別のComposerを持っていれば適用されません。実行環境の内側で版を確認した結果を、ジョブ識別子とともに記録します。

更新前の停止判断と更新後の確認を分ける

を導入するまでの提案として、未審査のロックファイルを付きの強い権限で処理するジョブは保留します。確認対象のファイルを開くレビューと、その内容で依存関係を取得する処理を区別してください。単にPRのテストが必要という理由で、本番の配布トークンまで渡す必要はありません。

更新後は信頼できる既存の入力で依存関係の取得を試し、起動版、依存パッケージの取得先、認証失敗、展開失敗を確認します。攻撃用ZIPやコマンドを本番で実行して脆弱性の再現を確認する必要はありません。通常業務の取得とビルドが成功することと、修正版が使われていることを別々に証拠として残します。

取得が失敗した場合は、本体が更新されたか、ミラーのURLや方式が意図どおりか、ZIP処理でどの実装が使われたかを順に確認します。エラー回避のために古いComposerへ無期限に固定したり、非信頼の配布物を別経路で取得したりすると、対策の前提が失われます。まず限定したで必要な構成差を調べます。

CIキャッシュは性能設定としてだけ扱わず、入力ファイルを誰が書き込めるかを確認します。非信頼が作ったキャッシュを、秘密情報を持つジョブが復元する構成は、PRそのもののレビューとは別の入力経路になります。キャッシュキー、書き込み元、復元先を対応付け、疑わしいキャッシュは保全と利用停止の手順を決めます。

過去に処理したファイルと認証情報の調査

更新は今後の処理を修正するもので、過去の不審な実行や漏えいがなかったことを証明しません。第三者が変更したロックファイルを対象版で処理した疑いがある場合は、入力の、ジョブの実行時間、キャッシュ、生成物、外向き通信を保全し、調査対象の実行環境を特定することを提案します。

リポジトリの秘密ヘッダーを使う環境では、その資格情報の権限と利用履歴も確認します。すべての秘密を一律に交換するという意味ではなく、不審な取得先へ送信された可能性がある情報を絞るためです。失効や再発行が必要なら、利用するジョブやサービスへの差し替えと、旧トークンが使えないことの確認を組にします。

今回の3件は入力経路と結果が異なります。コマンド実行、ファイル書き込み、認証情報送信を一つの検知条件で済ませず、使っていた版と処理内容に応じて調査範囲を決めてください。公式資料に悪用確認の記載がないことは、自組織の被害がない証拠ではありません。異常が見つかれば、通常の更新完了とは分けて対応します。

最終的な完了条件は、対象となるComposer実体が修正版になり、再実行したジョブがその版を使い、必要な取得とビルドが成功することです。ロックファイルのレビュー、CI入力の分離、トークンの権限制限は、修正版の適用と並行して維持する防御になります。

出典・一次情報

本記事は以下の公開情報をもとに作成しています。最新の状況は各リンク先で確認してください。

この記事を書いた人

Ryohei

Webエンジニア / アプリ開発者 / 技術ブログ運営者

福岡のWeb制作会社に勤務するWebエンジニアです。10年以上にわたりWeb制作・開発に携わり、ヒアリングや進行管理から、コーディング、CMSの構築、システム開発、サーバーの構築・保守・運用まで、Webサイト制作の工程を幅広く担当しています。Webサイトは、これまでに100以上の構築・保守を手がけてきました。

個人でもWebサイトの制作・改修やWebアプリの開発・運用を行い、AIを活用した開発にも取り組んでいます。近年はWebセキュリティにも注力しています。

2015年から技術メディア「Into the Program」を運営し、実務や開発で得た知識をもとに、プログラミングの実装方法やWebサイトの運用・セキュリティ情報を発信しています。

主な分野
Webサイト構築・保守・運用 / HTML/CSS / JavaScript / PHP / WordPress / サーバー構築・保守・運用 / アプリ開発 / セキュリティ対策
資格・試験合格
情報セキュリティマネジメント試験
基本情報技術者試験
AWS認定ソリューションアーキテクト アソシエイト
PHP8技術者認定ウィザード
メディア運営
2015年〜

記事の作成・更新について

セキュリティ記事は、ベンダーの公式アドバイザリやCVE・JVNなどの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

あわせて確認したい対策・解説

ほかの脆弱性

※悪用の「未確認」は、最終確認時点で悪用の報告が見つかっていないことを示します。悪用されていないことを保証するものではありません。「不明」は公表情報に悪用状況の記載がないものです。

関連する記事

おすすめの書籍

キーワードから探す

スポンサーリンク

コミット

Gitなどで、ファイルの変更をひとまとまりの記録として保存すること。また、その記録。

詳しく見る

ブランチ

Gitなどで、作業の流れを枝分かれさせたもの。ほかの作業に影響を与えずに、機能の追加や修正を並行して進められる。

詳しく見る

検証環境

本番環境に反映する前に、変更や更新が問題なく動くかを試すための環境。本番と同じ構成にできるほど確認の精度が上がる。

詳しく見る

認証

アクセスしてきた相手が本人であることを確かめる仕組み。パスワードや生体情報、電子証明書などを使う。

詳しく見る

シークレット

パスワードやAPIキー、秘密鍵など、他人に知られてはいけない値。コードに書かず専用の仕組みで管理する。

詳しく見る

パッチ

ソフトウェアの不具合や脆弱性を修正するための更新プログラム。適用することで既知の問題を解消する。

詳しく見る

ビルド

ソースコードなどから、実際に動かしたり配布したりできる形の成果物を作る作業。

詳しく見る

コンテナイメージ

アプリケーションと、動かすのに必要なOSの部品やライブラリ、設定をひとまとめにしたもの。コンテナを起動する元になる。

詳しく見る

APIキー

APIを利用するときに、利用者やアプリケーションを識別・認証するための文字列。漏えいすると不正利用につながる。

詳しく見る

HTTP

ブラウザとWebサーバーがやりとりするための決まりごと(プロトコル)。暗号化したものはHTTPSと呼ぶ。

詳しく見る

GHSA

GitHubで公開される脆弱性の情報(GitHub Security Advisories)と、その識別番号。オープンソースの脆弱性の確認に使う。

詳しく見る

CVSS

脆弱性の深刻度を0.0〜10.0の数値で評価する共通の基準。数値が大きいほど深刻度が高い。

詳しく見る

キャッシュ

一度取得したデータを一時的に保存しておき、次に使うときに再利用して処理を速くする仕組み。

詳しく見る

依存関係

プログラムが動くために必要な、ほかのライブラリやパッケージとの関係。また、その必要な部品そのもの。

詳しく見る

コールバック

ほかの関数に引数として渡し、処理の完了時や出来事が起きたときなどに呼び出してもらう関数。

詳しく見る

CVE

公開された脆弱性に付けられる世界共通の識別番号。「CVE-2026-12345」のように年と連番で表す。

詳しく見る

脆弱性

ソフトウェアや設定の不備のうち、攻撃者に悪用されると情報漏えいや不正操作などにつながる弱点。

詳しく見る

パッケージ

ソフトウェアを配布・インストールしやすいように、プログラムと必要な情報をひとまとめにしたもの。npmやComposerなどで管理する。

詳しく見る

CI/CD

コードの変更をきっかけに、テストやビルド、本番への反映までを自動で行う開発の仕組み。

詳しく見る

認証情報

本人であることを証明するための情報。IDとパスワード、APIキー、アクセストークン、秘密鍵など。

詳しく見る

リポジトリ

ソースコードなどのファイルと、その変更の履歴をまとめて保管する場所。Gitで管理し、GitHubなどで共有する。

詳しく見る

ロックファイル

パッケージマネージャーが、実際に入れた依存パッケージのバージョンを記録するファイル。package-lock.jsonなど。

詳しく見る