Skip to main content

Moquette EUVDEUVD-2026-85413

| CVE-2026-95843 HIGH
Improper Input Validation (CWE-20)
2026-09-23 GitHub_M
8.7
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Connect anonymously to MQTT broker
  2. Delivery
    Send SUBSCRIBE with '$share/grp' filter
  3. Exploit
    Trigger StringIndexOutOfBoundsException in extractShareName
  4. Execution
    Uncaught exception wedges session event loop
  5. Impact
    Deny 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – 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

moquette < 0.18.1

Affected Packages

maven io.moquette:moquette-broker fix: 0.18.1
euvd moquette fix: 0.18.1

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

Vendor (GitHub_M) PRIMARY 8.7 HIGH
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
vuln.today AI 7.5 HIGH

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.

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
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 23, 2026 - 18:17 EUVD
CVE Published
Sep 23, 2026 - 16:29 cve.org
HIGH 8.7

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.4%
Top 71% exploitable
Prevalence
Low
niche lightweight open-source Java MQTT broker, limited enterprise footprint
Data Quality
6 sources
Confidence: High

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 Yes
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
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

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

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