Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessConnect anonymously to broker
-
DeliverySelect client IDs mapping across event loops
-
ExploitSend MQTT command raising uncaught exception
-
ExecutionTerminate shared SessionEventLoop thread
-
PersistRepeat across all loops
-
ImpactBroker-wide message processing denial 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 | No special conditions beyond network reachability - remote unauthenticated exploitation works against default configurations of the Moquette broker, which accepts anonymous MQTT clients by default. The attacker only needs to send an MQTT command that raises an uncaught exception on a shared SessionEventLoop; concrete triggers named in the advisory include a malformed $share/grp SUBSCRIBE (StringIndexOutOfBoundsException), a deeply nested topic causing CTrie StackOverflowError, and an ACL NPE via an invalid client ID/filter. The main limiting factor is that impact is availability-only (no data exposure or code execution), and full broker-wide disruption requires selecting client IDs that distribute across all available event loops; deployments that disable anonymous access or restrict network exposure reduce reachability. |
| Impact | This is a genuine availability threat but not a code-execution or data-exposure issue. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H) is internally consistent with the description: fully remote, low-complexity, no authentication (Moquette accepts anonymous clients by default), and impact is confined to availability (VA:H) with no confidentiality or integrity effect - which directly contradicts the input 'Information Disclosure' tag. The 8.7 score is high because CVSS 4.0 weights a network-reachable, unauthenticated, high-availability-impact flaw heavily; the real-world ceiling is a JVM memory-safe denial of service (the advisory explicitly disclaims RCE). No EPSS score is provided and there is no CISA KEV listing, so there is no evidence of widespread or automated exploitation; however, source-only proof-of-concept material and a regression test demonstrating the crash exist, and the trigger inputs (malformed $share SUBSCRIBE, deeply nested topics, ACL NPE) are described as trivially reachable. Net: treat as a real, easy-to-trigger DoS priority for anyone exposing a Moquette broker, but the absence of KEV/EPSS signals means it is not confirmed to be actively or widely exploited. The severity is a legitimate high for availability, not an overstated critical. |
| Exploit ScenarioDerived | An unauthenticated attacker connects to an internet- or network-reachable Moquette broker (anonymous connections allowed by default) and sends a crafted MQTT command - such as a malformed $share/grp SUBSCRIBE or a deeply nested topic - that raises an uncaught Throwable inside a shared SessionEventLoop. Because the loop only catches InterruptedException and is never restarted, that thread wedges, halting PUBLISH/SUBSCRIBE/PUBACK processing for every co-located client; by choosing client IDs that hash across all loops the attacker can take down the entire broker. Source-level proof-of-concept and a demonstrating unit test exist, though no networked weaponized exploit or active exploitation is reported. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 23, 2026
Denial of service in the Moquette lightweight Java MQTT broker prior to 0.18.1: a single remote, unauthenticated MQTT client can terminate a shared SessionEventLoop with a command that raises an uncaught exception, and because SessionEventLoopGroup never restarts a dead loop, every other client session pinned to that loop stops processing PUBLISH, SUBSCRIBE, PUBACK and related commands. Because Moquette accepts anonymous MQTT clients by default and the CVSS vector (PR:N) confirms no authentication is required, an attacker who chooses client IDs that distribute across the broker's available loops can progressively disable session processing broker-wide; impact is availability-only (C:N/I:N/A:H, no code execution or data exposure), and the upstream advisory documents concrete trigger inputs such as a malformed $share/grp SUBSCRIBE, a deeply nested topic, and an ACL NPE. No public exploit tooling was identified at time of analysis, and the issue is fixed in 0.18.1.
RemediationAI
Upgrade to Moquette 0.18.1 (Maven io.moquette:moquette-broker:0.18.1), which is the vendor-released patch - vendor advisory: https://github.com/moquette-io/moquette/security/advisories/GHSA-5f42-97gr-vfhq; fix PR: https://github.com/moquette-io/moquette/pull/957; commit: https://github.com/moquette-io/moquette/commit/86feb7c31e6fac849c465d8079d08c0e7ef01cdf; release: https://github.com/moquette-io/moquette/releases/tag/v0.18.1; a companion PR (https://github.com/moquette-io/moquette/pull/958) is also listed among the patch references. Where immediate upgrade is not possible, compensating controls are limited because the crash occurs inside the broker's own command loop rather than at a configurable boundary: set allow_anonymous=false and require client credentials, which reduces reachability to authenticated clients but does not eliminate the issue since any valid client can still send a malformed command; restrict the MQTT listener (TCP 1883/8883) to known client networks via firewall or security-group rules, with the trade-off that this is ineffective against a compromised or allow-listed client and is impractical for public IoT brokers; and monitor broker logs for the 'SessionEventLoop ... caught an unhandled error while processing a command' style failure or for dead loop threads and automate a broker restart, accepting that this only shortens each outage window and an attacker can repeat the trigger to force restart cycling. None of these workarounds address the ACL wildcard injection, Will-message authorization bypass, or cross-session durable corruption fixed in the same 0.18.1 release, so patching remains the only complete remediation.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in maven, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Moquette is a lightweight MQTT 3.1.1 broker written in Java (Maven artifact io.moquette:moquette-broker) that uses a Netty-style concurrency model: a fixed set of SessionEventLoop threads, each multiplexing many client sessions, with SessionEventLoopGroup assigning sessions to loops. The defect is classified as CWE-248 (Uncaught Exception): SessionEventLoop.run() wraps its command-processing loop in a try/catch that handles only InterruptedException, so any other Throwable escaping a command handler unwinds the thread and kills the loop, while SessionEventLoopGroup contains no supervision or restart logic. Triggers named in the upstream analysis are reachable from ordinary MQTT traffic: SharedSubscriptionUtils.extractShareName raises StringIndexOutOfBoundsException on a malformed $share/grp SUBSCRIBE, recursive traversal of the CTrie topic structure raises StackOverflowError on a deeply nested topic, and a NullPointerException surfaces in Topic.match (Topic.java:173) via an invalid ACL filter. The upstream fix (PR 957) widens the handler to catch Throwable and log it - the FutureTask already captured the failure for the submitter - so co-located sessions survive one failing command; the accompanying test verifies a subsequent command bound to the same loop still executes. Because the JVM is memory-safe, the ceiling here is availability loss (and, per the broader GHSA, ACL/authorization bypass and cross-session integrity issues), not remote code execution; no CPE version detail beyond the wildcard cpe:2.3:a:moquette-io:moquette:* is provided, so all releases before 0.18.1 should be treated as affected.
Know when Moquette 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Remote, low-complexity, unauthenticated (anonymous default) trigger of an uncaught exception; impact is availability-only within the same broker authority, so S:U and C:N/I:N/A:H.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Moquette is a lightweight Java MQTT broker. Prior to 0.18.1, SessionEventLoop.run catches only InterruptedException, and SessionEventLoopGroup does not restart a terminated loop. An MQTT command that raises an uncaught exception can terminate an event loop shared by multiple client sessions, preventing every co-located client from processing PUBLISH, SUBSCRIBE, PUBACK, and other commands. An attacker can select client IDs that map across the available loops to disrupt session processing for the entire broker. This issue is fixed in version 0.18.1.
Technical POC Analysis
Evidence note: the supplied advisory (GHSA-5f42-97gr-vfhq) is a composite carrying CVE-2026-85724 and lists several issues; the DoS described here is the advisory's "High" crash-whole-broker item.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A high-severity flaw in the Moquette lightweight Java MQTT broker allows any anonymous network client to permanently stall message processing for large groups of connected devices, with no credential or exploit tooling required. Because a single dead session loop is never restarted, an attacker can progressively knock out broker-wide PUBLISH and SUBSCRIBE handling, disrupting every IoT, telemetry, or messaging workload that depends on that broker. Leadership should treat this as a service-continuity risk to MQTT-dependent operations rather than a data-breach risk, since confidentiality and integrity are unaffected.
Apply vendor patch (upgrade to Moquette 0.18.1). Where upgrade cannot be completed immediately, disable anonymous MQTT access by enforcing authentication, restrict broker listeners to trusted network segments, cap per-client connection and topic-nesting limits at the edge, and monitor for session-loop degradation so affected brokers can be restarted quickly.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Moquette MQTT brokers running versions prior to 0.18.1 fail to enforce topic write ACLs on Last Will and Testament messa
Moquette MQTT brokers prior to 0.18.1 can start up with authentication and authorization silently disabled whenever a co
Durable MQTT sessions in Moquette 0.18.0 and earlier can corrupt each other's persisted queues when a client connects wi
Remote, pre-authentication denial of service in the Moquette MQTT broker (moquette-io moquette-broker) through 0.18.0 al
Unbounded per-session message queuing in Moquette MQTT Broker before 0.18.1 permits remote unauthenticated clients to ex
Remote unauthenticated clients can crash a Moquette MQTT broker running 0.18.0 or earlier by publishing or subscribing w
Unauthorized message injection in the Moquette lightweight Java MQTT broker affects all releases prior to 0.18.1: PostOf
EUVD-2026-85412
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB