关于npm:uaparserjs漏洞引发的思考

36次阅读

共计 1534 个字符,预计需要花费 4 分钟才能阅读完成。

原文:https://mp.weixin.qq.com/s?__…
微信公众号: 毛毛虫的小小蜡笔

最近跟敌人闲聊,聊起之前呈现的 npm 包破绽,导致能够在终端上进行投毒攻打、挖矿以及窃取明码。
所以这里再次讲下相干问题。

ua-parse-js 破绽呈现和解决

收到各个群的音讯以及邮件告诉

破绽和问题,如下截图所示:

前面看到 npm 上也有阐明,把有问题的版本以及打补丁的版本都列出来,高深莫测。
如下截图所示:

疾速解决问题

首先须要晓得本人的我的项目,是否有援用 ua-parser-js 包。

步骤:
1、查看我的项目的根目录下的 package.json。
一眼看完,是没有援用的。

2、查看 node_modules 目录下的依赖包。
搜寻了下,发现还真有。
如下截图所示:

那是不是就慌了?
其实不必,不论是否有问题,都是要解决的。

尽管能搜到有援用,但还须要进一步看看是哪个包援用,怎么援用。

查看了代码的援用关系链,具体如下所示:
steam-http 依赖 ua-parser-js
node-libs-browser 依赖 steam-http
eslint-import-resolver-webpack 依赖 node-libs-browser
@vue/eslint-config-standard 依赖 eslint-import-resolver-webpack

也就是 steam-http 这个包依赖了 ua-parser-js,但其版本不是有问题的版本。
而且是在 devDependencies 中援用的,那必定不会在打包后的代码外面了。

3、通过 npm list xxx 查看
的确是没有装置 ua-parse-js 的。
如下截图所示:

stream-http 的依赖跟下面搜寻进去的差不多,也是没有援用 ua-parser-js 的。
如下截图所示:

也能够通过 npm list –all,查看我的项目下的所有包依赖状况。
拷贝到文本中,全局搜寻后,是找不到 ua-parse-js 的。
如下截图所示:

另外,也能够通过上面两种办法来查看

1、通过查看 yarn.lock 文件
也是没看到 ua-parser-js 的。

而且 stream-http 下也没有 ua-parsre-js。
如下截图所示:

2、通过 grep 命令来查看
grep -rnw . -e 'ua-parser-js' --include={yarn.lock,package-lock.json,package.json}

那这个 steam-http 为啥会援用 ua-parser-js 呢?

通过在 stream-http 代码搜寻,发现 ua-parser-js 是在 stream-http 的 test 目录下的,node_modules 目录下是没有的。
如下截图所示:

这个 test 文件夹是依赖包做测试用的。不会被引入到依赖 stream-http 的我的项目中。

其余

版本号后面的 ^

尽管当初没援用 ua-parse-js,但假如援用了,但援用的版本不是有问题的版本,而是 ^0.7.18 版本,那会不会有问题呢?

还是有问题的,尽管以后的版本不受影响,但一旦降级,就会更新到 0.7.29 版本,而这个版本是有问题的,所以降级的时候要指定版本号。

然而 npm 官网曾经去掉了有问题的版本,所以更新后只能到 0.7.30 版本,也就是不会降级到有问题的版本了。

ua-parser-js 破绽是如何执行恶意代码的?

是因为 package.json 外面的 scripts 字段。在 npm install 的时候,会执行一段 payload。

npm install 是有生命周期的。也执行的之前,会先执行什么,执行之后继续执行什么命令。

比照下有问题的代码,就一清二楚了。
如下截图所示:

最初

  • 公众号《毛毛虫的小小蜡笔》

有疑难和问题,请留言。

如果感觉文章还能够,请点赞或珍藏,谢谢。

正文完
 0