Skip to content
OpenAdvisories
High · 7.5 CVE-2020-26243 EUVD-2020-1450GHSA-85rr-4rh9-hhwhPYSEC-2026-684

Memory leak in nanopb

Published Nov 25, 2020 · Updated Aug 4, 2024 · Assigned by GitHub_M

Description

Nanopb is a small code-size Protocol Buffers implementation. In Nanopb before versions 0.4.4 and 0.3.9.7, decoding specifically formed message can leak memory if dynamic allocation is enabled and an oneof field contains a static submessage that contains a dynamic field, and the message being decoded contains the submessage multiple times. This is rare in normal messages, but it is a concern when untrusted data is parsed. This is fixed in versions 0.3.9.7 and 0.4.4. The following workarounds are available: 1) Set the option `no_unions` for the oneof field. This will generate fields as separate instead of C union, and avoids triggering the problematic code. 2) Set the type of the submessage field inside oneof to `FT_POINTER`. This way the whole submessage will be dynamically allocated and the problematic code is not executed. 3) Use an arena allocator for nanopb, to make sure all memory can be released afterwards.

Affected products

VendorProductAffectedFixed
nanopb nanopb < 0.3.9.7, >= 0.4.0, < 0.4.4 —

Fixed in Linux distributions

Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.

ReleasePackageFixed inAdvisory
Debian 14 nanopb 0.4.4-1 —
Debian 13 nanopb 0.4.4-1 —
Debian 12 nanopb 0.4.4-1 —
ReleasePackageFixed inAdvisory
Ubuntu Pro 20.04 LTS nanopb 0.4.1-1ubuntu0.1~esm1 USN-6121-1
ReleasePackageFixed inAdvisory
openSUSE Tumbleweed nanopb 0.4.5-1.3 openSUSE-SU-2024:11074-1

Affected packages

EcosystemPackageAffectedFixedRecord
PyPI nanopb >= 0.3.2, < 0.3.9.7 0.3.9.7 GHSA-85rr-4rh9-hhwh
PyPI nanopb >= 0.4.0, < 0.4.4 0.4.4 GHSA-85rr-4rh9-hhwh
PyPI nanopb >= 0.3.2, < 0.3.9.7 · >= 0.4.0, < 0.4.4 0.3.9.7, 0.4.4 PYSEC-2026-684

Advisories 2

References