node.js的ws模块存在远程内存泄露漏洞

- AV AC AU C I A
发布: 2025-04-13
修订: 2025-04-13

近日,在允许用户通过简单地发送ping数据帧,来分配内存的ws模块中发现存在着漏洞。该漏洞会拒绝用户发送数据的请求,使用户发送ping数据帧功能失效,在此之前,还会加大数据帧的负载。 实际上,这就是漏洞的具体表现。但在模块中,ws通常将我们所要传入内存的所有数据进行相应的转换,这就是漏洞之所在。我们对所要发送数据的类型都没做任何检查。当你在node.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进程释放的数据页中的数据会被泄漏。...

0%
暂无可用Exp或PoC
当前有0条受影响产品信息