Uninitialized Memory Exposure Affecting concat-stream package, versions <1.3.2 >=1.4.0 <1.4.11 >=1.5.0 <1.5.2
Threat Intelligence
Do your applications use this vulnerable package?
In a few clicks we can analyze your entire application and see what components are vulnerable in your application, and suggest you quick fixes.
Test your applications- Snyk ID npm:concat-stream:20160901
- published 9 Mar 2017
- disclosed 31 Aug 2016
- credit ChALkeR
How to fix?
Upgrade concat-stream
to version 1.5.2 or higher.
Note This is vulnerable only for Node <=4
Overview
concat-stream
is writable stream that concatenates strings or binary data and calls a callback with the result.
Affected versions of the package are vulnerable to Uninitialized Memory Exposure.
A possible memory disclosure vulnerability exists when a value of type number
is provided to the stringConcat()
method and results in concatenation of uninitialized memory to the stream collection.
This is a result of unobstructed use of the Buffer
constructor, whose insecure default constructor increases the odds of memory leakage.
Details
Constructing a Buffer
class with integer N
creates a Buffer
of length N
with raw (not "zero-ed") memory.
In the following example, the first call would allocate 100 bytes of memory, while the second example will allocate the memory needed for the string "100":
// uninitialized Buffer of length 100
x = new Buffer(100);
// initialized Buffer with value of '100'
x = new Buffer('100');
concat-stream
's stringConcat
function uses the default Buffer
constructor as-is, making it easy to append uninitialized memory to an existing list. If the value of the buffer list is exposed to users, it may expose raw server side memory, potentially holding secrets, private data and code. This is a similar vulnerability to the infamous Heartbleed
flaw in OpenSSL.
You can read more about the insecure Buffer
behavior on our blog.
Similar vulnerabilities were discovered in request, mongoose, ws and sequelize.