Moquette is a lightweight Java MQTT broker. Prior to 0.18.1, when pattern-based ACL rules are configured, AuthorizationsCollector.canDoOperation substitutes client ID and username values directly into rules containing %c or %u and then treats the result as an MQTT topic filter. A client that uses + or # in either identity can broaden the substituted filter and gain cross-tenant read and write access. A # identity can also produce an invalid filter that triggers a NullPointerException in Topic.match and disrupts session processing. This issue is fixed in version 0.18.1.
{
"cna_assigner": "GitHub_M",
"cwe_ids": [
"CWE-155",
"CWE-863"
],
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/85xxx/CVE-2026-85724.json"
}{
"cpe": "cpe:2.3:a:moquette:moquette:*:*:*:*:*:*:*:*",
"extracted_events": [
{
"introduced": "0"
},
{
"fixed": "0.18.1"
}
],
"source": [
"CPE_RANGE",
"REFERENCES"
]
}
"https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2026-85724.json"
[
{
"deprecated": false,
"digest": {
"function_hash": "269180878684028958057482685079324653907",
"length": 665
},
"id": "CVE-2026-85724-2617fa0f",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/moquette-io/moquette/commit/b4a98bb3f3425ece476ed073aa080c627c1239af",
"target": {
"file": "broker/src/main/java/io/moquette/broker/security/AuthorizationsCollector.java",
"function": "canDoOperation"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"146723529666818269005525026885854492949",
"78740541475288257772251903445712881844",
"58497300178204072490764963317319399709",
"80926390165758371002872336894721456795",
"250073199230157587689868727767617437011",
"121110560608509694834736544497174883831",
"147789047307011195578423652881166664603",
"76146791607541996755890788610387322561",
"151995414082502180367401151876526258620",
"314969683416092103583416804682353801633",
"80383474661021697751492471343546808612",
"17623425134024995364258901604421458770",
"193262608935336785088001289137364822697",
"223806271234802523021061016499458327744",
"211471839537277107047721905629066937899",
"50315392668686842175158022192326523453",
"106587876177938024023046406589839938123"
],
"threshold": 0.9
},
"id": "CVE-2026-85724-68afd567",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/moquette-io/moquette/commit/b4a98bb3f3425ece476ed073aa080c627c1239af",
"target": {
"file": "broker/src/main/java/io/moquette/broker/security/AuthorizationsCollector.java"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"264460424198365981025294149882277014898",
"11410191927348774178838709852851310256",
"273802157253247414129958982189405529275",
"315296026132642631038163665576809441438"
],
"threshold": 0.9
},
"id": "CVE-2026-85724-dd85d397",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/moquette-io/moquette/commit/e8ce83336acce69d8e9c11c98805217aa156a16b",
"target": {
"file": "broker/src/main/java/io/moquette/broker/Server.java"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"328374551104237904931968267836206710181",
"210219106386364814821012441869475736087"
],
"threshold": 0.9
},
"id": "CVE-2026-85724-dfbb4853",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/moquette-io/moquette/commit/b4a98bb3f3425ece476ed073aa080c627c1239af",
"target": {
"file": "broker/src/test/java/io/moquette/broker/security/AuthorizationsCollectorTest.java"
}
}
]
"2026-09-27T08:01:30Z"