CVE-2026-54270: protobufjs: Memory amplification from preserved unknown fields in binary decode

Published Jun 15, 2026
·
Updated

Summary

protobufjs 8.2.0 added support for preserving unknown fields encountered during binary decode. Affected versions preserved unknown wire elements in message.$unknowns and did not provide a decode-time option to discard unknown fields before retaining them.

A crafted protobuf payload containing many unknown fields could therefore cause a decoded message to retain substantially more memory than the input size would suggest, even when unknown-field round-tripping is not needed. protobufjs 8.5.0 added the relevant decode-time options, allowing applications that decode untrusted protobuf data to disable unknown-field retention during decode. protobufjs 8.6.2 flips the default so unknown fields are discarded unless explicitly opted into.

Impact

An attacker who can provide protobuf binary data decoded by an application using affected protobufjs versions may be able to increase memory pressure by sending messages with many unknown fields. This can degrade availability or contribute to process termination in services that decode and retain attacker-controlled messages.

This issue affects applications that decode untrusted protobuf binary input and do not need unknown-field round-tripping. Applications that only decode trusted protobuf data, already enforce input-size/concurrency limits, or do not retain decoded messages beyond immediate processing are less directly affected.

Preconditions

The application must decode protobuf binary data influenced by an attacker. The decoded schema must not define the attacker-selected field numbers, causing those fields to be treated as unknown. The application must use a protobufjs version that preserves unknown fields but does not provide a decode-time discard option. The decoded message, or enough decoded messages concurrently, must remain live long enough for retained unknown-field data to affect memory usage.

Workarounds

Upgrade to protobufjs 8.5.0 or newer and disable unknown-field preservation if not needed: Create a Reader, set reader.discardUnknown = true, and decode from that reader, or make this the default for subsequently created readers by setting Reader.discardUnknown = true. When upgrading to protobufjs 8.6.2 or newer, unknown fields are discarded by default unless opted into by setting discardUnknown = false.

Applications should also continue to enforce input-size, request concurrency, and request timeout limits at their transport or application boundary.

Other sources

protobufjs compiles protobuf definitions into JavaScript (JS) functions. From 8.2.0 to 8.4.2, protobufjs preserved unknown wire elements in message.$unknowns and did not provide a decode-time option to discard unknown fields before retaining them. A crafted protobuf payload containing many unknown fields could therefore cause a decoded message to retain substantially more memory than the input size would suggest, even when unknown-field round-tripping is not needed. protobufjs 8.5.0 added the relevant decode-time options, allowing applications that decode untrusted protobuf data to disable unknown-field retention during decode. protobufjs 8.6.2 flips the default so unknown fields are discarded unless explicitly opted into.

MITRE

Affected Software

5 affected componentsFixes available
npm/protobufjs>=8.2.0<=8.4.2
8.5.0
Protobufjs Project Protobufjs Node.js>=8.2.0<8.5.0
IBM Maximo Application Suite<=9.2
IBM Maximo Application Suite<=9.1
IBM Maximo Application Suite<=9.0

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade npm/protobufjs to a version that resolves this vulnerability.

    Fixed in 8.5.0
  2. Upgrade

    Upgrade protobufjs to a version that resolves this vulnerability.

    Fixed in 8.5.0
  3. Upgrade

    Upgrade protobufjs to a version that resolves this vulnerability.

    Fixed in 8.6.2
  4. Configuration

    When decoding untrusted protobuf binary, create a protobufjs Reader and set `reader.discardUnknown = true` before decoding so unknown fields are not retained (applies to protobufjs versions before 8.6.2).

    protobufjs Reader.discardUnknown = true
  5. Configuration

    For protobufjs 8.6.2 or newer, unknown fields are discarded by default; only preserve unknown fields if needed by explicitly setting `discardUnknown = false` (avoid setting it to false when not required).

    protobufjs discardUnknown = false
  6. Compensating control

    Continue enforcing input-size, request concurrency, and request timeout limits at the transport or application boundary.

Event History

Jun 15, 2026
Advisory Published
via GitHub·08:13 PM
Data Sourced
via GitHub·08:13 PM
DescriptionSeverityWeaknessAffected Software
Jun 22, 2026
CVE Published
via MITRE·04:19 PM
Data Sourced
via MITRE·04:19 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·06:16 PM
DescriptionSeverityWeaknessAffected Software
Aug 3, 2026
Data Sourced
via IBM·12:00 AM
DescriptionAffected Software

Parent advisories

This vulnerability appears in the following advisories.

Frequently Asked Questions

1

What is the severity of CVE-2026-54270?

The severity of CVE-2026-54270 is medium with a score of 5.3.

2

How do I fix CVE-2026-54270?

To fix CVE-2026-54270, update protobufjs to version 8.3.0 or later.

3

What is the risk associated with CVE-2026-54270?

The risk associated with CVE-2026-54270 includes memory amplification due to preserved unknown fields during binary decoding.

4

What versions of protobufjs are affected by CVE-2026-54270?

Protobufjs version 8.2.0 is affected by CVE-2026-54270.

5

Can CVE-2026-54270 impact data confidentiality?

CVE-2026-54270 does not impact data confidentiality as it affects memory management rather than data exposure.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203