Uninitialized Memory Exposure

Affecting floody package, versions <0.1.1

Do your applications use this vulnerable package? Test your applications

Overview

floody combines floods of small stream writes while not delaying or buffering writes when not flooded.

A possible memory disclosure vulnerability exists when a value of type number is provided to the write() method and results in the concatenation of uninitialized memory to the buffer 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');

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

PoC by ChALKeR:

var f = require('floody')(process.stdout); f.write(1000); f.stop()

You can read more about the insecure Buffer behavior on our blog.

Similar vulnerabilities were discovered in request, mongoose, ws and sequelize.

Remediation

Upgrade floody to version 0.1.1 or higher. Note This is vulnerable only for Node <=4

References

Github Commit

CVSS Score

5.1
medium severity
  • Attack Vector
    Local
  • Attack Complexity
    High
  • Privileges Required
    None
  • User Interaction
    None
  • Scope
    Unchanged
  • Confidentiality
    High
  • Integrity
    None
  • Availability
    None
CVSS:3.0/AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N/E:F/RL:O/RC:C
Credit
ChALkeR
CWE
CWE-201
Snyk ID
npm:floody:20160115
Disclosed
15 Jan, 2016
Published
21 Jun, 2017