MediumGHSA-6fc8-4gx4-v693CVE-2021-32640

ReDoS in Sec-Websocket-Protocol header

Published 28 May 2021 · Updated 8 Jul 2026

Affected packages

wsnpm
Affected
>=7.0.0 <7.4.6
Fixed in
7.4.6
Update to the fixed version for your release line, for example:npm install ws@7.4.6
wsnpm
Affected
>=6.0.0 <6.2.2
Fixed in
6.2.2
Update to the fixed version for your release line, for example:npm install ws@6.2.2
wsnpm
Affected
>=5.0.0 <5.2.3
Fixed in
5.2.3
Update to the fixed version for your release line, for example:npm install ws@5.2.3

Details

Impact

A specially crafted value of the Sec-Websocket-Protocol header can be used to significantly slow down a ws server.

Proof of concept

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);
}

Patches

The vulnerability was fixed in ws@7.4.6 (https://github.com/websockets/ws/commit/00c425ec77993773d823f018f64a5c44e17023ff) and backported to ws@6.2.2 (https://github.com/websockets/ws/commit/78c676d2a1acefbc05292e9f7ea0a9457704bf1b) and ws@5.2.3 (https://github.com/websockets/ws/commit/76d47c1479002022a3e4357b3c9f0e23a68d4cd2).

Workarounds

In vulnerable versions of ws, the issue can be mitigated by reducing the maximum allowed length of the request headers using the `--max-http-header-size=size` and/or the `maxHeaderSize` options.

Credits

The vulnerability was responsibly disclosed along with a fix in private by Robert McLaughlin from University of California, Santa Barbara.

Is GHSA-6fc8-4gx4-v693 in any of your client repos?

Checking one package by hand is fine. Checking it across forty client projects is not. NPMscan reads the lockfiles in every GitHub repo you pick, finds each project with an affected ws, and gives you the command that fixes it.

References

Advisory data from OSV.dev (opens OSV.dev in a new tab), refreshed daily.