Packages / socket.io / Security
socket.io has an unhandled 'error' event
Affected releases · socket.io
- 4.x4.0.0 – 4.6.1Fixed in 4.6.2
- 3.x3.0.0 – 3.1.2No fix on this line yet
- 2.x2.0.0 – 2.5.0Fixed in 2.5.1
- 1.x and older0.3.8 – 1.7.4No fix, no longer updated
On 4.x, the newest line:
npm install socket.io@4.6.2Every release on a timeline
Affected
4.0.0 – 4.6.1
20 releases
Fixed
4.6.2 – 4.8.4
12 releases, latest
Affected
3.0.0 – 3.1.2
9 releases
Affected
2.0.0 – 2.5.0
12 releases
Fixed
2.5.1
1 release
Affected
1.0.0 – 1.7.4
35 releases
Affected
0.3.8 – 0.9.19
62 releases
What happens
Impact
A specially crafted Socket.IO packet can trigger an uncaught exception on the Socket.IO server, thus killing the Node.js process.
node:events:502
throw err; // Unhandled 'error' event
^
Error [ERR_UNHANDLED_ERROR]: Unhandled error. (undefined)
at new NodeError (node:internal/errors:405:5)
at Socket.emit (node:events:500:17)
at /myapp/node_modules/socket.io/lib/socket.js:531:14
at process.processTicksAndRejections (node:internal/process/task_queues:77:11) {
code: 'ERR_UNHANDLED_ERROR',
context: undefined
}Affected versions
| Version range | Needs minor update? |
|---|---|
4.6.2...latest | Nothing to do |
3.0.0...4.6.1 | Please upgrade to socket.io@4.6.2 (at least) |
2.3.0...2.5.0 | Please upgrade to socket.io@2.5.1 |
Patches
This issue is fixed by 15af22f, included in socket.io@4.6.2 (released in May 2023).
The fix was backported in the 2.x branch today: d30630b
Workarounds
As a workaround for the affected versions of the socket.io package, you can attach a listener for the "error" event:
io.on("connection", (socket) => {
socket.on("error", () => {
// ...
});
});For more information
If you have any questions or comments about this advisory:
Open a discussion here
Thanks a lot to Paul Taylor for the responsible disclosure.
References