Every CVE Search/ Get API key

CVE-2026-72854

msgpack-c Integer Overflow in msgpack_unpacker_expand_buffer Causes a False-Success Undersized Reservation

5.8 MediumFix available

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

0.16%Unchanged since Aug 21, 2026
90%50%10%1%

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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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 MediumCVSS: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

Affected packages
PackageAffectedFixed
fluent-bit
Azure Linux:3
through 3.1.10-8 None known
lttng-tools
Azure Linux:3
through 2.13.11-1 None known
msgpack
Azure Linux:3
through 3.3.0-1 None known
msgpack-c
Debian: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 less
6.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-c
Debian: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-c
Debian: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
msgpack
Mageia:10
before 6.1.0-2.1.mga10
6.1.0-2.1.mga10
msgpack-c
SUSE:Linux Enterprise Server 16.0
before 7.0.2-160000.1.1
7.0.2-160000.1.1
msgpack-c
SUSE:Linux Enterprise Server for SAP applications 16.0
before 7.0.2-160000.1.1
7.0.2-160000.1.1
msgpack-c
Ubuntu:18.04:LTS
All versions, plus listed versions
2.1.5-1
None known
Show 7 moreShow less
Affected packages
PackageAffectedFixed
msgpack-c
Ubuntu:20.04:LTS
All versions, plus listed versions
3.0.1-3
None known
msgpack-c
Ubuntu:22.04:LTS
All versions, plus listed versions
3.3.0-4
None known
msgpack-c
Ubuntu:24.04:LTS
All versions, plus listed versions
4.0.0-34.0.0-3build1
None known
msgpack-c
Ubuntu:26.10
All versions, plus listed versions
6.1.0-27.0.1-1
None known
msgpack-c
Ubuntu:26.04:LTS
All versions, plus listed versions
6.0.1-36.1.0-2
None known
msgpack-c
openSUSE:Tumbleweed
before 7.0.2-2.1
7.0.2-2.1
msgpack-c
openSUSE:Leap 16.0
before 7.0.2-160000.1.1
7.0.2-160000.1.1

History

History
RecordedChangedSources
factsOSV
first indexedCVE 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

Show 12 moreShow less
MoveEnter Open