axios遭恶意攻击:两个版本被植入后门,开发者需立即检查

更新日期: 2026-04-04 阅读: 32 标签: axios

axios这次是真的出事了。

就在3月31号凌晨,这个全世界开发者都在用的网络请求库,被人动了手脚。攻击者拿到了axios维护者的npm账号,直接往里面塞了两个恶意版本,分别是1.14.1和0.30.4。


攻击是怎么一步步发生的

整个过程是这样的。

攻击者在3月30号就开始准备了。他们先用一个叫nrwise的账号,往npm上发布了一个看起来人畜无害的包,叫plain-crypto-js@4.2.0。这是个空壳子,没有任何恶意代码,就是为了让这个包在npm上有个发布记录,后面再发恶意版本的时候不会显得太突然。

过了18个小时,到了3月30号半夜,攻击者又发了plain-crypto-js@4.2.1。这个版本就有问题了,里面藏了一个会在安装时自动执行的恶意脚本。

然后就是关键的一步。

3月31号凌晨0点21分,攻击者用盗来的维护者账号,直接通过npm命令行发布了axios@1.14.1。39分钟后又发了axios@0.30.4。

这两个版本表面上看跟正常的axios没区别,代码也没被改过。唯一的变化,就是在package.json里多加了一行依赖,指向那个plain-crypto-js@4.2.1。

就是这么一个小小的改动,出了问题。

开发者只要在自己的项目里执行npm install,或者项目里用的是^1.14.0这种写法,就会自动把1.14.1这个恶意版本拉下来。一安装,plain-crypto-js那个包里的后安装脚本就会自动执行。


恶意脚本干了什么

这个脚本会干几件事。

它会先看看你的电脑是什么系统。Windows、macOS还是Linux,它都认得。然后它会连到一个叫sfrclak.com的服务器上,从那里下载一个远程控制木马。

  • Windows上的木马会把PowerShell改名藏到ProgramData目录下,伪装成Windows Terminal的样子,然后写一个注册表项,保证每次开机都会自动连回黑客的服务器

  • macOS上的木马会藏到/Library/Caches/com.apple.act.mond这个路径,名字起得跟苹果系统文件似的,一般人根本看不出来

  • Linux上的木马比较简单,直接放在/tmp/ld.py那里

这个木马一旦跑起来,每60秒就会给黑客发一次消息。电脑的主机名、用户名、装了啥系统、开了哪些进程、连了哪些盘,这些信息都会被发走。黑客还能远程下命令,在这台电脑上执行任意的代码,或者往里面再塞别的恶意程序。

更隐蔽的是,这个恶意脚本跑完之后会把自己删了,还会把package.json换成一个干净的版本。等你事后去查,node_modules里什么都看不出来,只有安装日志里还能找到点痕迹。


npm的反应和影响范围

好在npm反应还算快。这两个恶意版本在npm上只挂了大概3个小时,就被下架了。但就是这3个小时,已经有大约3%的axios用户把这些恶意版本装上了。考虑到axios每周下载量有一亿次左右,这个数字不小。


谁干的

安全公司那边查下来,说是朝鲜的黑客组织干的,代号叫UNC1069。这个组织以前就专门搞供应链攻击,主要是为了偷加密货币。但这次他们把目标对准了开发者,可能是想顺着开发者的电脑再往更深的地方渗透。

这次攻击之所以能成,是因为那个被黑的维护者账号里还留着一个长期有效的npm token。虽然项目本身已经配了GitHub的OIDC可信发布流程,但只要token还在,npm就会优先用token来认证,直接绕过了那些安全设置。

攻击者把维护者的邮箱改成了ifstap@proton.me,然后直接通过npm命令行把包发了出去。整个过程跟项目的GitHub仓库没有任何关系,所以GitHub那边根本不会有任何记录。


现在该怎么办

如果你或者你的团队用的是axios,现在需要做几件事。

1. 检查版本

