我开始习惯于在我的大多数项目中定期检查npm audit
,如果我发现我的某个依赖项存在漏洞,我会尝试为它们修补它(通过拉取请求)或报告问题(通过GitHub问题)
但是我最近安装了一个包,发现了一些非常古怪的行为:
$ > npm install --save fingerprintjs2
+ fingerprintjs2@1.8.0
added 564 packages from 744 contributors and audited 4667 packages in 6.341s
found 9 vulnerabilities (2 low, 5 moderate, 2 high)
run `npm audit fix` to fix them, or `npm audit` for details
$ > npm audit
=== npm audit security report ===
┌──────────────────────────────────────────────────────────────────────────────┐
│ Manual Review │
│ Some vulnerabilities require your attention to resolve │
│ │
│ Visit https://go.npm.me/audit-guide for additional guidance │
└──────────────────────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate │ Out-of-bounds Read │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ stringstream │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=0.0.6 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ fingerprintjs2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ fingerprintjs2 > npm > libcipm > npm-lifecycle > node-gyp > │
│ │ request > stringstream │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/664 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate │ Out-of-bounds Read │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ stringstream │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=0.0.6 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ fingerprintjs2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ fingerprintjs2 > npm > node-gyp > request > stringstream │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/664 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate │ Out-of-bounds Read │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ stringstream │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=0.0.6 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ fingerprintjs2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ fingerprintjs2 > npm > npm-lifecycle > node-gyp > request > │
│ │ stringstream │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/664 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate │ Out-of-bounds Read │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ stringstream │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=0.0.6 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ fingerprintjs2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ fingerprintjs2 > npm > npm-registry-client > request > │
│ │ stringstream │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/664 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate │ Out-of-bounds Read │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ stringstream │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=0.0.6 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ fingerprintjs2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ fingerprintjs2 > npm > request > stringstream │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/664 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High │ Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ http-proxy-agent │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=2.1.0 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ fingerprintjs2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ fingerprintjs2 > npm > npm-profile > make-fetch-happen > │
│ │ http-proxy-agent │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/607 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High │ Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ https-proxy-agent │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=2.2.0 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ fingerprintjs2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ fingerprintjs2 > npm > npm-profile > make-fetch-happen > │
│ │ https-proxy-agent │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/593 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.5 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ fingerprintjs2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ fingerprintjs2 > npm > cli-table2 > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/577 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.5 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ fingerprintjs2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ fingerprintjs2 > npm > npm-audit-report > cli-table2 > │
│ │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/577 │
└───────────────┴──────────────────────────────────────────────────────────────┘
found 9 vulnerabilities (2 low, 5 moderate, 2 high) in 4667 scanned packages
9 vulnerabilities require manual review. See the full report for details.
乍一看,似乎fingerprintjs2
可能有很多不良依赖关系,但仔细观察特定的依赖关系 - 据报道所有漏洞都在npm内部! 即可。更糟糕的是,它们似乎基本上都是相同的3个依赖
字符串流
fingerprintjs2 > npm > libcipm > npm-lifecycle > node-gyp > request > stringstream
fingerprintjs2 > npm > node-gyp > request > stringstream
fingerprintjs2 > npm > npm-lifecycle > node-gyp > request > stringstream
fingerprintjs2 > npm > npm-registry-client > request > stringstream
fingerprintjs2 > npm > request > stringstream
HTTP代理剂
fingerprintjs2 > npm > npm-profile > make-fetch-happen > http-proxy-agent
fingerprintjs2 > npm > npm-profile > make-fetch-happen > https-proxy-agent
lodash
fingerprintjs2 > npm > cli-table2 > lodash
fingerprintjs2 > npm > npm-audit-report > cli-table2 > lodash
我没有从其他软件包的 任何 中获得这种奇怪的行为(我已经安装了vue
,vuex
,{{ 1}},vue-router
,jquery
,bootstrap
,fontawesome
,sha1
,express
,....只需 吨 的东西 - 但我从未见过这个)所以我知道它必须以某种方式与FIngerprintJS相关
查看他们的package.json文件以获取潜在客户,他们实际上有无依赖,并且只有少数devDependencies(所有构建工具):
gulp
我尝试升级NodeJS(现在版本为{
"name": "fingerprintjs2",
"version": "1.8.0",
"description": "Modern & flexible browser fingerprinting library",
"repository": {
"type": "git",
"url": "https://github.com/Valve/fingerprintjs2.git"
},
"keywords": [
"browser",
"identification",
"fingerprint",
"fingerprinting",
"privacy"
],
"author": "Valentin Vasilyev",
"license": "MIT",
"bugs": {
"url": "https://github.com/Valve/fingerprintjs2/issues"
},
"homepage": "https://github.com/Valve/fingerprintjs2",
"main": "dist/fingerprint2.min.js",
"devDependencies": {
"gulp": "^3.9.1",
"gulp-rename": "^1.2.2",
"gulp-standard": "^10.1.1",
"gulp-uglify": "^3.0.0",
"standard": "^10.0.3"
},
"scripts": {
"test": "specs/phantomjs.runner.sh specs/spec_runner.html",
"gulp": "gulp",
"lint": "standard --fix"
},
"standard": {
"ignore": [
"specs/lib",
"specs/phantomjs-testrunner.js"
]
}
}
)和NPM(现在版本为v10.4.0
),但它没有帮助。
我唯一的线索如下:
6.1.0
出于某种原因,即使我安装了$ > npm ls npm
test-audit@1.0.0 /home/sbarnett/src/test-audit
└─┬ fingerprintjs2@1.8.0
└── npm@5.10.0
,FingerprintJS似乎也需要NPM版本5.10.0
。我不知道为什么它需要这个版本,因为在package.json文件中没有提及
无论这个奇怪的错误是什么原因,当我开始一个新项目并安装6.1.0
时,它不再发生 - 所以我相信fingerprintjs2
的一个依赖关系被更新并纠正了问题< / p>