node.js远程内存泄露漏洞

Posted 黑白之道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js远程内存泄露漏洞相关的知识,希望对你有一定的参考价值。



【新朋友点击标题下面蓝字「黑白之道」关注

老朋友点击右上角,分享或收藏本页精彩内容





实际上,这就是漏洞的具体表现。但在模块中,ws通常将我们所要传入内存的所有数据进行相应的转换,这就是漏洞之所在。我们对所要发送数据的类型都没做任何检查。当你在nide.js中需要存储一个数字时,该漏洞就会自动给数字分配一个存储大量字节的字符串空间,从而加大内存的负载。


var x = new Buffer(100);

// vs

var x = new Buffer('100');

对于只有3个有效字节的数据,系统会分配100字节的存储空间。所以当服务器要接受一个1000字节的ping数据帧时,系统就会在原来未清零的100字节的空间基础上,将剩余的空间分配给1000字节的数据帧使用,这样就会造成数据混乱,从而形成内存存储漏洞。


var ws = require('ws')

var server = new ws.Server({ port: 9000 })

var client = new ws('ws://localhost:9000')

client.on('open', function () {

console.log('open')

client.ping(50) // this makes the server return a non-zeroed buffer of 50 bytes

client.on('pong', function (data) {

console.log('got pong')

console.log(data) // a non-zeroed out allocated buffer returned from the server

 })

})


有两个可以轻微地减轻这一漏洞影响的因素,它们分别是:


  1. 现代的任一操作系统内核在将内存页封装成为进程之前,都会对原来的内存页进行清零,从而为进入内存的新数据提供缓存空间。这就意味着,只有之前使用过的内存页和被node进程释放的数据页中的数据会被泄漏。


 2.node.js通过在JavaScipt中产生一些大的内部缓冲区,并将这些大的缓冲区分为许多较小的可使用缓存块,来管理存储空间。由于 会受到废弃数据的影响,这些缓存块并不存储在V8引擎上。这样做的好处就是,只有那些先前被分配作为缓冲区的内存页的数据才会被泄漏。


  引用:

  https://github.com/websockets/ws/releases/tag/1.0.1

  https://github.com/nodejs/node-v0.x-archive/issues/4525


----------------------------------

要闻、干货、原创、专业
关注“黑白之道” 微信:i77169
华夏黑客同盟我们坚持,自由,免费,共享!


以上是关于node.js远程内存泄露漏洞的主要内容,如果未能解决你的问题,请参考以下文章

node.js内存泄露问题记录

Nginx/OpenResty内存泄露及目录穿越漏洞复现

实验Memcached Server远程代码执行漏洞

Node.js——内存回收问题(转)

pfSense关于处理器Meltdown(熔毁)和Spectre(幽灵)漏洞更新修复的说明

node.js内存泄漏分析二