何が起きたか・対象
ruby-samlで、圧縮されたSAML応答を受け取るサービスに、小さな入力から大量のXMLを解析させる問題がありました。識別子はCVE-2025-25293です。 ruby-samlはログイン先のサービス側でSAML応答を受け取るライブラリです。通常は組織のIdPが本人確認の結果を作り、ブラウザ経由でそのサービスへ渡します。
攻撃者は展開後に大きくなるXMLを小さく圧縮して送ります。受信処理は展開前の長さだけを検査するため、その入力は上限内として受理されます。その後、大きく展開したXMLの解析がCPUやメモリを消費し、同じサーバーでログインを待つ他の利用者の処理が遅れたり、失敗したりするおそれがありました。主な負荷は圧縮展開そのものより、その後のXML処理にあります。 XML内の署名や本人情報を確認するには、その前にデータを展開・解析する必要があります。この処理段階の負荷なので、正しい署名付き情報を採用してログインが成功することは、資源消費の前提ではありません。
報告・修正・公開の時系列
1.17.0で検証され、2024-12-13に報告と修正案の提示がありました。2025-03-12に修正版が公開され、研究資料は09-11に公開されています。同時期の認証回避とは別の欠陥です。
正常ならどう動くはずだったか
SAMLは外部から本人確認の応答を受け取る仕組みです。サイズ制限は通信量だけでなく、受信後の展開・XML解析に必要なメモリと処理時間を抑える必要があります。
技術的な原因
受信処理はmessage_max_bytesizeで圧縮されたSAML応答の長さを確認した後、inflateで内容を展開していました。攻撃者が大きく展開するXMLを小さく圧縮すると、受信時の値は上限以下でも、実際に解析するXMLは非常に大きくなります。展開前だけを検査し、展開後のXML解析へ無制限に進むことが不備です。
攻撃が成立する条件と流れ
攻撃者が圧縮されたSAML応答を受け付ける経路へ、小さいが展開後に大きくなるデータを送ります。サーバーは受信サイズの検査を通し、展開したXMLを解析します。その解析がCPUとメモリを占有すると、同じサーバーでログインなどを待つ他の利用者の処理が遅れたり、失敗したりするおそれがあります。 ここで必要なのは受信経路へデータを届けられることで、認証回避の記事のように有効な署名を再利用して別人になりすます条件とは異なります。受信前のネットワーク制限やアプリ独自の受付条件があれば、その条件も満たす必要があります。
確認された事実と、想定される影響
研究が説明する被害は、主に展開後のXML処理による資源の浪費とサービス不能です。攻撃者が秘密を入手したり、別人でログインしたりすることを実証した報告ではありません。前段で受け付けるリクエストの制限、解析プロセスのメモリ・時間上限、他の処理との分離によって、負荷と停止する範囲は変わります。実悪用の観測は未確認です。
実際の修正・対応方針
2025-03-12公開の修正版に対応が含まれます。具体的な差分と全系列の版番号はここでは直接確認していません。一般的には、展開後の量に加え、上限へ届くまでの展開・解析自体も制限する必要があります。 利用系列の更新先は、出典の研究時系列から開発元ruby-samlのリリース情報・セキュリティ告知へ進んで確認します。本記事で未確認の全系列の版番号を、同日の認証回避の修正版から推測して補いません。
利用者・運用者が確認すること
利用系列の修正済みサポート版へ更新し、圧縮展開とXML解析のメモリ・時間上限も確認します。要求の受信サイズだけを小さくしても、展開・解析のメモリや時間を制限できるとは限りません。
開発者への教訓(教材としての考察)
サイズは変換で変わります。どの段階の長さを検査し、その後どれだけ処理が増えるかを追うと、数値上の制限が実際の資源を守れているか判断できます。
出典・確認範囲
- [1] DoS in ruby-samlGitHub Security Lab / 確認日 2026-10-29
参照資料では実悪用や実際の被害件数を確認できません。未記載の実装差分は推測していません。