Skip to main content

Aedes MQTT Broker CVE-2026-63341

HIGH
Uncaught Exception (CWE-248)
2026-10-30 GitHub_M
7.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Connect to broker MQTT listener
  2. Delivery
    Send PUBLISH/SUBSCRIBE (or set Will) with deeply nested topic
  3. Exploit
    qlobber._split_words throws uncaught 'too many words'
  4. Execution
    Exception escapes to Node.js event loop
  5. Impact
    Broker process crashes, all clients dropped until restart

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

The attacker must be able to establish an MQTT session to the broker's listener (default TCP 1883) and then either (a) send a PUBLISH or SUBSCRIBE whose topic exceeds qlobber's hard-coded max_words limit of 100 '/'-separated levels (the PoC uses topics like 'a/' repeated ~30000 times), or (b) register a Will message with such a deeply nested topic, which crashes the broker on ungraceful disconnect because the Will publish path calls broker.publish directly and bypasses the PUBLISH handler. The key LIMITING factor is reachability and authentication: PR:N applies to default/open brokers (e.g. the official moscajs/aedes Docker image, which is unauthenticated), whereas a broker configured to require authentication forces the attacker to hold valid credentials first. All stable versions through 1.1.0 are affected; 1.1.1 rejects over-deep topics via the new maxTopicLevels guard (default 100).

Impact

This is a genuine, easy-to-trigger availability risk rather than a high-CVSS-but-low-real-risk issue. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H = 7.5) is internally consistent with the evidence: a single malformed MQTT packet over the network, with no user interaction and low complexity, crashes the whole broker - the GHSA advisory states the broker 'dies instantly on the very first packet.' Impact is availability-only (C:N/I:N), so this is not a data-breach or RCE issue; it is a service-kill. A complete working Python PoC is published directly in the GitHub Security Advisory, so publicly available exploit code exists, but the vulnerability is NOT listed in CISA KEV and NO EPSS score was provided in the input, so there is no signal of active, widespread exploitation at time of analysis - treat exploitation as feasible and demonstrated, not confirmed in-the-wild. The vuln.today decision label is 'this_week', consistent with a trivially exploitable DoS that is not an emergency-level RCE. One caveat requiring verification: the CVSS carries PR:N (unauthenticated), but the description and PoC note that authentication is 'authenticated or unauthenticated according to broker configuration' - PR:N reflects the default/open deployment (e.g. the official Docker image), while a broker that enforces authentication raises the bar to a client holding valid credentials. SSVC-style automatable judgement: the trigger is a single stateless packet, so exploitation is highly automatable against reachable brokers.

Exploit ScenarioDerived

An attacker who can reach the broker's MQTT listener (default TCP 1883) connects - unauthenticated against a default/open broker such as the official Docker image, or with valid credentials where authentication is enforced - and sends one PUBLISH or SUBSCRIBE whose topic contains tens of thousands of '/' delimiters (or registers a deeply nested Will topic that fires on ungraceful disconnect). A full working Python PoC is published in the GHSA advisory, and the broker crashes on the first packet, disconnecting every legitimate IoT device/application until the process is restarted.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 30, 2026

Remote denial of service in the Aedes MQTT broker through version 1.1.0 lets any client able to open an MQTT session crash the broker process with a single over-deep PUBLISH or SUBSCRIBE topic, or by registering a Will message with such a topic that fires on ungraceful disconnect. The crash comes from a synchronous 'too many words' throw inside the qlobber topic matcher that Aedes does not catch, so it reaches the Node.js event loop and terminates the process, disconnecting every connected client and blocking reconnection until restart. The vendor advisory includes a public proof-of-concept script that reliably kills the official moscajs/aedes Docker image on the first packet; the fix ships in 1.1.1 as a topic-level guard defaulting to 100 levels.

RemediationAI

