Description
msgpack_unpacker_expand_buffer in src/unpack.c, reached through the public msgpack_unpacker_reserve_buffer API, computes its new buffer size using an unchecked size_t addition of the requested size and the amount already used. The doubling loop guards its own multiplication against overflow, but the addition in the loop condition is unguarded, so a request near SIZE_MAX wraps: the loop condition is already satisfied, the allocation is performed at the small pre-wrap size, and the function returns true. The caller is told the requested capacity was reserved when it was not, so a subsequent write of the requested length overflows the heap buffer. The library's own example/lib_buffer_unpack.c demonstrates the reserve-then-write pattern, and its defensive assert comparing capacity against the request is compiled out under NDEBUG. msgpack-c's own decode entry points do not derive the reservation size from untrusted input, so reaching this requires an integration that passes an attacker-influenced length to the reservation API, such as a length-prefixed streaming transport.
Published: 2026-08-20
Score: 5.8 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Heap Buffer Overflow
Action: Patch Now
AI Analysis

Impact

The msgpack_unpacker_expand_buffer function performs an unchecked size_t addition when computing a new buffer size. When an attacker requests a size close to SIZE_MAX, the addition overflows, the loop condition is satisfied before the allocation, and the function falsely reports success. The caller is then led to write the requested amount into a buffer that is too small, causing a heap overflow. This pattern is a classic integer overflow (CWE‑190) that results in a buffer overflow (CWE‑787), allowing an attacker to corrupt memory and potentially execute arbitrary code.

Affected Systems

The vulnerability applies to the msgpack:msgpack‑c library, with the referenced affected version being c‑7.0.1. Any application that uses msgpack_unpacker_reserve_buffer with input‑derived lengths—such as a length‑prefixed streaming protocol—faces risk.

Risk and Exploitability

The CVSS score of 5.8 indicates a moderate severity. EPSS is not available and the vulnerability is not listed in KEV. The likely attack vector is remote, via network traffic that an application parses with this API, enabling an attacker to trigger the overflow without local interaction. If exploited, the heap corruption could lead to crashes or provide a foothold for further exploitation.

Generated by OpenCVE AI on August 21, 2026 at 01:35 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade msgpack-c to a fixed version (e.g., 7.0.2 or later).
  • Validate all length values before calling msgpack_unpacker_reserve_buffer; ensure they are derived from trusted input or checked against reasonable limits. Use alternative decode functions that do not require an attacker‑controlled reservation size.
  • Apply the patch provided in issue 1181 to replace the unchecked addition with safe arithmetic or add explicit bounds checking around the buffer allocation.

Generated by OpenCVE AI on August 21, 2026 at 01:35 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 21 Aug 2026 13:30:00 +0000

Type Values Removed Values Added
First Time appeared Msgpack
Msgpack msgpack
Vendors & Products Msgpack
Msgpack msgpack

Thu, 20 Aug 2026 19:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Thu, 20 Aug 2026 18:45:00 +0000

Type Values Removed Values Added
Description msgpack_unpacker_expand_buffer in src/unpack.c, reached through the public msgpack_unpacker_reserve_buffer API, computes its new buffer size using an unchecked size_t addition of the requested size and the amount already used. The doubling loop guards its own multiplication against overflow, but the addition in the loop condition is unguarded, so a request near SIZE_MAX wraps: the loop condition is already satisfied, the allocation is performed at the small pre-wrap size, and the function returns true. The caller is told the requested capacity was reserved when it was not, so a subsequent write of the requested length overflows the heap buffer. The library's own example/lib_buffer_unpack.c demonstrates the reserve-then-write pattern, and its defensive assert comparing capacity against the request is compiled out under NDEBUG. msgpack-c's own decode entry points do not derive the reservation size from untrusted input, so reaching this requires an integration that passes an attacker-influenced length to the reservation API, such as a length-prefixed streaming transport.
Title msgpack-c Integer Overflow in msgpack_unpacker_expand_buffer Causes a False-Success Undersized Reservation
Weaknesses CWE-190
CWE-787
References
Metrics cvssV3_1

{'score': 5.3, 'vector': 'CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:L'}

cvssV4_0

{'score': 5.8, 'vector': 'CVSS:4.0/AV:L/AC:H/AT:P/PR:N/UI:P/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N'}


cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-08-20T18:53:26.891Z

Reserved: 2026-08-10T15:16:31.371Z

Link: CVE-2026-72854

cve-icon Vulnrichment

Updated: 2026-08-20T18:53:19.871Z

cve-icon NVD

Status : Received

Published: 2026-08-20T19:17:01.040

Modified: 2026-08-20T19:17:01.040

Link: CVE-2026-72854

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-21T13:00:53Z

Weaknesses