Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessEstablish valid Engine.IO session (EIO=4)
-
DeliverySend upgrade request with mismatched/omitted EIO param
-
ExploitServer attaches transport with inconsistent parser/heartbeat
-
ExecutionSend crafted heartbeat packet
-
PersistUncaught exception crashes Node.js process
-
ImpactDenial of service
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Exception handling completeness
|
| Exploitation Conditions | Exploitable against Engine.IO/Socket.IO servers that ALLOW TRANSPORT UPGRADES (the default), running affected engine.io 6.6.0-6.6.9 on the default v4 protocol. The attacker needs no authentication (PR:N) and no user interaction, but must first complete a normal Engine.IO handshake to obtain a valid session id, then send an upgrade request whose EIO query parameter differs from or omits the session's negotiated revision (an omitted EIO is interpreted as v3 on the upgrade path, so the bug fires even when explicit v3 compatibility/allowEIO3 is disabled). Limiting factors: the vulnerable upgrade path is neutralized if the deployment sets allowUpgrades:false or restricts transports to WebSocket-only, or if a proxy/middleware rejects existing-sid requests with a missing/mismatched EIO parameter; impact is confined to crashing the Node.js worker process, so damage scale depends on process-restart tooling and how many clients share the process. |
| Impact | This is a genuine, credible availability risk despite the absence of exploitation telemetry. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, base 7.5) aligns tightly with the described mechanics: an unauthenticated remote client can establish a normal Engine.IO session and then crash the entire Node.js process by sending a mismatched-protocol upgrade request that triggers an uncaught exception (CWE-248). Confidentiality and integrity are untouched - this is availability-only. No EPSS score, KEV listing, POC, or SSVC decision data were provided, so exploitation status is 'no public exploit identified at time of analysis'; however, the crash path is well-documented in the vendor advisory and the fix commit, and the exploitation primitive (a crafted query parameter plus a heartbeat packet) is low-effort to reverse-engineer from the public patch, so the practical barrier is low. The signals are consistent rather than conflicting: high CVSS is driven purely by A:H reachable pre-auth, which matches the description. The main factor tempering real-world priority is that a single crash affects one process; impact depends on whether the deployment auto-restarts (e.g. PM2/Kubernetes) and how many other clients share that process - a determined attacker can loop the crash to sustain an outage. Overall this is a real priority for any internet-facing Socket.IO/Engine.IO deployment on an affected version, not a paper-high score. |
| Exploit ScenarioDerived | A malicious client opens a legitimate Engine.IO session over HTTP long-polling (negotiating protocol v4), then issues a WebSocket upgrade request to the same session id but with the EIO query parameter changed or omitted, causing the server to attach a transport whose parser/heartbeat behavior mismatches the session. The attacker then sends a crafted heartbeat packet that the mismatched parser mishandles, raising an uncaught exception that terminates the Node.js process and takes down all connections served by it. No public exploit code was identified at time of analysis, but the vendor patch and test case make the trigger straightforward to reconstruct. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 30, 2026
Engine.IO versions 6.6.0 through 6.6.9 (the transport layer underlying Socket.IO servers on Node.js) can be crashed by a remote, unauthenticated attacker who first completes a normal handshake and then sends a transport upgrade request carrying an EIO query parameter that differs from, or omits, the revision negotiated for that session. The mismatched revision causes the server to attach a transport with an inconsistent parser and heartbeat configuration, and a crafted heartbeat packet can raise an uncaught exception that terminates the Node.js process - a pure denial-of-service condition (CVSS 3.1: 7.5, AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, CWE-248). No public exploit identified at time of analysis and no CISA KEV listing; risk is nonetheless genuine because the vulnerable transport-upgrade path is enabled by default and the trigger is trivial once a session id is obtained. Vendor-released patch: engine.io 6.6.10.
RemediationAI
Upgrade to engine.io 6.6.10 or later - the vendor-released patch for this issue (fix commit 86db1fc3db2cd315a065d64c4e48918ccf9b4729, release tagged engine.io@6.6.10 at https://github.com/socketio/socket.io/releases/tag/engine.io%406.6.10; advisory https://github.com/socketio/socket.io/security/advisories/GHSA-2gc4-cqfq-p2gv). If Socket.IO is used directly, bump Socket.IO to a release whose dependency tree resolves engine.io to 6.6.10 or newer and verify with a lockfile audit (npm ls engine.io). Where an immediate upgrade is not possible, disable the vulnerable upgrade path by constructing the server with allowUpgrades: false, or restrict the server to a single transport with transports: ["websocket"] - both eliminate the upgrade request entirely, at the cost of losing the polling-to-WebSocket fallback and potentially breaking clients behind restrictive proxies that require HTTP long-polling. As a secondary mitigation, a reverse proxy or middleware can reject Engine.IO requests that carry an existing sid while omitting EIO or presenting a revision different from the one negotiated at handshake; this only works if the deployment can reliably track the session's negotiated protocol, since the server itself did not validate it before the fix. Because the impact is limited to crashing the Node.js worker process, running under a process supervisor with automatic restart (cluster mode, PM2, systemd, or a container orchestrator) reduces the duration of any successful denial-of-service, though it does not prevent the crash itself.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Engine.IO is the low-level transport abstraction used by Socket.IO, negotiating an initial HTTP polling handshake and then optionally upgrading the connection to WebSocket. During the handshake the protocol revision (EIO=4 for the default v4 protocol, EIO=3 for legacy compatibility) is negotiated and stored on the client session; the faulty code in packages/engine.io/lib/server.ts re-derived the revision from the upgrade request's query string instead of reusing the session's stored value. Because an absent EIO parameter defaults to revision 3, a client could pair a v4 session with a v3 upgrade transport (or vice versa only if allowEIO3 were enabled), producing a parser and heartbeat timer that no longer match the session state. The root cause class is CWE-248, Uncaught Exception: the inconsistent heartbeat handling throws an exception with no handler on the upgrade path, unwinding the Node.js event loop and killing the worker process. The upstream commit (86db1fc3db2cd315a065d64c4e48918ccf9b4729) factors revision computation into a single computeProtocolRevision() helper and rejects upgrades where the computed protocol does not equal the client's stored protocol, returning a 400 with context name PROTOCOL_MISMATCH. Note the nuance called out in the advisory: the bug is reachable on the default v4 deployment even when explicit Engine.IO v3 compatibility (allowEIO3) is disabled, because the omitted-EIO branch still yields v3 on the vulnerable transport path. The affected package is tracked as CPE pkg:npm/engine.io.
Know when Node.js gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Remote, unauthenticated, no user interaction against default config; requires only a normal handshake plus a crafted upgrade/heartbeat, so AC:L; availability-only process crash (A:H), no C/I impact.
Primary rating from Vendor (https://github.com/socketio/socket.io).
CVSS VectorVendor: https://github.com/socketio/socket.io
DescriptionCVE.org
Impact
A denial-of-service vulnerability exists in Engine.IO / Socket.IO servers that allow transport upgrades.
The Engine.IO protocol revision is negotiated during the initial handshake and stored on the session, but a newly-created transport, including a WebSocket upgrade transport, could independently derive a different protocol revision from the upgrade request query parameters. The server did not verify that the protocol revision of an upgrade request matched the protocol revision of the existing session.
A malicious client could exploit this mismatch by establishing a valid Engine.IO session and then sending an upgrade request with a different, or omitted, EIO query parameter. This could cause the server to attach a transport using a parser and heartbeat behavior inconsistent with the session. Under some conditions, a crafted heartbeat packet could trigger an uncaught exception and terminate the Node.js process.
Servers using the default Engine.IO v4 protocol are impacted. The issue can be triggered even when Engine.IO v3 compatibility is disabled, because an omitted EIO parameter is interpreted as protocol v3 on the affected transport path.
The impact is denial of service through process crash.
Affected versions:
engine.io >= 6.6.0, < 6.6.10
Patches
The issue was fixed in:
- engine.io 6.6.10
Users should upgrade to engine.io@6.6.10 or later.
If using Socket.IO packages that depend on Engine.IO, users should update to a Socket.IO release that includes the patched Engine.IO version.
Workarounds
If upgrading is not immediately possible, users can reduce exposure by disabling transport upgrades:
const io = new Server(httpServer, {
allowUpgrades: false
});or by allowing only a single transport, for example WebSocket only:
const io = new Server(httpServer, {
transports: ["websocket"]
});These mitigations avoid the vulnerable upgrade path, but they may affect client compatibility and connection behavior.
As an additional temporary mitigation, deployments may reject Engine.IO requests for an existing sid when the EIO query parameter is missing or does not match the protocol revision used during the initial handshake. This is best done at the application proxy or middleware layer only if the deployment can reliably track the session’s negotiated protocol.
Upgrading remains the recommended fix.
Technical POC Analysis
CWE-248 (Uncaught Exception), per the CVE record.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Engine.IO versions 6.6.0 through 6.6.9, the transport layer powering Socket.IO servers on Node.js, contain a high-severity denial-of-service vulnerability that allows an unauthenticated remote attacker to crash the Node.js process. Organizations relying on real-time communication features-such as chat, live dashboards, or collaborative tools-could experience service outages, disrupting both customer-facing applications and internal operations. A vendor patch is available, making immediate remediation critical to maintain availability and protect business continuity.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
EUVD-2026-100462
GHSA-2gc4-cqfq-p2gv
NVD
CVE.org
EPSS
Exploit-DB