
点击蓝字,关注我们

刚摸完鱼就吃大瓜:我没更Axios反而躲过一劫
刚刷到消息的时候我还以为是常用的Excel处理插件被黑了,搞半天是前端圈人尽皆知的Axios,输入法打快了差点给我整懵。 搞JS的谁没跟Axios打过交道?哪怕是我这种半吊子凑前端热闹的后端开发,项目里也常年躺着这个依赖,它每周下载量能冲到1.01亿次,说是JavaScript生态里的顶流包一点都不夸张。至于Fetch和Axios俩API吵了三年的选边站梗,我就不翻旧账了,懂的都懂。 周下载量破1.01亿次的Axios被投毒,堪称今年NPM供应链最致命的安全事件之一 说出来你们可能不信,我这次能躲过中招全靠懒。自己搭的Low Level Academy后台用了Axios,我这半吊子系统管理员大半个月没敢更依赖,就怕更出问题要熬夜修,结果反而没撞上恶意版本,这波属于是摸鱼造福自己了。

投毒全过程拆解:开了2FA的首席维护者怎么就被攻破了
一开始我也纳闷,这么大的项目怎么说被黑就被黑?扒完完整的事件时间线我后背都凉了。 这次中招的是Axios的首席维护者Jason Seaman,人家本身就是安全意识拉满的人,所有账号都开了2FA多因子验证,按道理说账号安全度直接拉满,谁知道还是被攻击者钻了空子。具体入侵时间现在还没查清楚,但可以确定的是,攻击者拿到他的账号权限之后,手动发布了两个带后门的版本:1.1.4标上Latest标签、0.3.4标上Legacy标签,还给这俩版本硬塞了个叫Plain CryptoJS的幽灵依赖。 光看名字你绝对想不到这是个恶意包,它几乎完全抄了正经加密库CryptoJS的代码,只套了个小壳子,背地里藏了post-install脚本,只要你装这个包,脚本就会自动运行。先跟大家说句公道话,post-install本身是NPM的正常特性,很多包要适配本地环境做初始化都会用,问题是这次藏在里面的setup.js根本不是做配置的。 这个恶意脚本会先识别你电脑是Mac、Windows还是Linux,下载对应的恶意载荷跑起来,把你的系统信息、进程列表、文件目录全扫一遍,回传到地址是sfrclock.com的8000端口C2服务器。目前还没看到文件被外传的实锤,大概率是攻击者想先潜伏下来,挑高价值的目标定向偷数据,等合适的时机再动手,典型的分阶段攻击套路。 哪怕开了2FA,早年生成且未吊销的长期NPM令牌,依然能绕过验证直接发布恶意版本,这才是这次事件最吓人的地方 后来安全厂商Step Security扒了发布日志才发现猫腻:正常Axios版本发布都有OIDC绑定的元数据,显示是从GitHub Action跑CI/CD之后自动发的,这俩恶意版本啥元数据都没有,明摆着是拿了早年生成的长期NPM令牌发的。这令牌就像你家大门的备用钥匙,你几年前配了之后扔在朋友家忘了拿回来,别人啥时候想进你家就进,你根本察觉不到。 现在猜测很可能Jason的电脑早就被别的恶意软件入侵过,比如之前的某个投毒包变种,攻击者扫完他的电脑发现居然是Axios的核心维护者,直接把他存的所有凭据全偷走了:NPM令牌、GitHub登录权限、SSH密钥、云厂商API Key甚至浏览器存的密码,拿着这些令牌躺了好久,这次才拿出来搞事。而且很多人不知道,旧版的NPM令牌哪怕是细粒度权限的,也能绕过2FA直接用来发版本,这个坑不知道埋了多少人。

供应链攻击成黑客新宠:核裂变式的传播根本防不住
这次事件最值得警惕的,其实是背后黑客攻击方向的变化,现在供应链攻击已经成了他们的首选路径,性价比高到离谱。 你想啊,现在要打个最新款iPhone的0day漏洞,要绕开应用沙箱、做内核逃逸,没个小团队磨半年根本搞不定,苹果最高赏金也就100万美元,投入产出比太低了。要是挖Chrome、Windows这类系统级漏洞,难度只会更高,现在各种控制流防护、硬件级安全扩展堆得越来越多,普通黑客根本啃不动。 但是搞开源供应链攻击就不一样了,随便黑一个热门包的维护者,往包里塞个后门,只要有人npm install或者pip install就中招,要是中招的人里还有其他热门包的维护者,那恶意代码就顺着依赖链往下传,就跟核裂变似的,一传十十传百,几天就能波及几千万甚至上亿用户,这买卖可比打0day划算多了。 开源生态的依赖链脆弱性已经成为当前软件开发领域最大的安全盲区,攻击成本低、传播速度快,根本不给人反应时间 而且这种攻击你防都不好防,总不能不用开源包所有代码自己写吧?现在前端项目哪个不是node_modules比整个项目代码还大,你总不能一行行检查所有依赖的代码吧?我也不是劝大家别用NPM别用JavaScript,这就是现在软件开发的现实,享受开源带来的效率提升,就得承担对应的安全风险。

别慌!手把手教你排查风险止损
看到这儿大家先别慌,给你们整理好了完整的排查和止损步骤,照着做就行。 首先先查所有项目的依赖锁文件,不管是package-lock.json还是yarn.lock或者pnpm-lock.yaml,先搜Axios的版本号:1.x版本的马上升到1.1.4以上,0.x版本的千万别用0.3.1和0.3.4这两个被污染的版本,赶紧切到0.3.3或者更高的安全版本。 然后查最近的日志:有没有陌生的setup.js脚本运行记录,有没有网络请求连过sfrclock.com的8000端口,有没有异常的进程在扫本地文件,要是用了安全防护软件的,直接搜对应恶意脚本和载荷的hash值就行,网上已经有公开的IOC列表了。要是公司有条件的,最好把最近半个月的构建日志、服务器网络日志全扫一遍,别漏了死角。 哪怕没查到恶意依赖,也建议把所有存储的凭据、API密钥全部轮换一次,把风险掐死在萌芽里 要是实在心里发慌,就把手里所有的凭据全换一遍:NPM令牌、GitHub密钥、云厂商API Key、数据库密码、甚至浏览器存的各类后台登录密码,别嫌麻烦,真出问题的时候损失可比换密码的那点时间成本高多了。

最后碎碎念:我的新播客要上线啦
能看到这儿的绝对是老粉了,跟大家同步个事儿,我最近捣鼓了个新播客叫《The Lowdown》,专门聊这种技术圈的热点大瓜、安全圈的冷知识,还有平时开发踩过的坑、跟产品经理斗智斗勇的日常,下个月就正式上线,想蹲的直接去置顶评论找链接订阅就行。 今天的瓜就唠到这儿,要是觉得内容有用别忘了转发给你身边搞前端、搞Node.js的朋友,说不定能帮他们躲过一劫。咱们下期见。

希望这篇内容能给你带来一点启发和帮助~ 顺手 点赞 收藏,方便之后反复回看;评论区可以说说你想了解的更多干货方向,我会记下来慢慢更~ 也欢迎 转发 给身边有需要的同事 / 朋友,让有用的知识,多一份分享~ #AI安全突围
夜雨聆风