我爱编程

Node.js 反序列化远程代码执行漏洞(CVE-2017-59

2017-03-29  本文已影响0人  陌小皓

2 月 10 日,Node.js 曝存在反序列化远程代码执行漏洞。漏洞 CVE 编号 CVE-2017-5941。攻击者利用此漏洞通过构造 Payload 对服务器进行远程攻击,从而获得服务器权限。

漏洞复现.jpg

Node.js 是一个 Javascript 运行环境 (runtime)。实际上它是对 Google V8 引擎进行了封装。V8 引擎执行 Javascript 的速度非常快,性能非常好。Node.js 对一些特殊用例进行了优化,提供了替代的 API,使得 V8 在非浏览器环境下运行得更好。


漏洞原理:

Node.js 的 node-serialize 库中存在一个漏洞,该漏洞通过传输 JavaScript IIFE,利用恶意代码(未信任数据)达到反序列化远程任意代码执行的效果。

下面我们在本地搭建服务器进行原理演示:

1、在 Ubuntu14.04 安装 Node.js,Node.js 版本 6.9.5 。

Node.js 版本 6.9.5

2、创建以下 JavaScript 对象,将其传入 serialize() 函数:

创建JavaScript 对象

3、输出结果如下:

输出结果

4、serialize() 序列化的字符串,可以用 unserialize() 函数进行反序列化操作。在之前序列化的字符串中函数体后面加上 "()",并传入 unserialize() 函数,就可以成功触发代码执行:

反序列化操作触发代码执行

5、执行结果如下:(ls 为例)

代码执行ls

6、执行结果如下:(ifconfig 为例)

代码执行ifconfig
友情提示:

(1)修改 /node_modules/node-serialize/lib/serialize.js 中的 FUNCFLAG 值为随机值并保证该值不被泄漏。
(2)确保 Serialize 字符串仅内部发送。
(3)使用公钥(RAS)加密 Serialize 字符串,确保字符串不被篡改。


参考链接:
https://www.exploit-db.com/docs/41289.pdf
https://github.com/luin/serialize

上一篇下一篇

猜你喜欢

热点阅读