Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessConnect anonymously to MQTT broker
-
DeliverySend SUBSCRIBE with '$share/grp' filter
-
ExploitTrigger StringIndexOutOfBoundsException in extractShareName
-
ExecutionUncaught exception wedges session event loop
-
ImpactDeny service to co-located client sessions
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
|
| Exploitation Conditions | No special conditions beyond network reachability - Moquette accepts anonymous MQTT clients by default, so a remote unauthenticated attacker can send the malformed '$share/grp' SUBSCRIBE (a shared-subscription filter lacking the '/{topicFilter}' part) against a default configuration. Exploitation does not require the target to have any shared-subscription feature pre-configured; the crash occurs during parsing of the attacker-supplied filter. The primary limiting factor is broker exposure: the impact scales with how many other client sessions are assigned to the same shared session event loop, and the DoS affects those co-located sessions rather than necessarily every session on a large multi-loop deployment. Fixed in 0.18.1. |
| Impact | This is a genuine remote, pre-authentication denial-of-service against the Moquette MQTT broker. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) is internally consistent with the description: any anonymous MQTT client (Moquette accepts anonymous connections by default) can send a single malformed SUBSCRIBE and trigger the fault, with no privileges, no user interaction, and low complexity. The impact metrics correctly capture a pure availability issue (VC:N/VI:N/VA:H) - there is no confidentiality or integrity impact from THIS specific flaw, so the score of 8.7 rests entirely on availability. The GHSA advisory explains WHY the DoS is severe: SessionEventLoop catches only InterruptedException and is never restarted, so the uncaught StringIndexOutOfBoundsException wedges every client session co-located on that event loop, not just the attacker's. No EPSS score or CISA KEV entry is present in the input, so there is no evidence of active exploitation or widespread automated scanning; however, the trigger is trivial and source-level PoCs are published in the advisory. The 'Information Disclosure' tag in the input is contradicted by the CVSS impact metrics (VC:N) and the description - this is availability-only, and the tag should be disregarded. Overall this is a real, easy-to-trigger DoS worth prompt patching for internet-exposed brokers, though the affected product's niche footprint tempers absolute urgency. |
| Exploit ScenarioDerived | An unauthenticated attacker connects to an exposed Moquette broker (anonymous connections are the default) and sends a SUBSCRIBE packet containing the malformed shared-subscription filter '$share/grp' with no topic-filter portion. SharedSubscriptionUtils.extractShareName evaluates substring(7,-1), throwing StringIndexOutOfBoundsException on the shared session event loop, which is never restarted and thereby denies service to all other client sessions assigned to that loop. Source-level PoCs for the vulnerability cluster are published in the GHSA advisory and a regression unit test accompanies the fix, making reproduction trivial. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 23, 2026
Remote, pre-authentication denial of service in the Moquette MQTT broker (moquette-io moquette-broker) through 0.18.0 allows any client able to reach the MQTT listener to wedge the broker's session event loop by sending a malformed shared-subscription filter such as '$share/grp' that omits the '/{topicFilter}' portion. Because the exception is thrown while building the subscription and the SessionEventLoop only catches InterruptedException and is never restarted, command handling on that loop stops and every other client session assigned to the same loop is denied service; the network vector is unauthenticated (CVSS 4.0 AV:N/AC:L/PR:N/UI:N with VA:H, score 8.7; vendor-assessed CVSS 3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H). Moquette accepts anonymous MQTT clients by default and the target does not need shared subscriptions pre-configured for the crash to occur, so exploitation requires only network reachability; publicly available exploit code exists in the form of source-level proof-of-concept tests published with the advisory, but there is no indication of active exploitation (not in CISA KEV).
RemediationAI
Vendor-released patch: 0.18.1 - upgrade the moquette-broker artifact to 0.18.1 or later, which adds SharedSubscriptionUtils.isValidSharedSubscription so that a malformed filter such as '$share/grp' is detected before extractShareName can evaluate substring(7, -1) and results in a protocol disconnect instead of a loop-killing exception (see GHSA-5f42-97gr-vfhq and the v0.18.1 release notes). Because the same 0.18.1 release also fixes the pattern-ACL wildcard-injection bypass, the Will-message authorization bypass, and the H2PersistentQueue client-id collision, upgrading is strongly preferred for multi-tenant deployments. If upgrading is not immediately possible, the compensating controls that actually reduce risk here are: (1) disable anonymous access (set allow_anonymous=false and configure an authenticator/authorizator class) so only trusted clients can send the crafted SUBSCRIBE - the trade-off is that this breaks anonymous clients and, per the fail-open behavior in Server.java:483-531, a mis-loaded auth class silently degrades to PermitAll, so verify the class loads; (2) restrict network reachability to the MQTT listener (1883/8883, and any WebSocket listener) to trusted networks or a broker-aware proxy that can parse MQTT payloads and drop SUBSCRIBE packets whose topic filter starts with '$share/' and lacks a second '/', accepting the added latency and proxy maintenance cost; (3) avoid pattern-based ACLs that substitute %c or %u until patched, since the related ACL issue is exploitable through the same interface. Raising the number of session event loops only shrinks the per-loop blast radius and is not a fix, because a killed loop is never restarted; continuous health supervision with process restart remains the only way to recover a broker whose loop has already been wedged. No vendor-released patch exists for any version below 0.18.1, and no patch-backport data was provided for older release lines.
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
MQTT shared subscriptions use the reserved form $share/{shareName}/{topicFilter}, in which the share name identifies a load-balancing group and the trailing element is an ordinary topic filter. Moquette's SharedSubscriptionUtils.splitShareName/extractShareName helpers assume both delimiters are present: they locate the first '/' after the '$share/' prefix (offset 7) and derive the share name and topic-filter parts by substring, so a filter parsed before validation mirrors the CWE-20 improper-input-validation class flagged for this CVE. In the vulnerable code path, PostOffice.subscribe first called extractShareName on client-supplied filters and only afterwards ran validateShareName, meaning a value like '$share/grp' (no second delimiter) drove substring(7, -1) and threw StringIndexOutOfBoundsException. The exception propagated out of the MQTT command handler and killed the SessionEventLoop, which catches only InterruptedException and, per SessionEventLoopGroup, is not restarted - so all sessions pinned to that loop stall, producing the availability-only impact reflected in both CVSS vectors (C:N/I:N/A:H). The fix in 0.18.1 (PR #962, commit affdc71) reverses the order of operations: a new isValidSharedSubscription check confirms that a '/' follows the share name, that the share name is well-formed (no '+', '#', or empty value), and that the topic-filter part is non-empty and rejects the packet per MQTT-4.13.1-1 / MQTT-4.8.2 before any parsing occurs. It is worth noting that this CVE is one item in a broader GHSA-5f42-97gr-vfhq cluster affecting the same commit range: pattern-ACL wildcard injection via unvalidated clientId/username substituted into %c/%u rules (cross-tenant read and write), an NPE in the ACL sink for malformed filters, a Last-Will authorization bypass in PostOffice.publishWill, cross-session durable corruption when a client id collides with an H2PersistentQueue metadata key, unbounded interceptor/subscription state enabling OOM or disk exhaustion, and fail-open behavior when an authenticator or authorizator class fails to load. The supplied tags label this issue 'Information Disclosure', which does not match the assessed vector - the confirmed impact is denial of service, not confidentiality loss.
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 unauthenticated single-packet trigger (AV:N/AC:L/PR:N/UI:N); pure availability loss for co-located sessions (A:H, C/I:N); same broker authority so S:U.
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, PostOffice.subscribe parses a shared-subscription filter through SharedSubscriptionUtils.extractShareName before validating the complete $share/{shareName}/{topicFilter} structure. A remote client can send a filter such as $share/grp without a topic-filter portion, causing a StringIndexOutOfBoundsException while calculating the share name. The exception terminates command handling on the shared session event loop and can deny service to other client sessions assigned to that loop. This issue is fixed in version 0.18.1.
Technical POC Analysis
Evidence note: the supplied material is the parent advisory GHSA-5f42-97gr-vfhq (moquette-io/moquette, package maven io.moquette:moquette-broker, affected <= 0.18.0, patched 0.18.1/0.19.0, audited at…
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Organizations running Moquette MQTT broker version 0.18.0 or earlier face a high-severity, unauthenticated remote denial-of-service vulnerability (CVE-2026-95843) that allows any attacker with network reachability to permanently disable the broker's session processing with a single malformed subscription packet. Because Moquette is commonly used for IoT, telemetry, and real-time messaging, a successful attack can halt critical device communications and command channels until manual restart, directly impacting operational availability. With publicly available exploit code and no vendor patch, leadership should prioritize immediate network containment and migration planning to avoid extended outages.
No vendor-released patch identified at time of analysis. Interim mitigations include: restricting network access to the MQTT listener strictly to trusted IPs; disabling anonymous client access; deploying network segmentation; using an IPS or reverse proxy to reject malformed '$share/' subscription filters that omit the '/{topicFilter}' portion; and implementing automated broker restart on failure. Long-term, migrate to an unaffected MQTT broker.
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
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
Denial of service in the Moquette lightweight Java MQTT broker prior to 0.18.1: a single remote, unauthenticated MQTT cl
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-85413
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB