漏洞描述
此漏洞是Node.js和Express共同导致的一个通用漏洞,Node.js官网于9月29号公开,对应的CVE编号为CVE-2017-14849
漏洞原理
关于Node,js
Node.js是一个Javascript运行环境(runtime),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。
关于Express
Express 是一个简洁而灵活的 node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用。Express 不对 node.js 已有的特性进行二次抽象,我们只是在它之上扩展了Web应用所需的功能。丰富的HTTP工具以及来自Connect框架的中间件随取随用,创建强健、友好的API变得快速又简单。
漏洞影响
Node.js 8.5.0 + Express 3.19.0-3.21.2
Node.js 8.5.0 + Express 4.11.0-4.15.5
漏洞复现
环境搭建:
node.js 8.5.0 (https://nodejs.org/download/release/v8.5.0/)
express-4.15.5 (https://github.com/expressjs/express/releases)
下载到CentOS中,并解压
安装node.js
配置环境变量
vim /etc/profile
#nodejs export NODE_HOME=/opt/Demo/node-v8.5.0-linux-x64 export PATH=$PATH:$NODE_HOME/bin
source /etc/profile
node.js安装完成。
安装express
进入expresss-4.15.5目录下执行
npm install
运行expresss
node index.js
环境搭建完成。
访问http://192.168.1.123:3000/
利用
参考
https://nodejs.org/en/blog/vulnerability/september-2017-path-validation/
https://github.com/nodejs/node/commit/b98e8d995efb426bbdee56ce503017bdcbbc6332#diff-c0fae59301ef49fb71b43278db9ad881
https://github.com/nodejs/node/commit/cfee1c977867defa2866eebb23a9fabec4003f52#diff-c0fae59301ef49fb71b43278db9ad881
https://github.com/pillarjs/send/commit/a472ed304701ef2c091ce4dddb89bdddfccc98da#diff-168726dbe96b3ce427e7fedce31bb0bc
https://security.tencent.com/index.php/blog/msg/121
http://www.jb51.net/article/127896.htm