Security
Headlines
HeadlinesLatestCVEs

Headline

GHSA-7mv5-5mxh-qg88: nanopb vulnerable to invalid free() call with oneofs and PB_ENABLE_MALLOC

Impact

Decoding a specifically formed message can cause invalid free() or realloc() calls if the message type contains an oneof field, and the oneof directly contains both a pointer field and a non-pointer field. If the message data first contains the non-pointer field and then the pointer field, the data of the non-pointer field is incorrectly treated as if it was a pointer value. Such message data rarely occurs in normal messages, but it is a concern when untrusted data is parsed.

Patches

Preliminary patch is available on git for 0.4.x and 0.3.x branches. The fix will be released in versions 0.3.9.8 and 0.4.5 once testing has been completed.

Workarounds

Following workarounds are available:

  • 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.
  • Set the type of all fields inside the oneof to FT_POINTER. This ensures that the data contained inside the union is always a valid pointer.
  • Heap implementations that guard against invalid free() provide a partial mitigation. Depending on the message type, the pointer value may be attacker controlled and can be used to bypass heap protections.

References

Bug report: https://github.com/nanopb/nanopb/issues/647

For more information

If you have any questions or comments about this advisory, comment on the bug report linked above.

ghsa
#vulnerability#web#git

Skip to content

Navigation Menu

    • Actions

      Automate any workflow

    • Packages

      Host and manage packages

    • Security

      Find and fix vulnerabilities

    • Codespaces

      Instant dev environments

    • GitHub Copilot

      Write better code with AI

    • Code review

      Manage code changes

    • Issues

      Plan and track work

    • Discussions

      Collaborate outside of code

  • Explore

    • Learning Pathways
    • White papers, Ebooks, Webinars
    • Customer Stories
    • Partners
    • GitHub Sponsors

      Fund open source developers

*   The ReadME Project
    
    GitHub community articles
    • Enterprise platform

      AI-powered developer platform

  • Pricing

Provide feedback

Saved searches****Use saved searches to filter your results more quickly

Sign up

  1. GitHub Advisory Database
  2. GitHub Reviewed
  3. CVE-2021-21401

nanopb vulnerable to invalid free() call with oneofs and PB_ENABLE_MALLOC

High severity GitHub Reviewed Published Mar 20, 2021 in nanopb/nanopb • Updated Aug 30, 2024

Affected versions

>= 0.3.2, < 0.3.9.8

>= 0.4.0, < 0.4.5

Patched versions

0.3.9.8

0.4.5

Description

Impact

Decoding a specifically formed message can cause invalid free() or realloc() calls if the message type contains an oneof field, and the oneof directly contains both a pointer field and a non-pointer field. If the message data first contains the non-pointer field and then the pointer field, the data of the non-pointer field is incorrectly treated as if it was a pointer value. Such message data rarely occurs in normal messages, but it is a concern when untrusted data is parsed.

Patches

Preliminary patch is available on git for 0.4.x and 0.3.x branches. The fix will be released in versions 0.3.9.8 and 0.4.5 once testing has been completed.

Workarounds

Following workarounds are available:

  • 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.
  • Set the type of all fields inside the oneof to FT_POINTER. This ensures that the data contained inside the union is always a valid pointer.
  • Heap implementations that guard against invalid free() provide a partial mitigation. Depending on the message type, the pointer value may be attacker controlled and can be used to bypass heap protections.

References

Bug report: nanopb/nanopb#647

For more information

If you have any questions or comments about this advisory, comment on the bug report linked above.

References

  • GHSA-7mv5-5mxh-qg88
  • https://nvd.nist.gov/vuln/detail/CVE-2021-21401
  • nanopb/nanopb#647
  • nanopb/nanopb@4a375a5
  • nanopb/nanopb@e2f0ccf
  • https://github.com/nanopb/nanopb/blob/c9124132a604047d0ef97a09c0e99cd9bed2c818/CHANGELOG.txt#L1
  • https://github.com/pypa/advisory-database/tree/main/vulns/nanopb/PYSEC-2021-432.yaml

Published to the GitHub Advisory Database

Aug 30, 2024

Last updated

Aug 30, 2024

Related news

Ubuntu Security Notice USN-6121-1

Ubuntu Security Notice 6121-1 - It was discovered that Nanopb incorrectly handled certain decode messages. An attacker could possibly use this cause a denial of service or expose sensitive information. It was discovered that Nanopb incorrectly handled certain decode messages. An attacker could possibly use this issue to cause a denial of service or execute arbitrary code.