Ruby-SAML/GitLab の脆弱性 CVE-2024-45409 が FIX:認証バイパス PoC が登場

Researchers Detail Ruby-SAML/GitLab Flaw (CVE-2024-45409) Allows SAML Authentication Bypass

2024/10/06 SecurityOnline — GitLab の認証システムに不可欠な、Ruby-SAML/OmniAuth-SAML ライブラリに存在する深刻な脆弱性 CVE-2024-45409 が、ProjectDiscovery の Harsh Jaiswal と Rahul Maini による最近の調査で明らかになった。この脆弱性の悪用に成功した攻撃者は、SAML レスポンス検証の弱点を用いて SAML 認証をバイパスし、不正アクセスを取得する可能性を手にする。

この脆弱性は、SAML アサーションを保護するために使用される、デジタル署名検証プロセスの欠陥に起因する。Jaiswal と Maini は、「この問題は、SAML アサーションを保護するために使用される、デジタル署名の検証の弱点が原因で発生し、攻撃者に対して SAML レスポンスの操作を許し、重要なセキュリティ・チェックのバイパスを引き起こす可能性が生じる」と説明している。

SAML (Security Assertion Markup Language) は、ID プロバイダー (IdP) とサービス・プロバイダー (SP) 間で、認証/承認のデータを送受信するために広く採用されているプロトコルである。この認証/承認のセキュリティは、SAML レスポンスの信頼性と整合性を検証するデジタル署名に依存している。そのため、Ruby-SAML ライブラリのバイパスにより、攻撃者は SAML レスポンスの検証方法を操作し、データの整合性を損なうことが可能になる。

根本的な問題は、検証プロセス中に XML ドキュメントをクエリするために使用される、XPath 言語の使い方にある。具体的に言うと、攻撃者は “samlp:extensions” 要素に偽の DigestValue を挿入できことになる。それにより、正当なダイジェスト検証プロセスが回避され、攻撃者は SAML レスポンスに不正な変更を持ち込むことが可能になる。研究者たちは、「XPath 表記の “//ds:DigestValue” を用いることで、DSIG 名前空間を持つ DigestValue 要素が、ドキュメント内のどこからでも選択できる」と述べている。

encoded_digest_value = REXML::XPath.first(
  ref,
  "//ds:DigestValue",
  { "ds" => DSIG }
)

この欠陥により、攻撃者は独自のダイジェスト値を挿入し、正当な SignedInfo ブロックを変更することなく、署名検証を効果的に回避できる。

したがって、攻撃者のアクセスにより、システムはダイジェストを検証し、SAML アサーションを危険にさらすことになる。研究者たちは、「変更されたアサーションの DigestValue を、”samlp:extensions” 要素内に挿入する。そのように操作しても、SignedInfo ブロック自体は変更されていないため、署名チェックに合格してしまう」と付け加えている。​ この操作により、正当な認証が行われずに、GitLab などにおける保護されたシステムへの不正アクセスが発生する。

研究者たちは、SAMLResponse を介してセッション Cookie を取得するための、合理化されたソリューションを提供する Nuclei テンプレートを公開している。

幸いなことに、この脆弱性は、すでに解決されている。2024年9月の時点で、すでに GitLab は、この問題を修正するパッチをリリースしている。Jaiswal と Maini は、「ユーザー組織において、セキュリティ・プロトコルの定期的な確認/更新は重要である。今回の脆弱性は修正されたが、このように広く採用されているライブラリであっても、その実装に脆弱性が潜んでいる可能性があることを思い出させてくれる」と締め括っている、認証に Ruby-SAML と OmniAuth-SAML を使用している、すべての組織に対して強く推奨されるのは、このエクスプロイトの被害に遭わないようにするために、ライブラリを最新バージョンに更新することだ。