Upgrade to aedes 1.1.1, which is the vendor-released patch (https://github.com/moscajs/aedes/releases/tag/v1.1.1, commit b9024faa4cb416c4c6980760b4d7f55336315f2d); the fix introduces the maxTopicLevels option, defaults it to 100 levels, and clamps any configured value into the 1-100 range, so do not attempt to raise it above 100 because the bundled mqemitter and aedes-persistence build qlobber with its default max_words of 100 and Aedes cannot increase it. The same guard is applied at the protocol boundary in the SUBSCRIBE, UNSUBSCRIBE and PUBLISH handlers and inside broker.publish/broker.subscribe, which is what closes the Will-message bypass that reached broker.publish directly on ungraceful disconnect. No configuration-only workaround is described in the advisory for pre-1.1.1 releases, and the assessment notes that exposure is governed by listener reachability and authentication: brokers requiring valid MQTT credentials force an attacker to authenticate before reaching the vulnerable code path, while default open listeners such as the official Docker image are reachable unauthenticated, so restricting who can open an MQTT session limits exposure but does not remove the flaw - only the 1.1.1 upgrade does that. Details are in https://github.com/moscajs/aedes/security/advisories/GHSA-xxqp-5qx8-gj5q.

Affects your stack

Find out whether the stacks and servers you run are on an affected version.

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

MQTT topics are '/'-separated hierarchies, and Aedes routes them through mqemitter into qlobber, the wildcard-matching library used for subscription matching; aedes-persistence builds a second qlobber-backed trie. qlobber splits a topic into words on '/' and enforces a hard-coded max_words limit of 100, throwing a synchronous plain Error('too many words') from Qlobber._split_words (lib/qlobber.js:604) once a topic exceeds it. Aedes performed no bound on topic depth or structural complexity, and the calls reaching that throw - Aedes.subscribe via SubState.addSubs in handlers/subscribe.js, and the publishing logic - were never wrapped in try/catch, so per CWE-248 (uncaught exception, with CWE-400 uncontrolled resource consumption also assigned) the exception propagates to the Node.js event loop and kills the whole broker rather than failing a single operation. The Will path is independently reachable: on ungraceful client disconnect the stored Will is republished by calling broker.publish directly, bypassing the PUBLISH protocol handler entirely, so a delivered Will with a deeply nested topic crashes the broker without any subsequent PUBLISH. The 1.1.1 fix adds a maxTopicLevels option (default 100, clamped to the range 1-100 because the bundled mqemitter and aedes-persistence construct qlobber with its default max_words of 100 and Aedes cannot raise it), implements topicLevelCount in lib/utils.js by counting '/' separators, and rejects over-deep topics in validateTopic for SUBSCRIBE/UNSUBSCRIBE, in handlers/publish.js before any ack or persistence side effect, and in broker.publish/broker.subscribe so the Will and programmatic API paths are covered too.

Know when Aedes 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

Vendor (GitHub_M) PRIMARY 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 7.5 HIGH

Single network packet with no interaction crashes the whole broker, so AV:N/AC:L/UI:N and A:H; PR:N reflects the unauthenticated default deployment; no confidentiality/integrity impact.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

DescriptionCVE.org

Aedes is an MQTT broker that can run on any stream server. Prior to 1.1.1, the MQTT broker does not bound topic depth or structural complexity before passing topics through mqemitter into qlobber. A PUBLISH, SUBSCRIBE, or registered Will message containing an excessively deep topic can reach qlobber._split_words in lib/qlobber.js and trigger an uncaught too many words exception. Calls from handlers/subscribe.js and the publishing logic are not protected against that exception, so it escapes to the Node.js event loop and terminates the entire broker. The Will path is independently reachable when a client disconnects ungracefully: it calls broker.publish directly and bypasses the PUBLISH handler. An attacker must be able to establish an MQTT session, authenticated or unauthenticated according to broker configuration. A successful attack disconnects all legitimate clients and prevents reconnection until the broker process restarts. This issue is fixed in version 1.1.1.

Technical POC Analysis

CWE-248 (Uncaught Exception), with the advisory also scoring CWE-400.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

A high-severity vulnerability in the Aedes MQTT broker (versions through 1.1.0) allows any client to crash the broker with a single crafted message, causing service disruption for all connected devices. Organizations using this broker in production, especially for IoT or real-time messaging, face operational downtime until the service is restarted, affecting availability and potentially business continuity.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis; interim mitigations include restricting network access to the MQTT broker, deploying a filtering proxy to block overly deep topic hierarchies, and monitoring for abnormal client disconnections.

Threat Intelligence Overview

EPSS Score
0.4%
Top 70% exploitable
Prevalence
Low
Node.js MQTT broker library for niche IoT/embedded and app-specific deployments
Social Media
2
Sightings
Data Quality
4 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

Affected Products (CPE)CVE.org

cpe:2.3:a:moscajs:aedes:*:*:*:*:*:*:*:*

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy