0x00前言
早上看Sec-news安全文摘的时候,发现腾讯安全应急中心发表了一篇文章,Node.js CVE-2017-14849漏洞分析(https://Security . Tencent.com/index . PHP/blog/msg/121),然后就想着重新出现学习一下,这篇文章就产生了。
0x01漏洞介绍
CVE(http://CVE . mitre . org/CGI-bin/CVE name . CGI?名称=CVE-2017-14849)以上描述为:
8.6.0之前的Node.js 8.5.0允许远程攻击者访问非预期的文件,因为对“.”的更改处理与未指定团体模块使用的路径名验证不兼容。
我们能理解的是,node.js 8.5.0和8.6.0之间的版本会造成目录遍历漏洞,读取任意文件,造成该漏洞的原因是“.”的处理与其他模块不兼容。
打个比方,一个人开发这个模块,另一个人开发另一个模块。每个人对待这个东西都不一样,导致漏洞。这里的模块是node.js和express。
影响版本:
node . js 8 . 5 . 0 Express 3 . 19 . 0-3 . 21 . 2 node . js 8 . 5 . 0 Express 4 . 11 . 0-4 . 15 . 5
0x02 node.js是什么
Node.js是一个基于Chrome V8引擎的JavaScript运行时。Node.js使用了一个高效且轻量级的事件驱动非阻塞I/O模型。它的包生态系统npm是目前世界上最大的开源库生态系统。(复制自官网)
0x03 express是什么
Express是一个基于Node.js平台的快速、开放、极简的web开发框架。(也复制自官网)
如何再现0x04
下面用腾讯云开发者实验室搭建一个快速复制的环境。
为复发做准备:
0.腾讯云开发者实验室的一个云主机(我这里用的是ubuntu 16.04 64位作为《基于 Ubuntu 搭建微信小程序服务》的实验主机)
1.node . js 8 . 5 . 0(https://nodejs.org/download/release/v8.5.0/)
2.快车-4 . 15 . 5(https://github.com/expressjs/express/releases)
3.burpsuite
步骤1安装node.js8.5.0
下载node.js 8.5.0安装包
在wget https://nodejs . org/download/release/v 8 . 5 . 0/node-v 8 . 5 . 0-Linux-x64 . tar . gz解压安装包。
tar-zxvf node-v8.5.0-linux-x64.tar.gz被移动到通用软件安装目录/opt
Mv节点-v8.5.0-linux-x64 /opt/将npm和节点命令安装到系统命令
sudoln-s/opt/node-v 8 . 5 . 0-Linux-x64/bin/node/usr/local/bin/node sudoln-s/opt/node-v 8 . 5 . 0-Linux-x64/bin/NPM/usr/local/bin/NPM进行验证
Node -v输出版本号表示配置成功
步骤2快速安装-4.15.5
下载快递-4.15.5
wget https://github.com/expressjs/express/archive/4.15.5.tar.gz解压缩压缩包
tar-zxvf 4.15.5.tar.gz进入快递目录并安装快递
Cd express-4.15.5 npm安装进入目录EXPRESS-4 . 15 . 5/示例/静态文件
通过nodeindex.jsstep3发送有效负载验证。
Payload: /././.a/././././etc/passwd
0x05漏洞的原理分析
为什么有效载荷是这样的?请参考腾讯应急中心的文章(https://security .腾讯.com/index.php/blog/msg/121),非常简洁。
(不仅仅是因为你自己的食物,我无法分析。)
注意:该漏洞基于文件夹由express.static管理的条件,因为在这种情况下,normalize函数将用于路径标准化。(这个发现来自于神P的分析)
例如,代码如下:
app . use(express . static(path . join(_ _ dirname,' static ')));那么有效载荷应该是
/././.a/./././etc/passwd但是如果代码是这样写的:
app.use('/static ',express . static(path . join(_ _ dirname,' static ')));那么有效载荷应该是:
/静态/./.a/./././././etc/passwd0x06 Postscript
再现简单,但分析原理难。至少我还没想明白。当我理解了之后,我会写如何分析和跟踪它。
其实这里有一个很有意思的点,就是一些主要漏洞的追踪。该漏洞的正式发布早在9月份,但这个问题直到最近才得到重视。显然,就连腾讯也没有第一时间追踪到CVE的更新名单。
腾讯发完这篇文章后,God P拿到了重现环境给Vulhub(https://github.com/Vulhub/Vulhub/tree/master/node/CVE-2017-14849),速度惊人。然后发在代码审核,发在微博。那么整个安全圈其实都知道了。
那么我们在这里得出一个结论,如果我们想要得到第一手的漏洞预警和学习,就要时刻关注CVE榜单,努力做第一个吃螃蟹的人。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。