CVE-2026-54412 (GCVE-0-2026-54412)

Vulnerability from cvelistv5 – Published: 2026-06-14 17:26 – Updated: 2026-11-05 12:44
VLAI
Title
MQTT-C Heap Out-of-Bounds Read and Integer Underflow in mqtt_unpack_publish_response()
Summary
LiamBindle MQTT-C versions prior to 1.1.7 contain a heap-based out-of-bounds read and integer underflow in the mqtt_unpack_publish_response() function in src/mqtt.c. A remote unauthenticated attacker controlling an MQTT broker, or capable of injecting MQTT traffic into an unencrypted session, can crash a subscribed MQTT-C client and potentially disclose adjacent heap memory by sending a single crafted PUBLISH packet.
SSVC
Exploitation: none Automatable: yes Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-06-15 17:01 UTC
CWE
  • CWE-125 - Out-of-bounds Read
  • CWE-191 - Integer Underflow (Wrap or Wraparound)
Assigner
TuranSec CNA
Impacted products
Vendor Product Version
LiamBindle MQTT-C Affected: 0 , < 1.1.7 (semver)
Unaffected: 1.1.7 (semver)
Create a notification for this product.
Date Public
2026-06-14 17:26
Show details on NVD website

{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2026-54412",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "yes"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-06-15T17:01:08.771614Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-06-15T17:01:16.924Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "collectionURL": "https://github.com/LiamBindle/MQTT-C",
          "defaultStatus": "unknown",
          "product": "MQTT-C",
          "programFiles": [
            "src/mqtt.c"
          ],
          "programRoutines": [
            {
              "name": "mqtt_unpack_publish_response"
            }
          ],
          "repo": "https://github.com/LiamBindle/MQTT-C",
          "vendor": "LiamBindle",
          "versions": [
            {
              "lessThan": "1.1.7",
              "status": "affected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "status": "unaffected",
              "version": "1.1.7",
              "versionType": "semver"
            }
          ]
        }
      ],
      "credits": [
        {
          "lang": "en",
          "type": "finder",
          "value": "Saidakbarxon Maxsudxonov"
        }
      ],
      "datePublic": "2026-06-14T17:26:00.000Z",
      "descriptions": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eLiamBindle MQTT-C versions prior to 1.1.7 contain a heap-based out-of-bounds read and integer underflow in the mqtt_unpack_publish_response() function in src/mqtt.c. A remote unauthenticated attacker controlling an MQTT broker, or capable of injecting MQTT traffic into an unencrypted session, can crash a subscribed MQTT-C client and potentially disclose adjacent heap memory by sending a single crafted PUBLISH packet.\u003c/p\u003e"
            }
          ],
          "value": "LiamBindle MQTT-C versions prior to 1.1.7 contain a heap-based out-of-bounds read and integer underflow in the mqtt_unpack_publish_response() function in src/mqtt.c. A remote unauthenticated attacker controlling an MQTT broker, or capable of injecting MQTT traffic into an unencrypted session, can crash a subscribed MQTT-C client and potentially disclose adjacent heap memory by sending a single crafted PUBLISH packet."
        }
      ],
      "impacts": [
        {
          "descriptions": [
            {
              "lang": "en",
              "value": "A remote attacker controlling an MQTT broker, or able to inject one PUBLISH packet into an unencrypted MQTT session to which a victim has subscribed, can crash a subscribed MQTT-C client by sending a crafted PUBLISH packet whose topic_name_size exceeds the remaining_length field. The vulnerable client advances the parse pointer into unmapped heap memory, causing an out-of-bounds read that may expose adjacent heap bytes. It then calculates application_message_size using unsigned subtraction, causing an integer underflow to a value near 2^32, and passes that value to memmove(), crashing the process. IoT and embedded devices using MQTT-C with shared, untrusted, or compromised brokers are exposed to unauthenticated denial of service."
            }
          ]
        }
      ],
      "metrics": [
        {
          "cvssV4_0": {
            "Automatable": "YES",
            "Recovery": "NOT_DEFINED",
            "Safety": "NOT_DEFINED",
            "attackComplexity": "LOW",
            "attackRequirements": "NONE",
            "attackVector": "NETWORK",
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "exploitMaturity": "PROOF_OF_CONCEPT",
            "privilegesRequired": "NONE",
            "providerUrgency": "NOT_DEFINED",
            "subAvailabilityImpact": "NONE",
            "subConfidentialityImpact": "NONE",
            "subIntegrityImpact": "NONE",
            "userInteraction": "NONE",
            "valueDensity": "DIFFUSE",
            "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:H/SC:N/SI:N/SA:N/E:P/AU:Y/V:D",
            "version": "4.0",
            "vulnAvailabilityImpact": "HIGH",
            "vulnConfidentialityImpact": "LOW",
            "vulnIntegrityImpact": "NONE",
            "vulnerabilityResponseEffort": "NOT_DEFINED"
          },
          "format": "CVSS",
          "scenarios": [
            {
              "lang": "en",
              "value": "A malicious MQTT broker, or a network attacker capable of injecting a single MQTT PUBLISH packet into an unencrypted session to which the victim client has subscribed, sends a crafted packet with topic_name_size = 0xFFFF and remaining_length = 7 to crash an MQTT-C-based client process and potentially disclose adjacent heap bytes."
            }
          ]
        },
        {
          "cvssV3_1": {
            "attackComplexity": "LOW",
            "attackVector": "NETWORK",
            "availabilityImpact": "HIGH",
            "baseScore": 8.2,
            "baseSeverity": "HIGH",
            "confidentialityImpact": "LOW",
            "integrityImpact": "NONE",
            "privilegesRequired": "NONE",
            "scope": "UNCHANGED",
            "userInteraction": "NONE",
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H",
            "version": "3.1"
          },
          "format": "CVSS",
          "scenarios": [
            {
              "lang": "en",
              "value": "GENERAL"
            }
          ]
        }
      ],
      "problemTypes": [
        {
          "descriptions": [
            {
              "cweId": "CWE-125",
              "description": "CWE-125 Out-of-bounds Read",
              "lang": "en",
              "type": "CWE"
            }
          ]
        },
        {
          "descriptions": [
            {
              "cweId": "CWE-191",
              "description": "CWE-191 Integer Underflow (Wrap or Wraparound)",
              "lang": "en",
              "type": "CWE"
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-11-05T12:44:48.838Z",
        "orgId": "309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c",
        "shortName": "TuranSec"
      },
      "references": [
        {
          "name": "LiamBindle/MQTT-C upstream repository",
          "tags": [
            "product"
          ],
          "url": "https://github.com/LiamBindle/MQTT-C"
        },
        {
          "name": "Vulnerable mqtt_unpack_publish_response() in src/mqtt.c (v1.1.6)",
          "tags": [
            "product"
          ],
          "url": "https://github.com/LiamBindle/MQTT-C/blob/v1.1.6/src/mqtt.c#L1334"
        },
        {
          "name": "Fix out-of-bounds read and integer underflow in PUBLISH parsing",
          "tags": [
            "patch"
          ],
          "url": "https://github.com/LiamBindle/MQTT-C/pull/208"
        },
        {
          "name": "MQTT-C v1.1.7 release",
          "tags": [
            "release-notes",
            "patch"
          ],
          "url": "https://github.com/LiamBindle/MQTT-C/releases/tag/v1.1.7"
        },
        {
          "name": "CWE-125: Out-of-bounds Read",
          "tags": [
            "technical-description"
          ],
          "url": "https://cwe.mitre.org/data/definitions/125.html"
        },
        {
          "name": "CWE-191: Integer Underflow (Wrap or Wraparound)",
          "tags": [
            "technical-description"
          ],
          "url": "https://cwe.mitre.org/data/definitions/191.html"
        }
      ],
      "source": {
        "discovery": "EXTERNAL"
      },
      "title": "MQTT-C Heap Out-of-Bounds Read and Integer Underflow in mqtt_unpack_publish_response()",
      "x_assigner_notes": "The vulnerable mqtt_unpack_publish_response() implementation was verified at the v1.1.6 release tag. The function performs a remaining_length \u003e= 4 fixed-header sanity check but trusts the broker-controlled 16-bit topic_name_size field as a pointer offset and as a subtrahend in the unsigned application_message_size calculation. This can result in an out-of-bounds read and integer underflow, followed by a potentially oversized memmove() operation and process crash. The upstream fix is referenced in PR #208 and MQTT-C v1.1.7 release notes. Versions prior to 1.1.7 are affected; version 1.1.7 is considered unaffected. Mitigation: validate that topic_name_size + 2 + (qos_level \u003e 0 ? 2 : 0) does not exceed remaining_length before using topic_name_size as a pointer offset or subtrahend, or migrate to a maintained MQTT client library such as Eclipse Paho MQTT C or libmosquitto.",
      "x_author": "Saidakbarxon Maxsudxonov",
      "x_generator": {
        "engine": "Vulnogram 1.0.5"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c",
    "assignerShortName": "TuranSec",
    "cveId": "CVE-2026-54412",
    "datePublished": "2026-06-14T17:26:36.740Z",
    "dateReserved": "2026-06-13T16:39:46.122Z",
    "dateUpdated": "2026-11-05T12:44:48.838Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "vulnrichment": {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-54412",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "yes"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-06-15T17:01:08.771614Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-06-15T17:01:11.558Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "collectionURL": "https://github.com/LiamBindle/MQTT-C",
              "defaultStatus": "unknown",
              "product": "MQTT-C",
              "programFiles": [
                "src/mqtt.c"
              ],
              "programRoutines": [
                {
                  "name": "mqtt_unpack_publish_response"
                }
              ],
              "repo": "https://github.com/LiamBindle/MQTT-C",
              "vendor": "LiamBindle",
              "versions": [
                {
                  "lessThan": "1.1.7",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                },
                {
                  "status": "unaffected",
                  "version": "1.1.7",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Saidakbarxon Maxsudxonov"
            }
          ],
          "datePublic": "2026-06-14T17:26:00.000Z",
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eLiamBindle MQTT-C versions prior to 1.1.7 contain a heap-based out-of-bounds read and integer underflow in the mqtt_unpack_publish_response() function in src/mqtt.c. A remote unauthenticated attacker controlling an MQTT broker, or capable of injecting MQTT traffic into an unencrypted session, can crash a subscribed MQTT-C client and potentially disclose adjacent heap memory by sending a single crafted PUBLISH packet.\u003c/p\u003e"
                }
              ],
              "value": "LiamBindle MQTT-C versions prior to 1.1.7 contain a heap-based out-of-bounds read and integer underflow in the mqtt_unpack_publish_response() function in src/mqtt.c. A remote unauthenticated attacker controlling an MQTT broker, or capable of injecting MQTT traffic into an unencrypted session, can crash a subscribed MQTT-C client and potentially disclose adjacent heap memory by sending a single crafted PUBLISH packet."
            }
          ],
          "impacts": [
            {
              "descriptions": [
                {
                  "lang": "en",
                  "value": "A remote attacker controlling an MQTT broker, or able to inject one PUBLISH packet into an unencrypted MQTT session to which a victim has subscribed, can crash a subscribed MQTT-C client by sending a crafted PUBLISH packet whose topic_name_size exceeds the remaining_length field. The vulnerable client advances the parse pointer into unmapped heap memory, causing an out-of-bounds read that may expose adjacent heap bytes. It then calculates application_message_size using unsigned subtraction, causing an integer underflow to a value near 2^32, and passes that value to memmove(), crashing the process. IoT and embedded devices using MQTT-C with shared, untrusted, or compromised brokers are exposed to unauthenticated denial of service."
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "YES",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 7.8,
                "baseSeverity": "HIGH",
                "exploitMaturity": "PROOF_OF_CONCEPT",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "DIFFUSE",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:H/SC:N/SI:N/SA:N/E:P/AU:Y/V:D",
                "version": "4.0",
                "vulnAvailabilityImpact": "HIGH",
                "vulnConfidentialityImpact": "LOW",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "A malicious MQTT broker, or a network attacker capable of injecting a single MQTT PUBLISH packet into an unencrypted session to which the victim client has subscribed, sends a crafted packet with topic_name_size = 0xFFFF and remaining_length = 7 to crash an MQTT-C-based client process and potentially disclose adjacent heap bytes."
                }
              ]
            },
            {
              "cvssV3_1": {
                "attackComplexity": "LOW",
                "attackVector": "NETWORK",
                "availabilityImpact": "HIGH",
                "baseScore": 8.2,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "LOW",
                "integrityImpact": "NONE",
                "privilegesRequired": "NONE",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H",
                "version": "3.1"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-125",
                  "description": "CWE-125 Out-of-bounds Read",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-191",
                  "description": "CWE-191 Integer Underflow (Wrap or Wraparound)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-11-05T12:44:48.838Z",
            "orgId": "309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c",
            "shortName": "TuranSec"
          },
          "references": [
            {
              "name": "LiamBindle/MQTT-C upstream repository",
              "tags": [
                "product"
              ],
              "url": "https://github.com/LiamBindle/MQTT-C"
            },
            {
              "name": "Vulnerable mqtt_unpack_publish_response() in src/mqtt.c (v1.1.6)",
              "tags": [
                "product"
              ],
              "url": "https://github.com/LiamBindle/MQTT-C/blob/v1.1.6/src/mqtt.c#L1334"
            },
            {
              "name": "Fix out-of-bounds read and integer underflow in PUBLISH parsing",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/LiamBindle/MQTT-C/pull/208"
            },
            {
              "name": "MQTT-C v1.1.7 release",
              "tags": [
                "release-notes",
                "patch"
              ],
              "url": "https://github.com/LiamBindle/MQTT-C/releases/tag/v1.1.7"
            },
            {
              "name": "CWE-125: Out-of-bounds Read",
              "tags": [
                "technical-description"
              ],
              "url": "https://cwe.mitre.org/data/definitions/125.html"
            },
            {
              "name": "CWE-191: Integer Underflow (Wrap or Wraparound)",
              "tags": [
                "technical-description"
              ],
              "url": "https://cwe.mitre.org/data/definitions/191.html"
            }
          ],
          "source": {
            "discovery": "EXTERNAL"
          },
          "title": "MQTT-C Heap Out-of-Bounds Read and Integer Underflow in mqtt_unpack_publish_response()",
          "x_assigner_notes": "The vulnerable mqtt_unpack_publish_response() implementation was verified at the v1.1.6 release tag. The function performs a remaining_length \u003e= 4 fixed-header sanity check but trusts the broker-controlled 16-bit topic_name_size field as a pointer offset and as a subtrahend in the unsigned application_message_size calculation. This can result in an out-of-bounds read and integer underflow, followed by a potentially oversized memmove() operation and process crash. The upstream fix is referenced in PR #208 and MQTT-C v1.1.7 release notes. Versions prior to 1.1.7 are affected; version 1.1.7 is considered unaffected. Mitigation: validate that topic_name_size + 2 + (qos_level \u003e 0 ? 2 : 0) does not exceed remaining_length before using topic_name_size as a pointer offset or subtrahend, or migrate to a maintained MQTT client library such as Eclipse Paho MQTT C or libmosquitto.",
          "x_author": "Saidakbarxon Maxsudxonov",
          "x_generator": {
            "engine": "Vulnogram 1.0.5"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c",
        "assignerShortName": "TuranSec",
        "cveId": "CVE-2026-54412",
        "datePublished": "2026-06-14T17:26:36.740Z",
        "dateReserved": "2026-06-13T16:39:46.122Z",
        "dateUpdated": "2026-11-05T12:44:48.838Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline

Sightings and recorded dates, grouped by day · UTC

JSON
Events included in the timeline

Loading timeline…


    Loading…

    Loading…

    Loading…

    Related by attack behaviour

    Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.