事情要从 58 天前说起。当时我在网上看到一段 Cloudflare Worker 代码,功能看起来挺实用,就顺手复制粘贴部署到了自己的 Cloudflare 账户里。
这是第一个错误:我没有仔细审查这段代码,也没有意识到部署 Worker 时可能涉及的权限问题。
Worker 部署本身没问题,问题出在我当时使用的 API 密钥或者部署方式上。攻击者很可能就是通过这个环节拿到了我的 Cloudflare API 凭证,或者在我复制的代码里本身就埋了后门。
最近我在浏览器里查看自己网站主域名的 HTML 源码时,发现了一段可疑的 jаvascript 代码。这段代码会去请求 r2.mydomain.com/__rpc_proxy__,然后从某个区块链合约地址拉取一段 Base64 编码的脚本并执行。
更早之前,我访问这个域名时还遇到过一个假的“Cloudflare 验证码”页面,提示我右键、在终端里粘贴并回车完成验证。我当时照做了——现在回头看,这是典型的 ClickFix 攻击,那个“验证码”是伪造的,目的是让我亲手在电脑上运行恶意命令。
关键线索出现在这里:关闭小黄云(Cloudflare 代理)后,恶意代码消失;开启小黄云后,恶意代码又出现。
这个差异直接排除了源服务器被植入文件的可能。如果源站文件被黑,无论开不开代理,恶意代码都应该存在。但实际情况是“开代理才有”,说明恶意代码是在 Cloudflare 边缘层被注入的。
顺着这条线索,我登录 Cloudflare 后台检查,发现了几个异常:
账户里多了一个叫 my-worker 的 Worker,不是我创建的
这个 Worker 绑定了我的域名路由,会拦截经过的 HTML 响应并注入恶意脚本
审计日志里有被清理过的痕迹,攻击者刻意禁用了部分日志记录
把各个线索拼起来,整个攻击过程大概是这样的:
部署Worker代码:我部署了一段从网上抄来的 Worker 代码。攻击者通过这个环节获取了我的 Cloudflare API 凭证,或者代码本身就有问题。
攻击者利用窃取的凭证,在我的账户里创建了一个名为 my-worker 的恶意 Worker,并把它绑定到我的域名上。
恶意 Worker 拦截经过 Cloudflare 边缘的 HTML 响应,向页面注入一段加载器脚本。
加载器脚本请求 r2.mydoain.com/__rpc_proxy__,从一个区块链合约地址拉取第二阶段恶意代码。
第二阶段代码连接 mytds1029380.com/jsrepo,下载真正的恶意载荷。
攻击者还做了扫尾:清理审计日志、禁用日志记录,尽量不留下痕迹。
至于那个假的 Cloudflare 验证码,是攻击链的另一环,用来诱导我手动在电脑上执行恶意命令。
确认问题出在恶意 Worker 后,处理起来就明确了:
删除恶意 Worker:在 Cloudflare 后台找到 my-worker,直接删除,并移除它绑定的路由。
轮换所有 API 密钥:在 Cloudflare 的 API Tokens 页面,删除所有可疑 Token,重新生成新的密钥,确保旧密钥全部失效。
检查审计日志:翻看账户操作记录,确认没有其他异常操作。
检查电脑安全:因为之前执行过假的验证码操作,我用另一台干净设备修改了重要账号密码,并对电脑做了全盘扫描。最稳妥的做法是备份数据后重装系统。
删除 Worker 后,主域名的恶意代码立刻消失了。开不开小黄云都正常。
这次踩坑之后,我总结了几个必须遵守的原则:
关于 Worker 和第三方代码
不要直接复制网上来路不明的 Worker 代码部署到自己的账户
部署前至少通读一遍代码,确认它没有请求奇怪的域名、没有读写敏感权限
如果代码涉及 API 密钥,务必使用最小权限原则,不要给 Worker 过高的账户权限
关于 Cloudflare 账户安全
定期检查 API Tokens,删除不再使用的、或者权限过大的 Token
开启 Cloudflare 账户的两步验证(2FA)
定期查看审计日志,关注陌生的 Worker 创建、路由修改、Token 生成等操作
如果发现账户里有不认识的 Worker、Pages 项目或路由,立即排查
关于浏览器端的异常
任何要求你“打开终端、粘贴命令、按回车”的验证步骤,都是诈骗
真正的 Cloudflare 验证不会让你去终端里操作
遇到可疑的验证页面,直接关闭,不要按照提示操作
关于网站内容监控
定期用浏览器查看自己网站返回的 HTML 源码,不只看渲染后的页面
如果发现开了代理才有、关了代理就没有的异常代码,优先排查 Cloudflare 边缘层,而不是源服务器
这次问题的根源,是之前那次图方便的代码部署。一个看似不起眼的操作,给了攻击者进入我 Cloudflare 账户的入口。好在最终定位到了恶意 Worker,删除后问题解决。
写这篇记录,一方面是给自己留个教训,另一方面也是提醒看到这篇文章的人:Cloudflare Worker 很强大,但部署前一定要清楚自己在运行什么代码,账户密钥的权限也要收好。 攻击者不一定直接黑你的服务器,他们更倾向于利用你自己账户里的权限,借你的手完成攻击。