我刚刚在服务器上安装了nodejs,基本的npm install
显示了很多类似这样的消息:
$ npm install
npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated [email protected]: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.
npm WARN deprecated [email protected]: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.
npm WARN prefer global [email protected] should be installed with -g
请注意该消息显示在右侧:
npm WARN ... or higher to avoid a RegExp DoS issue
^^^^^^^^^^^^^^^^^^^^^^^^^^^
在我的本地服务器上,我已经在使用minimatch 3.0.3。但是,由于服务器未使用最新版本的 Node ,因此这对我来说是新手,因此开始进行调查:
此问题已在npm's github中报告,并在其他问题中提到了此问题。通常,可以通过将
minimatch
的版本升级到至少3.0.2来解决该问题。但是,我想知道这是RegExp DoS问题吗?是否有任何允许通过minimatch进行DoS攻击的正则表达式?我无法想象这会如何发生,并且不想重现它,但是我找不到更多文档,而且minimatch's Github list of issues没有任何痕迹。
从releases pages中,我看到the only commit for the 3.0.2 release,其中基本上封装了regex语法(我对JavaScript不够熟悉,无法将其全部跟随到最后一个小细节)。
最佳答案
从提交中,您链接到(https://github.com/isaacs/minimatch/commit/6944abf9e0694bd22fd9dad293faa40c2bc8a955):
提交中添加的测试使正则表达式如下所示:
var exploit = '!(' + genstr(1024 * 15, '\\') + 'A)'
那就是创建一个以
'!('
开头的字符串,然后是1024 * 15份\
副本,然后是'A)'
。那一定是DoS条件。这条线
tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) {
可能是令人窒息的那个。