我是如何绕过Uber的CSP防御成功XSS的?
字数 1330 2025-08-18 11:37:41

绕过Uber的CSP防御实现XSS攻击的技术分析

漏洞背景

本案例研究了一个在Uber合作伙伴子域(partners.uber.com)上发现的XSS漏洞,攻击者成功绕过了严格的内容安全策略(CSP)防御机制。

初始发现

开放重定向的起点

  • 最初发现的可疑URL:https://partners.uber.com/carrier-discounts/att/redirect?href=http://www.wireless.att.com/
  • 确认存在开放重定向漏洞,但Uber不认为这是严重问题
  • 一周后该漏洞被修复,重定向功能被限制到固定目标

邀请链接分析

  • Uber常见邀请链接格式:https://www.uber.com/a/join?exp_hvp=1&invite_code=bq6ew1w9ue
  • 合作伙伴域上的类似链接:https://partners.uber.com/p3/referrals/ms?i=bq6ew1w9ue
  • 通过Google dork发现带额外参数的变体:https://partners.uber.com/p3/referrals/ms?i=bq6ew1w9ue&m=ANNIVERSARY&v=1

XSS注入尝试

参数测试

  • 测试"v"参数(表示司机工作年限)的XSS可能性
  • 注入payload:">
  • 结果:payload未被过滤但未执行,因为有CSP保护

CSP分析

Uber的CSP策略关键部分(script-src部分):

script-src 'self' 'unsafe-inline' 'nonce-9f4b94bf-a195-4d8c-b474-879ae6d1d471' 
'self' 'unsafe-inline' 
https://pullo.uberinternal.com 
https://apis.google.com 
https://www.google.com 
https://d1a3f4spazzrp4.cloudfront.net 
https://*.uber.com 
https://rules.quantcount.com 
https://www.google-analytics.com 
https://ssl.google-analytics.com 
https://d3i4yxtzktqr9n.cloudfront.net 
https://d1a3f4spazzrp4.cloudfront.net;

CSP绕过技术

关键发现

  • CSP白名单中包含https://*.uber.com,这意味着任何uber.com子域都被信任
  • 发现mkto.uber.com子域(Marketo营销自动化平台)
  • 该子域重定向到https://app-ab19.marketo.com/index.php

利用方法

构造包含回调函数的JSONP端点:

https://partners.uber.com/p3/referrals/ms?i=bq6ew1w9ue&m=ANNIVERSARY&v=1"><script src="https://mkto.uber.com/index.php/form/getKnownLead?callback=alert(document.domain);"></script>

漏洞利用链

  1. 发现未过滤的HTML注入点(v参数)
  2. 分析CSP策略,识别白名单中的潜在危险域
  3. 找到白名单域中可接受回调函数的JSONP端点
  4. 构造恶意脚本引用,通过回调函数执行任意代码

时间线

  • 2018.8.3 提交漏洞报告
  • 2018.8.7 状态改为"Triaged"
  • 2018.8.27 漏洞修复
  • 2018.8.30 获得$2,000奖励

经验总结

  1. 常见URL也可能存在漏洞:不要因为URL看起来很常见或官方就假设它安全

  2. 研究他人技术文章:参考其他研究人员的成果(如"DOM XSS - auth.uber.com"博客)可以提供绕过思路

  3. 持续探索:当一条路被堵死时,尝试其他方法(从开放重定向转向XSS)

  4. CSP绕过技巧

    • 仔细分析CSP白名单
    • 寻找白名单域中的JSONP端点
    • 利用回调函数执行恶意代码
  5. 工具使用

    • Google dorking发现隐藏参数和端点
    • Virustotal用于发现子域信息

防御建议

  1. 避免使用过于宽泛的CSP白名单(如*.domain.com
  2. 对所有用户输入进行严格的输出编码
  3. 禁用不必要的JSONP端点或实施严格的来源验证
  4. 定期审计第三方集成和子域的安全性
  5. 实施子域隔离策略,限制各子域间的权限
绕过Uber的CSP防御实现XSS攻击的技术分析 漏洞背景 本案例研究了一个在Uber合作伙伴子域(partners.uber.com)上发现的XSS漏洞,攻击者成功绕过了严格的内容安全策略(CSP)防御机制。 初始发现 开放重定向的起点 最初发现的可疑URL: https://partners.uber.com/carrier-discounts/att/redirect?href=http://www.wireless.att.com/ 确认存在开放重定向漏洞,但Uber不认为这是严重问题 一周后该漏洞被修复,重定向功能被限制到固定目标 邀请链接分析 Uber常见邀请链接格式: https://www.uber.com/a/join?exp_hvp=1&invite_code=bq6ew1w9ue 合作伙伴域上的类似链接: https://partners.uber.com/p3/referrals/ms?i=bq6ew1w9ue 通过Google dork发现带额外参数的变体: https://partners.uber.com/p3/referrals/ms?i=bq6ew1w9ue&m=ANNIVERSARY&v=1 XSS注入尝试 参数测试 测试"v"参数(表示司机工作年限)的XSS可能性 注入payload: "> 结果:payload未被过滤但未执行,因为有CSP保护 CSP分析 Uber的CSP策略关键部分(script-src部分): CSP绕过技术 关键发现 CSP白名单中包含 https://*.uber.com ,这意味着任何uber.com子域都被信任 发现 mkto.uber.com 子域(Marketo营销自动化平台) 该子域重定向到 https://app-ab19.marketo.com/index.php 利用方法 构造包含回调函数的JSONP端点: 漏洞利用链 发现未过滤的HTML注入点(v参数) 分析CSP策略,识别白名单中的潜在危险域 找到白名单域中可接受回调函数的JSONP端点 构造恶意脚本引用,通过回调函数执行任意代码 时间线 2018.8.3 提交漏洞报告 2018.8.7 状态改为"Triaged" 2018.8.27 漏洞修复 2018.8.30 获得$2,000奖励 经验总结 常见URL也可能存在漏洞 :不要因为URL看起来很常见或官方就假设它安全 研究他人技术文章 :参考其他研究人员的成果(如"DOM XSS - auth.uber.com"博客)可以提供绕过思路 持续探索 :当一条路被堵死时,尝试其他方法(从开放重定向转向XSS) CSP绕过技巧 : 仔细分析CSP白名单 寻找白名单域中的JSONP端点 利用回调函数执行恶意代码 工具使用 : Google dorking发现隐藏参数和端点 Virustotal用于发现子域信息 防御建议 避免使用过于宽泛的CSP白名单(如 *.domain.com ) 对所有用户输入进行严格的输出编码 禁用不必要的JSONP端点或实施严格的来源验证 定期审计第三方集成和子域的安全性 实施子域隔离策略,限制各子域间的权限