SAML(Security Assertion Markup Language)は、企業システム間のシングルサインオン(SSO)に広く利用されている認証・認可プロトコルです。
しかし、SAML Vulnerabilities(SAMLの脆弱性)は、実装ミスや署名検証の不備によって攻撃者に不正アクセスのチャンスを与える重大なセキュリティリスクとなります。
攻撃者がこの脆弱性を悪用すると、ユーザーになりすまし、セッションを乗っ取り、機密データにアクセスすることが可能になります。
実際のデータ漏洩事例
2018年、有名なクラウドサービス企業が使用していたSAML認証で署名検証の不備が発見されました。
攻撃者は署名されていないSAMLアサーションを挿入することで、任意のアカウントへのアクセスを成功させ、
多くの顧客情報、営業データ、社内コミュニケーションが流出しました。
問題はSAMLライブラリの不適切な利用と、受け入れ側の検証不足にありました。
攻撃者による悪用方法
SAMLの脆弱性を攻撃者が悪用する主な方法には以下があります:
- 署名バイパス:署名付きの部分だけを検証して、攻撃者が細工したSAMLアサーションを許可してしまう
- インジェクション攻撃:SAML XML内に細工を加えて不正なアカウントを指定
- RelayStateの不正操作:セッション固定や中間者攻撃に悪用される
- パラメータポリューション:複数のSAMLレスポンスを送って署名された方を誤認させる
なぜ危険なのか?
SAMLはシングルサインオン(SSO)の中核であり、一度突破されると全社システムに対して
無制限のアクセス権を得ることが可能になります。
特にIDプロバイダとサービスプロバイダの間での信頼関係に依存するため、一箇所でも脆弱性があれば連鎖的に被害が拡大します。
また、SAMLアサーションの構造は複雑であり、セキュリティ設計ミスに気づきにくいのも問題です。
脆弱なコードの例
// SAMLアサーション全体ではなく、署名された部分のみ検証している SAMLAssertion assertion = parseSAMLResponse(response); if (assertion.getSignature() != null && verifySignature(assertion.getSignature())) { // SAML内のemail属性で認証 String email = assertion.getAttribute("email"); loginUser(email); }
安全な実装例
// SAMLレスポンス全体の署名を検証 SAMLResponse samlResponse = parseAndValidate(response); if (!samlResponse.isSigned() || !samlResponse.verifyAllSignatures()) { throw new SecurityException("署名の検証に失敗しました"); } // issuer、audience、NotBefore/NotOnOrAfterの検証も行う if (!samlResponse.isValidIssuer("https://idp.example.com") || !samlResponse.isWithinValidTime() || !samlResponse.isForAudience("https://sp.example.com")) { throw new SecurityException("SAMLアサーションが無効です"); } String userEmail = samlResponse.getAttribute("email"); loginUser(userEmail);
SAML Vulnerabilitiesの防止策
- SAMLライブラリを最新のセキュリティパッチ適用状態に保つ
- SAMLアサーション全体の署名検証を行う
- Issuer、Audience、Time条件(NotBefore / NotOnOrAfter)を厳密にチェック
- RelayStateのバリデーションで中間者攻撃を防止
- XMLインジェクション対策として外部エンティティ(XXE)を無効化
- セッションIDの再生成とセッション有効期限の設定も必須
企業への影響
SAML脆弱性が悪用されると、全社アカウントの認証が崩壊し、顧客データ、従業員情報、取引先との契約データに不正アクセスされるリスクが生じます。
特にSAMLによってクラウドサービス(Google Workspace、Salesforce、Office 365など)と連携している場合、
一度の侵害で複数システムの同時セッションが乗っ取られる可能性があります。
まとめ
SAMLの誤った実装や設定ミスは、単なる技術的ミスでは済まされません。
セッション管理、ログイン脆弱性、シングルサインオン全体の信頼性を損なう危険性があります。
署名の完全な検証、認証情報の信頼できる処理、時間条件とリダイレクトの制御など、
正しいセキュアな実装を徹底することが、企業システムのセキュリティ維持に不可欠です。
キーワード: SAML脆弱性, SAML Security, シングルサインオン, OAuthとの違い, SAML署名検証, 認証プロトコルの脆弱性, 同時セッション管理, セッションID, セキュリティインシデント, サイバー攻撃, データ漏洩対策, セキュリティ設定ミス, IDプロバイダ, SSO脆弱性