看看项目里有没有axios@1.14.1或者axios@0.30.4这两个版本。

用这个命令就能看到:

bash
npm list axios

或者查看package.json里的版本号。

2. 如果装到了恶意版本怎么办

如果你发现项目里有这两个版本,需要做这几步:

  • 立即断网,防止木马继续和黑客服务器通信

  • 用杀毒软件全盘扫描,重点检查上面说的那几个路径

  • 轮换所有重要的密码和密钥(特别是npm、GitHub、云服务的token)

  • 把axios降级到安全版本:1.13.2或更早的版本

3. 长期防护建议

  • 不要在项目里使用^或~这种模糊版本号,直接写死具体版本

  • 考虑用npm的package-lock.json锁定所有依赖的精确版本

  • 有条件的话,在公司内部搭一个私有npm镜像,自己审核所有包的上线

  • 定期检查npm token的有效期,及时清理不用的token


总结

这次axios被攻击的事件,再次提醒了供应链安全的重要性。一个维护者的账号被黑,就能影响到全世界几百万个项目。

对于开发者来说,能做的就是提高警惕,尽量锁定依赖版本,定期检查安全公告。npm官方也需要重新审视token认证的优先级问题,避免类似的绕过高等级安全设置的情况再次发生。

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/13584

相关推荐

axios常见传参方式_axios中get/post/put/patch请求

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。axios中get/post/put/patch请求。传参格式为 formData ,传参格式为 query 形式 ,传参格式为 raw等

axios的特点与使用_解决处理axios兼容性问题

axios基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 node.js 中使用。项目中发现,在安卓4.3及以下的手机不支持axios的使用,主要就是无法使用promise。加上以下polyfill就可以了。

vue中axios的使用与封装

分享下我自己的axios封装,axios是个很好用的插件,都是一些params对象,所以很方便做一些统一处理。当然首先是npm安装axios 很简单。在src下新建文件夹 service / index.js,接着上代码

axios处理Http请求的基本使用方法总汇

axios的功能特性:在浏览器中发送 XMLHttpRequests 请求,在 node.js 中发送 http请求,支持 Promise API,拦截请求和响应,转换请求和响应数据,自动转换 JSON 数据,客户端支持保护安全免受 XSRF 攻击

vue axios不缓存get请求(防止返回304不更新数据)

最近做项目遇到一款浏览器,由于缓存了get请求,导致不管如何刷新,数据都不更新的问题。以下分享一下解决办法:解决思路就是给每一条get请求增加一个timestamp的参数,value为时间戳

axios-mock-adapter_一个axios调试好用的工具

axios-mock-adapter可以用来拦截http请求,并模拟响应,使用起来也很简单,比如你想模拟下服务器返回个500错误,什么404找不到、403禁止访问、500服务器错误、503服务不可用、504网关超时等等,你都能模拟出来

Vue+Typescript中在Vue上挂载axios使用时报错

在vue项目开发过程中,为了方便在各个组件中调用axios,我们通常会在入口文件将axios挂载到vue原型身上,如下:这样的话,我们在各个组件中进行请求时

Vue项目中使用Axios封装http请求

使用axios可以统一做请求响应拦截,例如请求响应时我们拦截响应信息,判断状态码,从而弹出报错信息。请求超时的时候断开请求,还可以很方便地使用then或者catch来处理请求。

vue中axios请求的封装

发送请求模块目录,@/api/url中存放的是每个模块的URL,使用webpack提供的require.context将src/api/url下后缀为js的所有文件引入,并整理出一个对象。整合common.js & product.js,最终得到的对象如下:

使用axios请求,前端数字long类型精度问题解决方法

后台数据库定义的bigint类型(对应Long)的值太长会导致传递给前端的时候精度丢失,其原因是后端语言和js对字节码的解析长度不一样。前端js对Long类型支持的精度不够,导致后端使用的Long传到前端丢失精度。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!