Skip to main content

Moquette CVE-2026-95842

| EUVDEUVD-2026-85412 HIGH
Uncaught Exception (CWE-248)
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 broker
  2. Delivery
    Select client IDs mapping across event loops
  3. Exploit
    Send MQTT command raising uncaught exception
  4. Execution
    Terminate shared SessionEventLoop thread
  5. Persist
    Repeat across all loops
  6. Impact
    Broker-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.

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

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

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

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

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

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, 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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.4%
Top 71% exploitable
Prevalence
Low
niche lightweight Java MQTT broker, mainly IoT/embedded, 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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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