Aedes MQTT Broker Denial of Service (DoS) via Excessive Topic Depth (CVE-2026-63341)
Executive & SecOps Summary
SECOPS ASSESSMENTAll Node.js environments running Aedes MQTT broker versions prior to 1.1.1.
An attacker can trigger an uncaught exception by sending messages with excessively deep topic structures, leading to a complete broker crash.
Immediately update the Aedes package to version 1.1.1 or higher.
Affected Products & Version Scope
Remediation & Live Workaround Commands
PATCH & WORKAROUND1. Package Update
Update the Aedes dependency to the fixed version (1.1.1) using your package manager.
npm update aedes2. Temporary Mitigation
- Process Management: Use a process manager like
PM2or KubernetesLivenessProbesto ensure the broker restarts automatically upon a crash. - Topic Filtering: Implement a custom validation layer in
authorizePublishorauthorizeSubscribeto reject topics exceeding a reasonable depth (e.g., 32 or 64 segments).
// Example validation
const MAX_DEPTH = 50;
if (topic.split('/').length > MAX_DEPTH) {
// Reject the packet
}Scan Your Repositories for Transitive Vulnerable Dependencies in 30 Seconds
Automatically detect vulnerable packages across npm, PyPI, Maven, and Go, and open automated fix Pull Requests without breaking your build.
Technical Root Cause & Exploitation Mechanics
The vulnerability stems from a lack of input validation regarding topic depth before passing data to the underlying qlobber library. When a PUBLISH, SUBSCRIBE, or Will message contains a topic with too many segments, qlobber._split_words in lib/qlobber.js throws a 'too many words' exception. Since Aedes handlers (e.g., handlers/subscribe.js) do not properly catch this exception, it bubbles up to the Node.js event loop, terminating the entire process. The Will message path is particularly dangerous as it can be triggered independently when a client disconnects ungracefully, bypassing standard publish handlers.
Official Vendor Advisories & References
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.
Subscribe to Daily Vulnerability Briefings & KEV Alerts
Concise morning briefings for SecOps, DevSecOps, and SRE teams covering newly exploited CVEs and mitigation priorities.