漏洞链大杂烩:postMessage、JSONP、WAF绕过、DOM型XSS、CORS与CSRF的完美风暴

本文详细披露了一个复杂的漏洞攻击链,通过组合利用postMessage监听缺陷、JSONP端点漏洞、WAF绕过技巧、DOM型XSS、宽松CORS配置等技术,最终实现在知名漏洞赏金平台上的CSRF攻击。攻击过程涉及5项关键技术突破,展现了现代Web安全威胁的立体化特征。

TL;DR

数月前在某公开漏洞赏金项目中,作者发现了一个精妙的漏洞链,包含:

  • 不安全的message事件监听
  • 粗糙的JSONP端点
  • WAF绕过技巧
  • 范围外子域的DOM型XSS
  • 过度宽松的CORS配置

这些漏洞最终组合实现了对范围内资产的CSRF攻击。本文将深度剖析这个攻击链的技术细节。

寻找棘手的CSRF漏洞

目标赏金项目的范围仅限于www.redacted.com及其少数子域。当常规测试思路枯竭时,作者注意到inscope.redacted.com等子域会向https://www.redacted.com/api发送包含敏感操作(如更新用户资料)的POST请求。这些请求依赖标记为SameSite=NoneSecuresidcookie进行认证,但作为CSRF防护,端点要求查询参数中包含与会话绑定的csrftoken

宽松的CORS策略突破范围限制

测试发现https://www.redacted.com/profile端点的CORS配置不仅允许https://in-scope.redacted.com,还接受任意redacted.com子域的请求:

1
2
3
4
5
6
$ curl -sD - -o /dev/null \
  -H "Origin: https://whatever.redacted.com" \
  -H "Cookie: sid=xxx-yyy-zzz" \
  https://www.redacted.com/profile
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://whatever.redacted.com

范围外子域的不安全消息监听

使用postMessage-tracker插件发现https://out-of-scope.redacted.com/search存在未做来源检查的message事件监听器,其处理逻辑会:

  1. 解析事件数据为JSON对象
  2. 按点号分割method属性
  3. 递归访问window.APP对象的嵌套属性
  4. 调用最终获得的函数并传入arg参数

粗糙的JSONP端点导致DOM型XSS

window.APP.apiCall函数用于向https://search.redacted.com的JSONP端点发送请求,但存在两个关键问题:

  1. URL构造不安全
  2. 回调参数验证存在缺陷

通过双重URL编码可绕过Akamai WAF防护:

1
GET https://search.redacted.com/&callback=alert%2528%2527xss%2527%2529%252F%252F&output=jsonp HTTP/2

组合利用实现一键CSRF

最终攻击流程:

  1. 诱导用户点击恶意页面按钮
  2. 弹出窗口打开目标页面
  3. 通过postMessage触发JSONP请求
  4. 利用XSS窃取CSRF令牌
  5. 伪造用户资料更新请求

攻击页面核心代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<script>
  function sendMsg() {
    const doubleEncodedPayload = encode(encode(`${payload}//`));
    const msg = {
      'method': 'APP.apiCall',
      'arg': `&callback=${doubleEncodedPayload}&output=jsonp#`
    };
    win.postMessage(JSON.stringify(msg), url.origin);
  }
</script>

后续

虽然漏洞链技术复杂度高(CVSS 7.1 High),但最终仅获得200欧元奖励。这反映出某些赏金项目对复杂攻击链的价值评估可能存在偏差。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计