Private Data Disclosure

Affecting express-restify-mongoose package, versions < 2.5.0 || >= 3.0.0 <3.1.0

Report new vulnerabilities
Do your applications use this vulnerable package? Test your applications

Overview

express-restify-mongoose is a module to easily create a flexible REST interface for mongoose models.

It supports marking certain fields as private, to keep from exposing them to users, but fails to remove those fields from certain output scenarios, resulting in potential private data exposure.

For instance, if you have the following User model:

const User = mongoose.model('User', new mongoose.Schema({
    name: String,
    password: String,
}));

To keep from exposing the password, you'll likely to want to call it out as a private field like so:

restify.serve(router, User, {
    private: ['password'],
})

This will indeed result in the password field not showing when you request an item, for instance via GET /User or GET /User/some-id.

However, when querying on that field, using GET /User?distinct=password, ALL passwords for ALL the users in the DB would be shown.

Remediation

Update to version 3.1.0 or newer on the 3.x branch, or to version 2.5.0 or newer on the 2.x branch.

References

CVSS Score

8.2
high severity
  • Attack Vector
    Network
  • Attack Complexity
    Low
  • Privileges Required
    None
  • User Interaction
    None
  • Scope
    Unchanged
  • Confidentiality
    High
  • Integrity
    Low
  • Availability
    None
CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N
Credit
Stefan Mirea
CVE
CVE-2016-10533
CWE
CWE-200
Snyk ID
npm:express-restify-mongoose:20160419
Disclosed
19 Apr, 2016
Published
22 Jun, 2016