宝哥软件园

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

编辑:宝哥软件园 来源:互联网 时间:2021-09-03

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榜单,努力做第一个吃螃蟹的人。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+