"RegExp DoS issue" 是什么?
What is the "RegExp DoS issue"?
我刚刚在服务器上安装了 nodejs,一个基本的 npm install
显示了很多这样的消息:
$ npm install
npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated graceful-fs@1.2.3: 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 graceful-fs@2.0.3: 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 node-gyp@3.4.0 should be installed with -g
注意右侧显示的消息:
npm WARN ... or higher to avoid a RegExp DoS issue
^^^^^^^^^^^^^^^^^^^^^^^^^^^
在我的本地服务器中,我已经在使用 minimatch 3.0.3。然而,由于服务器没有使用最新版本的节点,这对我来说是新的并开始调查:
此问题已在 npm's github 中报告并在其他问题中提及。一般来说,将 minimatch
的版本升级到至少 3.0.2.
即可解决
但是,我想知道这个 RegExp DoS 问题是什么?是否有任何特定的正则表达式允许通过最小匹配进行 DoS 攻击?我无法想象这是怎么发生的,也不想重现它,但我找不到更多的文档,而且 minimatch's Github list of issues 没有任何痕迹。
来自 releases pages I see the only commit for the 3.0.2 release,其中基本上封装了正则表达式语法(我对 JavaScript 还不够熟悉,无法完全了解所有细节)。
从您 link 到 (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 (_, , ) {
可能是那个被呛到的。
我刚刚在服务器上安装了 nodejs,一个基本的 npm install
显示了很多这样的消息:
$ npm install
npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated graceful-fs@1.2.3: 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 graceful-fs@2.0.3: 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 node-gyp@3.4.0 should be installed with -g
注意右侧显示的消息:
npm WARN ... or higher to avoid a RegExp DoS issue
^^^^^^^^^^^^^^^^^^^^^^^^^^^
在我的本地服务器中,我已经在使用 minimatch 3.0.3。然而,由于服务器没有使用最新版本的节点,这对我来说是新的并开始调查:
此问题已在 npm's github 中报告并在其他问题中提及。一般来说,将 minimatch
的版本升级到至少 3.0.2.
但是,我想知道这个 RegExp DoS 问题是什么?是否有任何特定的正则表达式允许通过最小匹配进行 DoS 攻击?我无法想象这是怎么发生的,也不想重现它,但我找不到更多的文档,而且 minimatch's Github list of issues 没有任何痕迹。
来自 releases pages I see the only commit for the 3.0.2 release,其中基本上封装了正则表达式语法(我对 JavaScript 还不够熟悉,无法完全了解所有细节)。
从您 link 到 (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 (_, , ) {
可能是那个被呛到的。