CVE-2026-72854
msgpack-c Integer Overflow in msgpack_unpacker_expand_buffer Causes a False-Success Undersized Reservation
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.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- High
- Privileges needed
- None
- User interaction
- Passive
What an attacker can affect
- Confidentiality
- None
- Integrity
- High
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
5.8
msgpack-c Integer Overflow in msgpack_unpacker_expand_buffer Causes a False-Success Undersized Reservation
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.
- Record
CVE-2026-72854- CVSS 4.0
- 5.8 Medium
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 - CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:L - Weakness
- CWE-190, CWE-787
- Updated
- 2026-11-02
EUVDEUVD-2026-63537
5.8
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.
- Record
EUVD-2026-63537- CVSS 4.0
- 5.8 Medium
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 - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-p5jw-mm77-f8jp
5.8
msgpack_unpacker_expand_buffer in src/unpack.c, reached through the public...
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.
- Record
GHSA-p5jw-mm77-f8jp- CVSS 4.0
- 5.8 Medium
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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:L - Weakness
- CWE-190
- Updated
- 2026-11-02
NVD
5.8
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.
- Record
CVE-2026-72854- CVSS 4.0
- 5.8 Medium
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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:L - Weakness
- CWE-190, CWE-787
- Updated
- 2026-11-02
OSV
5.8
msgpack-c Integer Overflow in msgpack_unpacker_expand_buffer Causes a False-Success Undersized Reservation
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.
- Record
CVE-2026-72854- CVSS 4.0
- 5.8 Medium
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 - Weakness
- CWE-190, CWE-787
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-72854
5.3
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.
- Record
DEBIAN-CVE-2026-72854- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:L - Updated
- 2026-11-02
Show 8 moreShow less
OSVUBUNTU-CVE-2026-72854
5.8
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.
- Record
UBUNTU-CVE-2026-72854- CVSS 4.0
- 5.8 Medium
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 - CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:L - Updated
- 2026-11-02
OSVAZL-97458 No score
CVE-2026-72854 affecting package fluent-bit 3.1.10-8
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.
- Record
AZL-97458- Updated
- 2026-11-05
OSVAZL-97512 No score
CVE-2026-72854 affecting package lttng-tools 2.13.11-1
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.
- Record
AZL-97512- Updated
- 2026-11-05
OSVAZL-97515 No score
CVE-2026-72854 affecting package msgpack 3.3.0-1
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.
- Record
AZL-97515- Updated
- 2026-11-05
OSVMGASA-2026-0533 No score
Updated msgpack package fixes a security vulnerability
Integer Overflow in msgpack_unpacker_expand_buffer Causes a False-Success Undersized Reservation. (CVE-2026-72854)
- Record
MGASA-2026-0533- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:11672-1 No score
libmsgpack-c2-7.0.2-2.1 on GA media
These are all security issues fixed in the libmsgpack-c2-7.0.2-2.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:11672-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:21768-1 No score
Security update for msgpack-c
This update for msgpack-c fixes the following issue:
Update to release 7.0.2:
- CVE-2026-72854: Integer Overflow in msgpack_unpacker_expand_buffer Causes a False-Success Undersized Reservation (bsc#1275911).
- Record
openSUSE-SU-2026:21768-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:23630-1 No score
Security update for msgpack-c
This update for msgpack-c fixes the following issue:
Update to release 7.0.2:
- CVE-2026-72854: Integer Overflow in msgpack_unpacker_expand_buffer Causes a False-Success Undersized Reservation (bsc#1275911).
- Record
SUSE-SU-2026:23630-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
fluent-bitAzure Linux:3 |
through 3.1.10-8 | None known |
lttng-toolsAzure Linux:3 |
through 2.13.11-1 | None known |
msgpackAzure Linux:3 |
through 3.3.0-1 | None known |
msgpack-cDebian:12 |
All versions, plus listed versions 4.0.0-36.0.0-16.0.0-26.0.0-36.0.0-4 Show 8 moreShow less6.0.0-56.0.1-16.0.1-26.0.1-36.1.0-16.1.0-27.0.1-17.0.2-1 |
None known |
msgpack-cDebian:13 |
All versions, plus listed versions 6.0.1-36.1.0-16.1.0-27.0.1-17.0.2-1 |
None known |
msgpack-cDebian:14 |
before 7.0.2-1, plus listed versions 6.0.1-36.1.0-16.1.0-27.0.1-1 |
7.0.2-1 |
msgpackMageia:10 |
before 6.1.0-2.1.mga10 | 6.1.0-2.1.mga10 |
msgpack-cSUSE:Linux Enterprise Server 16.0 |
before 7.0.2-160000.1.1 | 7.0.2-160000.1.1 |
msgpack-cSUSE:Linux Enterprise Server for SAP applications 16.0 |
before 7.0.2-160000.1.1 | 7.0.2-160000.1.1 |
msgpack-cUbuntu:18.04:LTS |
All versions, plus listed versions 2.1.5-1 |
None known |
Show 7 moreShow less
| Package | Affected | Fixed |
|---|---|---|
msgpack-cUbuntu:20.04:LTS |
All versions, plus listed versions 3.0.1-3 |
None known |
msgpack-cUbuntu:22.04:LTS |
All versions, plus listed versions 3.3.0-4 |
None known |
msgpack-cUbuntu:24.04:LTS |
All versions, plus listed versions 4.0.0-34.0.0-3build1 |
None known |
msgpack-cUbuntu:26.10 |
All versions, plus listed versions 6.1.0-27.0.1-1 |
None known |
msgpack-cUbuntu:26.04:LTS |
All versions, plus listed versions 6.0.1-36.1.0-2 |
None known |
msgpack-copenSUSE:Tumbleweed |
before 7.0.2-2.1 | 7.0.2-2.1 |
msgpack-copenSUSE:Leap 16.0 |
before 7.0.2-160000.1.1 | 7.0.2-160000.1.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| facts | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-72854 is a medium vulnerability (CVSS 5.8) in Msgpack Msgpack-c, published August 20, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.16%, the 4th percentile. Fixed in msgpack-c 7.0.2-1.
References
github.com/msgpack/msgpack-c/issues/1181
github.com/msgpack/msgpack-c/blob/c-7.0.1/src/unpack.c
github.com/msgpack/msgpack-c/blob/c-7.0.1/include/msgpack/unpack.h
github.com/msgpack/msgpack-c/blob/c-7.0.1/example/lib_buffer_unpack.c
github.com/msgpack/msgpack-c
vulncheck.com/advisories/msgpack-c-integer-overflow-in-msgpack-unpacker-expand-buffer-causes-a-false-success-undersized-reservation
Show 12 moreShow less
nvd.nist.gov/vuln/detail/CVE-2026-72854
github.com/advisories/GHSA-p5jw-mm77-f8jp
github.com/CVEProject/cvelistV5/tree/main/cves/2026/72xxx/CVE-2026-72854.json
security-tracker.debian.org/tracker/CVE-2026-72854
advisories.mageia.org/MGASA-2026-0533.html
bugs.mageia.org/show_bug.cgi?id=36268
lists.opensuse.org/archives/list/[email protected]/message/BFF3NBEPXVQG2XOYDOERS7TLEDPUIP5O
suse.com/support/update/announcement/2026/suse-su-202623630-1
bugzilla.suse.com/1275911
suse.com/security/cve/CVE-2026-72854
ubuntu.com/security/CVE-2026-72854
cve.org/CVERecord?id=CVE-2026-72854