The Hacker News今天爆出重磅安全事件:热门漏洞扫描器Trivy的npm包被黑客攻陷,短短一天内演变成一场自传播蠕虫攻击,已经波及47个npm包。这次攻击不光偷凭证,还直接把恶意代码变成“病毒”,自动感染下游开发者。
起因还是老问题——凭证泄露。攻击者用偷来的账号发了带后门的trivy、trivy-action和setup-trivy三个包,里面藏着凭证窃取器。安全公司Aikido的Charlie Eriksen把后续追踪扒得一清二楚:黑客疑似TeamPCP团伙,他们没停手,而是把攻击链升级成了自传播模式。
核心武器叫CanisterWorm。名字听着就很Web3,这玩意儿居然把Internet Computer区块链上的ICP canister当死信箱用,拿来存C2地址。这是公开报道里第一次有人这么玩ICP canister做命令控制解析器。去中心化带来的好处显而易见:你想下线它?门都没有。攻击者随时换URL,所有感染机器下次轮询就自动拉新payload,老payload还在后台跑,谁也杀不干净。
感染路径挺阴险。包的postinstall钩子先跑个loader,丢一个Python后门出来。后门每50分钟伪装成浏览器User-Agent去问ICP canister要最新URL。拿到URL后直接拉可执行文件跑。如果URL里带youtube.com,就当休眠状态跳过——这招跟之前Trivy 0.69.4版本的木马一模一样。现在canister返回的还是rickroll视频,明显在憋大招。
持久化更狠。用systemd用户服务伪装成“pgmon”(PostgreSQL监控工具),Restart=always + 5秒延迟重启,杀都杀不掉。被感染的机器只要有npm token,基本跑不掉。
最炸裂的升级发生在@teale.io/eslint-config的1.8.11和1.8.12版本。以前攻击者得手动跑deploy.js脚本,用偷来的token批量发毒包。现在直接把传播逻辑塞进index.js的findNpmTokens()函数。postinstall阶段先装后门,再扫描受害者环境里所有npm token,找到就立刻后台启动deploy.js,自动把当前包的毒版本推到它能控制的所有其他包。
这下彻底变异了。从“黑账号发恶意包”进化成“恶意包反过来黑更多账号再发包”。只要开发者或CI流水线装了这些包,token一暴露,整个供应链就成传染源。下游再装,再暴露,循环往复。Eriksen直言:这才是从单点妥协变成蠕虫级扩散的转折点。
受影响范围已经很吓人:
@EmilGroup scope下28个包 @opengov scope下16个包 单独的三个包:@teale.io/eslint-config、@airtm/uuid-base32、@pypestream/floating-ui-dom
攻击者甚至在某个迭代里先把payload换成“hello123”测试,确保整条链路通畅后再上真家伙。典型的谨慎黑产作风。
当前整个事件还在发展中。ICP canister有get_latest_link、http_request、update_link三个方法,攻击者可以随时改行为。Aikido和The Hacker News都强调,这条链路高度抗拆,短时间内难根除。
加密圈的人看到区块链被这么用,估计心里五味杂陈。BTC现报$70,690(24h -0.19%),ETH现报$2,155(24h +0.31%),大盘晃悠着,供应链安全却炸了新坑。开源包依赖链这么长,一环出问题就是雪崩。开发者现在最该干的事:立刻检查node_modules里有没有这些scope的包,token全换一遍,CI环境也扫干净。别等自己的项目变成下一个传播节点。
黑客已经证明,用区块链做C2死信箱不光可行,还特别难搞。CanisterWorm只是开始,后续迭代估计还会更毒。开源世界从来不缺惊喜,这次算是给所有人上了一课血淋淋的。