[緊急] SAML認証ライブラリsamlifyにXMLインジェクション脆弱性(CVE-2026-46490)が発覚
はじめに:SAML認証と本脆弱性の概要
こんにちは、日本のフロントエンドエンジニアの皆さん。今回は、SAML (Security Assertion Markup Language) 認証を実装する際に用いられるライブラリ「samlify」において発見された、深刻度の高いXMLインジェクション脆弱性 (GHSA-34r5-q4jw-r36m / CVE-2026-46490) について解説します。SAMLはシングルサインオン (SSO) の実現によく利用され、多くの企業システムやWebサービスで採用されています。この脆弱性は、IdP (Identity Provider) 側でSAMLアサーションを生成するプロセスに潜んでおり、最悪の場合、一般ユーザーが管理者権限を不正に取得し、システムが乗っ取られる重大なリスクを抱えています。直接的にフロントエンドのコードに関わる脆弱性ではありませんが、SAML認証を利用するシステムに関わる全てのエンジニア、特にフロントエンド側でユーザー入力を扱う方は、その仕組みと影響を理解しておくことが非常に重要です。
脆弱性 GHSA-34r5-q4jw-r36m / CVE-2026-46490 の詳細
この脆弱性は、`samlify`ライブラリがSAMLアサーション内の`<saml:AttributeValue>`要素にユーザーが入力したデータを挿入する際に、XML特殊文字(`&` `<` `>` `"` `'`)を適切にエスケープしないことが原因で発生します。通常、XML属性値として挿入されるデータはエスケープされますが、要素のテキスト内容として挿入される場合にはその処理が漏れていました。これにより、悪意のあるユーザーは、自身の属性値に不正なXMLマークアップを埋め込むことが可能になります。
具体的な攻撃手法と影響:特権昇格のシナリオ
攻撃者は、例えば自分のメールアドレスなどの属性値として、以下のような文字列を登録します。
`user@example.com</saml:AttributeValue><saml:Attribute Name="role"><saml:AttributeValue>admin</saml:AttributeValue></saml:Attribute>`
この不正な値が`samlify`によってSAMLアサーションの`<saml:AttributeValue>`内にそのまま挿入されると、SAML XMLは意図せず以下のように解釈されます。
```xml <saml:Attribute> <saml:AttributeValue>user@example.com</saml:AttributeValue> <saml:Attribute Name="role"> <saml:AttributeValue>admin</saml:AttributeValue> </saml:Attribute> </saml:Attribute> ```
重要なのは、この改ざんされたSAMLアサーション全体が、正規のIdPによってデジタル署名されてしまう点です。結果として、SP (Service Provider) は、この署名を見て「信頼できるIdPから発行された正規のアサーションである」と判断し、注入された不正な属性(この例では `role=admin`)をそのまま受け入れてしまいます。これにより、一般ユーザーが管理者権限などの高い権限を不正に取得する「特権昇格」が引き起こされ、システムの認可ロジックをバイパスされてしまう可能性があるのです。
フロントエンドエンジニアが考慮すべき点
この脆弱性は`samlify`というバックエンドライブラリに起因するものですが、フロントエンドエンジニアも無関係ではありません。ユーザーが入力するデータが最終的にSAMLアサーションに利用される可能性があるため、以下の点を考慮してください。
<ul><li>**入力値の品質:** フロントエンドでユーザーからの入力(例: 氏名、メールアドレスなど)を受け取る際、基本的なバリデーションを行うことは重要ですが、セキュリティ上の観点からは、最終的なサニタイズ(無害化)と厳格な検証は必ずサーバーサイドで行われるべきです。</li><li>**SAML属性の利用:** もしフロントエンドアプリケーションが、SAML認証を通じてSPから受け取ったユーザーのロールや権限情報(SAML属性)に基づいてUIの表示や機能の有効/無効を切り替えている場合、その属性値の信頼性について再確認が必要です。この脆弱性によって改ざんされた属性が渡される可能性を念頭に置くべきです。</li></ul>
推奨される対策
この重大な脆弱性に対処するためには、以下の対策を速やかに実行してください。
<ul><li>**1. samlifyライブラリのアップデート(最優先):** 最も重要な対策は、`samlify`ライブラリをXMLインジェクションの修正が施された最新バージョンに速やかにアップデートすることです。これにより、要素テキストのエスケープが適切に行われるようになります。</li><li>**2. 入力値の厳格な検証とサニタイズ:** `samlify`を使用しているアプリケーションでは、SAMLアサーションに埋め込むユーザー入力値に対して、XML特殊文字のサニタイズや、想定されるフォーマットに合致しているかの厳格な検証を**サーバーサイドで**必ず実施してください。これは防御の多層化の観点からも非常に重要です。</li><li>**3. 認可ロジックの見直し:** SP側でSAMLアサーションからパースされた属性を認可(アクセス制御)に利用している場合、その属性値が本当に信頼できるものか、最小限の権限付与原則(Principle of Least Privilege)に基づいて慎重に評価するように認可ロジックを見直すことを検討してください。特に、システム内で重要な権限に関わる属性は、より厳重なチェックが必要です。</li></ul>
まとめ
SAML認証は複雑な仕組みを持つため、その実装には細心の注意が必要です。今回の`samlify`の脆弱性は、XMLの基本的な安全な取り扱いがどれほど重要であるかを改めて示しています。フロントエンドエンジニアの皆さんも、バックエンドのセキュリティ脆弱性がどのようにシステム全体、ひいてはユーザー体験に影響を及ぼすかを理解し、安全なシステム開発に貢献していきましょう。この情報が皆さんのセキュリティ対策の一助となれば幸いです。