NanoMQ is an MQTT broker. Prior to 0.24.14, the NanoMQ client function nni_mqtt_msg_decode_unsubscribe() in nng/src/supplemental/mqtt/mqtt_codec.c does not handle a failed read_uint16() while counting topics in a malformed UNSUBSCRIBE packet. A zero-length topic followed by trailing data can leave buf.curpos unchanged while topic_count continues to increase, allowing a malicious MQTT broker to hang a connecting MQTT 3.1.1 client, consume CPU and memory, and repeatedly deny service when automatic reconnection is enabled. The broker-side nmq_unsubinfo_decode path is not affected. This issue is fixed in version 0.24.14.
{
"cna_assigner": "GitHub_M",
"cwe_ids": [
"CWE-835"
],
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/61xxx/CVE-2026-61633.json"
}"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-61633.json"
[
{
"deprecated": false,
"digest": {
"function_hash": "88348002674658074348822203479023842368",
"length": 2560
},
"id": "CVE-2026-61633-143cbea7",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/nanomq/nanonng/commit/fa8d859bb39841e46cfc6cce280d242bd782ad3d",
"target": {
"file": "src/supplemental/mqtt/mqtt_codec.c",
"function": "property_parse"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"134183472054008959164910560082872290903",
"135218529836465988249126530173685715886",
"312632104218168491738907891875122949290",
"308436005444356819026494529717080274974",
"106553580121658145421047228981759758797",
"135218529836465988249126530173685715886",
"312632104218168491738907891875122949290",
"308436005444356819026494529717080274974",
"134183472054008959164910560082872290903",
"135218529836465988249126530173685715886",
"239740223537228919441959631622390010066",
"38279030566472781949455962562476214335",
"134183472054008959164910560082872290903",
"135218529836465988249126530173685715886",
"239740223537228919441959631622390010066",
"38279030566472781949455962562476214335",
"274319222470889704285877280499113142434",
"225383562553691437300533446637280837722",
"10516642643065539460561719685955809564",
"16440798690770997445309382729206171889"
],
"threshold": 0.9
},
"id": "CVE-2026-61633-325c82b6",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/nanomq/nanonng/commit/fa8d859bb39841e46cfc6cce280d242bd782ad3d",
"target": {
"file": "src/supplemental/mqtt/mqtt_codec.c"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "70070237621829764289480800297382599647",
"length": 1221
},
"id": "CVE-2026-61633-4b861460",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/nanomq/nanonng/commit/fa8d859bb39841e46cfc6cce280d242bd782ad3d",
"target": {
"file": "src/supplemental/mqtt/mqtt_codec.c",
"function": "nni_mqtt_msg_decode_unsubscribe"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "111289307452485218761891371005179732598",
"length": 1160
},
"id": "CVE-2026-61633-4de9126b",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/nanomq/nanonng/commit/fa8d859bb39841e46cfc6cce280d242bd782ad3d",
"target": {
"file": "src/supplemental/mqtt/mqtt_codec.c",
"function": "nni_mqtt_msg_decode_subscribe"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "66300308770052318231294513144508137013",
"length": 1578
},
"id": "CVE-2026-61633-65c87e24",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/nanomq/nanonng/commit/fa8d859bb39841e46cfc6cce280d242bd782ad3d",
"target": {
"file": "src/supplemental/mqtt/mqtt_codec.c",
"function": "nni_mqttv5_msg_decode_subscribe"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "187575605547041575479112779187467724183",
"length": 1408
},
"id": "CVE-2026-61633-df2dad94",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/nanomq/nanonng/commit/fa8d859bb39841e46cfc6cce280d242bd782ad3d",
"target": {
"file": "src/supplemental/mqtt/mqtt_codec.c",
"function": "nni_mqttv5_msg_decode_unsubscribe"
}
}
]
"2026-09-20T14:24:20Z"