Symfonyの脆弱性CVE-2026-118515|ファイル漏えいなどと修正版

公開 2026-11-05公表 2026-11-04資料確認 2026-11-05PHPの脆弱性 28件のまとめ
起きることファイルを持ち出されたり、別の利用者になりすまされたり、サービスを止められたりするおそれ
使われている所Symfonyで動く会社のWebサイト・業務システム・外部からデータを受け取るサービス
対象製品Symfony
識別番号CVE-2026-118515・CVE-2026-118513・GHSA-pxj9-jh84-vhm5・GHSA-6prc-h956-hxjq・GHSA-hwfg-qwvh-2wfx
影響範囲主に5.4.56未満、6.0以上6.4.50未満、7.0以上7.4.23未満、8.0以上8.1.11未満。対象コンポーネントと入力経路によって異なる
修正情報5.4.56・6.4.50・7.4.23・8.1.11(提供元が各系列に示す修正版)
次にやること①Symfonyの版と対象機能を確かめる ②修正版へ上げてファイル受信・ログイン・入力形式を試す

Symfonyは11月4日、日本時間20時43分に複数の脆弱性を公表しました。外部入力からサーバー内のファイルを扱わせる問題、証明書認証のなりすまし、YAMLによるサービス停止などが含まれます。使っているコンポーネントと入力経路を確かめ、提供元が示す5.4.56・6.4.50・7.4.23・8.1.11へ更新します。[1][2][5]

この記事の要点
  • ファイルを受け取るAPIは、UploadedFileなどの型を持つオブジェクトへ、リクエストを直接変換していないか確認します。
  • 証明書認証は、信頼した認証局の証明書があっても、利用者が証明書のCNを指定できる場合に影響します。
  • YAMLを受け付けるAPIは、認証のない1リクエストでPHPの処理を長時間占有される場合があります。
  • 修正版では入力の扱いも変わります。更新後にファイル受信、証明書認証、YAML・CSVの受信を試します。

01何が起きるか

CVE-2026-118515は、Serializerがリクエストの値からUploadedFileを作る問題です。アプリの処理次第で、PHPが読めるファイルを外へ返したり、移動したりするおそれがあります。Symfonyの評価は「高」で、この告知にCVSSの数値は記載されていません。[1]

同時公表のCVE-2026-118513は証明書認証のなりすましで、Symfonyの評価はCVSS 4.0で7.7(高)。YAMLの処理時間が急増するGHSA-hwfg-qwvh-2wfxは同8.7(高)です。以下ではファイル、認証、サービス停止の影響を先に確認します。[2][5]

02対象になる入力経路

  • ファイル受信:#[MapRequestPayload]などで、外部入力をUploadedFile型のプロパティを持つオブジェクトへ変換する場合。Assert\Fileだけでは防げません。[1]
  • data URI:DataUriNormalizerを使い、外部入力をSplFileObject・SplFileInfo・Fileに変換する場合。大文字を含むスキームがローカルパスとして開かれる別件があります。[3]
  • パスの検査:Path::isBasePath()やcanonicalize()で利用者の入力を検査してからファイルを開く場合。Symfony 6.4以降のAssetMapperでは、不正な配布パッケージのCSS参照から保存先の外へ書き込まれる経路もあります。[4]
  • 証明書認証:信頼する認証局が発行した証明書のCNを攻撃者が指定でき、DN全体から利用者名を抽出する場合。認証局がSubjectを生成・検証する構成や、属性別の値を直接渡す構成は、この問題の対象外です。[2]
  • YAML:信頼できないYAMLを解析する処理。7.4以降ではYamlコンポーネントがあり、#[MapRequestPayload]のacceptFormatを制限していないAPIも含みます。6.4ではアプリによるYAML形式の登録が条件です。[5]

03悪用の状況

確認した提供元の告知には、実際の攻撃を観測したとの記載はありません。告知には再現条件や入力例があり、YAMLでは小さな入力でもPHPの処理を長く占有できることが示されています。実運用への攻撃が確認されたという意味ではありません。[1][2][3][4][5]

04対象の版と推奨する版

上記のSerializer・証明書認証・YAMLの告知が示す対象は、5.4.56未満、6.0以上6.4.50未満、7.0以上7.4.23未満、8.0以上8.1.11未満です。Filesystemのパスの問題は5.4.0以上が対象です。現在の系列に対応する5.4.56・6.4.50・7.4.23・8.1.11を修正版の基準にします。[1][2][4][5]

今回の修正番号と、将来を含む系列全体のサポート状況は別です。互換性を確かめずにメジャー版を飛び越すのではなく、まず影響する依存関係を修正版へそろえます。個別コンポーネントを使うアプリも対象です。

05確かめて上げる手順

  1. プロジェクトで次を実行し、導入済みコンポーネントと版を記録します。実行環境が別のコンテナなら、その環境でも確認します。

    composer show 'symfony/*'
    composer audit
  2. Serializer、SecurityHttp、Filesystem、Yamlと、それらを使うリクエスト処理を調べます。独自のSerializerを組み立てている場合は、DataUriNormalizerがObjectNormalizerより先に登録されているかも確認します。今回のUploadedFile対策は、この並びを欠くSerializerには効きません。[1]

  3. 依存関係の制約を確認し、検証環境でSymfonyの対象パッケージを更新します。

    composer update 'symfony/*' --with-all-dependencies

    解決結果が修正版に達したかを確認し、更新したcomposer.lockを使って本番へ配置します。コマンドの成功だけで、必要な版へ上がったと判断しません。

  4. 正規のファイル送信・証明書ログインと、許可している入力形式をテストします。認証のないリクエストからファイル型のプロパティを書き換えられないことも検証環境で確かめます。[1][2][5]

