magicmirror

A modular interface for smart mirrors.

Known vulnerabilities1
Vulnerable paths1
Dependencies287

Uninitialized Memory Exposure

medium severity
  • Vulnerable module: concat-stream
  • Introduced through: electron@1.6.4

Detailed paths

  • Introduced through: magicmirror@MichMich/MagicMirror#8010e6220d4cc68e9f9e3c1029998cc47df0f193 electron@1.6.4 extract-zip@1.6.0 concat-stream@1.5.0

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 concatination 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.

Remediation

Upgrade concat-stream to version 1.5.2 or higher.

References