
2026/09/23 3:57
SAML:悪い設計のフラクタル
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
SAML(セキュリティ断言マークアップ言語)は、2002 年に OASIS により Web 1.0 から Web 2.0への移行期間におけるシングルサインオン(SSO)を可能にするために作成された XML ベースの認証プロトコルであり、現在では不安全かつアーキテクチャ的に陳腐なものとして increasingly 見なされています。イェール大学の CAS、Internet2 の Shibboleth、Okta や Ping Identity など主要ベンダーなどの歴史的動機にもかかわらず、SAML は深刻な技術的負債を抱えています。XML 署名検証のために脆弱性の多い C ライブラリ(例:
libxmlsec)に依存しており、これにより XML 署名ラッピング(XSW)、XXE、エンティティ展開、DTD 取得を介した SSRF、正規化バイパスなどの複雑な脆弱性がもたらされます。このプロトコルの「キッチンシンク」的な設計は、ほとんど使用されないセキュリティ基準を取り込んでおり、「骨格化(ossification)」——つまり SPAs、モバイルデバイス、IoT、ゼロトラストネットワークといったモダンなトポロジーとの不互換性——は、JSON や JWT といった新しいフォーマットと比較してその制限を悪化させています。
Thomas Ptacek などの専門家らは 2012 年以来、これらのリスクを指摘し続けています("On Breaking SAML"という示唆的論文などを引用)。しかし、ベンダーの慣性により、RFC 8252 や 9449 などで定義されたモダンな標準である OpenID Connect (OIDC) への業界での採用は遅れています。一方で Fly.io や Tailscale のようなリーダー企業は既に OIDC にシフトしています。現在では、アイデンティティプロバイダーに対し、新しい SAML 顧客のオンボーディングを即座に停止し、OIDC 相当ものを提供し、明確な終了日を設定するとともに、将来のネットワークアーキテクチャを安全に支えるために段階的な移行計画を実行することが推奨されています。
本文
SAML 認証プロトコルの終焉と OpenID Connect(OIDC)への移行
学術界で生まれ、企業 IT 部門で主流となった SAML (Secure Access Markup Language) は依然として重要な役割を果たしてきました。しかし、2000 年代後半の SaaS 企業の台頭に伴う認証需要の変化により、複雑化した SAML の代替案である OpenID Connect (OIDC) への移行が迫られています。本稿では、SAML の歴史的経緯、セキュリティ上の根本的な欠陥、そして廃止に向けた具体的な道筋を解説します。
1. SAML の基礎と背景
SAML の本質的な問題
- 複雑な土台: 理論的にはシンプルだが、実装の基盤は不安定です。
という荒々しい C 言語ライブラリをラップしているのが多く見られます。libxmlsec- トマス・プタチェク氏(2023 年)の見解:
「XML サインチャネルの検証が信頼できる」という前提を置く限り機能しますが、実際には XML の検証は深く呪われています。実装されているほとんどの SAML システムは、誰も読んでいない
に依存しています。libxmlsec
委員会で設計された歴史
- 創成期 (2002 年): OASIS セキュリティサービス技術委員会 (SSTC) により作られました。
- 設計手法の問題: 「キッチンスイNK(機能過多)」なアプローチ(ウォーターフォール法など)が採用され、不要な機能が蓄積しました。
- 4 つの XML ベースプロトコルの統合体:
- ネティジェンティス「セキュリティサービスマークアップ言語 (S2ML)」
- セキュラント「AuthXML」
- ヴァーイサイン「XML トラストアサーションサービス仕様 (X-TASS)」
- ジャムクラッカー「情報技術マークアップ言語 (ITML)」
学術界から産業への拡大
- Web 2.0 への移行: ユーザーと組織が複数の Web サービスを認証する必要が生じました。
- 主な推進力:
- 2002 年: イェール大学「中央認証サービス (CAS)」
- 2003 年: Internet2「シボレッズ IdP」、マイクロソフト「ADFS」
- 2007 年頃: ノルウェー国営企業アユニエットによる simpleSAMLphp
- 産業化: 学術的な実験が基盤となり、数十億ドル規模の SSO 業界を生み出すきっかけとなりました。
- ピング・アイデンティティ (2002 年)
- OneLogin (2009 年)
- Okta (2009 年)
- Duo Security (2010 年)
2. SAML のセキュリティ上の欠陥(アキレス腱)
SAML が抱える致命的な不備は以下の 5 つ です。これらは新しいプロトコルの設計において避けるべき教訓となります。
① XML を基盤としている
- 複雑性の対立: XML は JSON などと比べて構造が著しく複雑です(タグ、要素、属性、名前空間、CDATA、DOCTYPE 等)。
- JSON: キー、値、オブジェクト、リストのみでシンプル。
- 技術的な選択: SAML 制定当時 (2002 年) は、JSON の実験段階であり、大量の Java コードを書く際に XML が標準とされたためです。
② 正規化(Canonicalization)の問題
- 合意形成の難しさ: サービスプロバイダー (SP) と IdP 間で XML データの表現にズレがあると認証が失敗します。
- 代表的な攻撃事例:
- XML コメント回避攻撃 (2018 年、ケルビ・ルディグ氏発見)
- 関連する脆弱性:
- パースャ差分攻撃
- 「ラウンドトリップ」バグ
- 具体的な CVE/事例:
- Go の標準ライブラリにおける XML ラウンドトリップ脆弱性 (2020 年)
- libxml2 を悪用した GitHub Enterprise SAML 回避 (2025 年)
- パースャ差分による SAML SSO 認証回避 (2025 年)
③ エンベロープされたサインチャネル
- 構造的問題: 署名をデータペイロードの中に挿入(エンベロープ)する方式です。
- リスク: データを修正する際、署名とバイト単位の一致を保証するのが極めて困難です。
- JWT との比較:
- JWT: シグネチャはペイロードから分離され(ドット
で区切られる)、管理が容易。. - SAML:
要素がSignature
要素内に埋め込まれており、検証が複雑化します。Assertion
- JWT: シグネチャはペイロードから分離され(ドット
④ 「キッチンスイNK」な設計
- YAGNI 原則の違反: 「将来必要になるもの」まで仕様に含みすぎています。
- 実質的には現在の SAML 実装の 99% はサブセットを使用しています。
- 未使用機能が複雑性を増幅させ、セキュリティリスクを高める要因です。
トマス・プタチェク氏 (2021 年): 「もし私が何か新しいものへの SAML サポートを追加するなら、標準的な SAML チェックだけでなく、Okta、OneLogin、Google、あるいは Shibboleth が生成するメッセージと同じ形状を持たないメッセージも拒否することを検討します。」
⑤ 骨化(Ossification)
- 時代遅れ: 当初の要件(VPN、ネットワーク分割対応)に特化しており、現代のアーキテクチャに適応できていません。
- 主な限界:
- 通信手段への依存: OIDC は HTTP を前提とするのに対し、SAML は非 HTTP 通信も可能と柔軟性がありますが、実装が複雑になります。
- ネットワークトポロジー: IdP と SP が直接通信できない環境(ファイアウォール越し)での処理に非効率です。Google の BeyondCorp やゼロトラストアーキテクチャの出現でこの必要性は低下しました。
- 進化の遅れ: 事前に設計されたウォーターフォール型に対し、OIDC は有機的に成長しています (RFC の継続的な発行参照)。
- PKCE, DPoP, Device Auth など、モバイル/IoT/SPA に対応した機能は OIDC で追加されました。
3. 移行の道筋:すべては OIDC に通じる
すべてのプロトコルに完璧はありませんが、解決策としては OIDC が最適です。SAML の唯一の優位性は「直接通信できないネットワーク」でしたが、OIDC も明示的なフロー(フォーム投稿)でこれを解決可能です。
サービスプロバイダー (SP) としての移行
- 推奨アクション: SAML を使用せず、OIDC サポートを実装し SAML から撤退します。
- ベンダー事例: Fly.io や Tailscale は既に OIDC で標準化しています。
- 「本当に SAML を避けることを試みてください」と提言されています。
アイデンティティプロバイダー (IdP) としての移行
- 戦略: 「象を食う」アプローチ(一口ずつ)で移行計画を立てます。
- ステップ:
- 廃止計画の開発
- 顧客への連絡
- 新しい顧客の SAML インテグレーション停止(オンボーディング拒否)
- 既存顧客へ同等の OIDC 設定提供
- 決断日の実行
まとめ
SAML は約 25 年間、SSO 業界を生み出し、認証セキュリティを向上させ、数十億ドルの経済的インパクトをもたらしてきました。その歴史はプロトコル設計における素晴らしいケーススタディですが、現在は緩やかな衰退を遂げています。
- 柔軟性・アジャイル性: IT 環境の変化に対応できない SAML に比べ、OIDC は有機的な進化が可能です。
- 結論: SAML の廃止と OIDC への移行が、セキュリティと将来性を兼顾する唯一の選択肢です。
さらにセキュリティトピックの詳細は、「Marshal Madness: Ruby のシリアライズ化攻撃の簡単な歴史」も参考にしてください。