脆弱性の公表・更新一覧 2026年10月版の表紙
資料(無料)脆弱性の公表・更新一覧 2026年10月版60日間の公表・更新と、悪用が確認された脆弱性を分析し、どこから直すかの考え方と確認の手順をまとめた資料です。

06すぐ上げられないとき

証明書認証について提供元は、曖昧な旧形式のDNを渡す構成からRFC 2253形式へ切り替えるか、メールアドレスなど属性別の値を直接渡す構成を示しています。対象となるWebサーバーと証明書の設定を確認して適用します。[2]

ファイル変換・YAML・パスの問題について、確認した告知に更新の代わりとなる一般的な回避策の保証はありません。更新まで外部入力を対象処理に渡す機能を制限し、YAMLが不要なAPIでは受け付ける形式を明示します。ファイルサイズ制限だけでYAMLの問題を解消したとは判断できません。[1][3][4][5]

07更新後に変わる動作

UploadedFileなどの派生型には、想定した型の実体以外を渡すと例外が出るようになります。#[MapRequestPayload]では422レスポンスになります。正規のファイル受信まで失敗していないか確認します。[1]

7.4以降では、#[MapRequestPayload]はacceptFormatに明示しないYAML・CSVを受け付けなくなります。これまで暗黙に受け付けていたAPIでは、不要な形式を閉じたままにし、必要な形式だけを明示します。[5]

08同時に確認するアクセス制御とHTML処理

同日の修正には、GETだけに制限したaccess_controlやファイアウォールをHEADで通れる問題、IPの公開・非公開判定の不備、HtmlSanitizerのURL制限の回避も含まれます。HEADでは本文がなくてもコントローラーは動き、ヘッダーや副作用が残る点に注意します。[6][7][8]

修正後はGET向けのルールにHEADも含まれます。HEAD専用ルールが必要なら順序を確認します。IPのフィルターも厳しくなり、これまで通った予約アドレスなどが拒否されるため、更新後のテストに含めます。[6][7]

AI攻撃対応型システム改修支援既存システムの制約と業務への影響を踏まえ、改修の計画から実装・結果の確認まで支援します。

よくある質問

PHP本体だけ上げれば直りますか?

対象はSymfonyの各コンポーネントです。PHPの版だけで判断せず、Composerで導入したパッケージの版を確かめます。

ファイルアップロードを無効にしていれば対象外ですか?

UploadedFile型などへの変換経路があれば、実際のアップロードを伴わないリクエストも問題になります。フォーム画面の有無だけでは判断できません。[1]

5.4.56などが入っていれば確認は不要ですか?

独自のSerializerではNormalizerの登録順も確認します。動いているコンテナ・配置先の版と、更新後に変わる入力処理を確認してください。[1][5]

出典・参考資料

  1. Symfony公式:UploadedFileの生成によるサーバーファイル参照(CVE-2026-118515)2026-11-04 / 対象・修正版、UploadedFileの条件、ファイル読み取り・移動、Normalizerの順序、422への動作変更、深刻度高
  2. Symfony公式:X509のDN解析によるなりすまし(CVE-2026-118513)2026-11-04 / 対象・修正版、認証局とCNの条件、対象外構成、RFC2253・属性別値の対応、CVSS4.0 7.7
  3. Symfony公式:DataUriNormalizerによるローカルファイル読み取り2026-11-04 / 対象・修正版、dataスキームの大小文字とファイル型への変換条件、深刻度高
  4. Symfony公式:Filesystemのパスが基準ディレクトリ外へ出る問題2026-11-04 / 5.4.0以降の対象と修正版、Pathの検査、AssetMapperの配布パッケージ経路、深刻度高
  5. Symfony公式:YAML解析時間の増大によるサービス停止2026-11-04 / 対象・修正版、未認証リクエストの条件、YAML・CSV形式の動作変更、CVSS4.0 8.7
  6. Symfony公式:HEADによるaccess_control・ファイアウォールの回避2026-11-04 / GET/HEADの条件、修正後のルール順序
  7. Symfony公式:IP制約の公開・非公開モードの判定不備2026-11-04 / IPフィルタの対象条件、修正後に拒否されるアドレスと互換性
  8. Symfony公式:HtmlSanitizerの許可ホスト制限回避2026-11-04 / 相対URLと許可ホストを組み合わせた条件、修正版

あわせて読みたい記事

PHP公開 2026-11-01

PHPのWindows版のBrotliの脆弱性、8.5.12-1などへの入れ替えとcURL・Guzzleの確かめ方(CVE-2026-111497)

PHPのWindows版に同梱のBrotliの脆弱性CVE-2026-111497は、米CISAが悪用を確認しています。10月21日の版も対象のままである理由、GuzzleやWordPressで自動展開が有効になる条件、8.5.12-1などへの入れ替えと確かめ方を説明します。

PHP公開 2026-11-02

PHPの脆弱性PHP2Shell(CVE-2026-109618)|コード実行の対象バージョンと確認方法・修正版

PHP本体の脆弱性PHP2Shell(CVE-2026-109618・109619)は、米CISAが悪用を確認しています。対象は8.5.12・8.4.27・8.3.36・8.2.35より前です。php -v、ディストリのパッケージ、Dockerのタグでの確かめ方、ログに残る攻撃の痕跡、8.1以前の扱いを説明します。