CVE-2026-54269
Medium · 5.3CVSS
5.3
EPSS
0.4%
Published
Jun 22, 2026
CISA due date
—
Cloudanix analysis
A flaw in a common protobuf JavaScript library can let a specially crafted data schema crash applications that process it.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- Library
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
protobufjs versions before 8.6.0 and 7.6.3 do not sufficiently validate schema-derived names when compiling protobuf definitions into JavaScript helpers. A malicious or malformed protobuf schema, especially one loaded through JSON/reflection descriptors, can define fields, oneofs, or service methods using names that collide with protobufjs runtime helper properties such as hasOwnProperty, $type, or rpcCall. When the affected message or service type is decoded, verified, converted to objects, serialized through reflection JSON, or invoked through protobufjs RPC helpers, the runtime may read attacker-controlled schema data instead of the expected helper or metadata property. The practical impact is denial of service through deterministic exceptions or recursive calls; confidentiality and integrity impact are not expected from the published description.
Why it matters to the business
Applications, APIs, build tools, or services that accept or process untrusted protobuf definitions can be made to fail reliably, causing request errors, service instability, failed data processing, or outages in protobuf-dependent workflows. The CVSS score is moderate and EPSS is currently low, and the issue is not listed in CISA KEV, but protobufjs is commonly embedded in JavaScript and Node.js ecosystems, so exposure may exist indirectly through dependencies even where the package is not used explicitly.
How an attack unfolds
An attacker first needs a path to influence the protobuf schema or descriptor processed by an affected protobufjs version. This is most relevant where an application imports protobuf definitions from users, partners, plugins, remote registries, generated JSON descriptors, or reflection-based service metadata. The attacker supplies a schema containing one of the problematic names, such as a field named hasOwnProperty, a field or oneof name such as $type in a JSON/reflection descriptor, or a service method whose generated helper name becomes rpcCall. When the application later uses the affected message or service type, protobufjs generated/runtime code collides with those schema-controlled names. Instead of calling or reading the intended internal helper or metadata, protobufjs reads the schema-derived property, which can cause predictable exceptions or recursion during decode post-checks, verification, object conversion, reflected JSON serialization, or RPC helper invocation. The result is typically application-level denial of service rather than code execution.
How to fix it
Upgrade protobufjs to a fixed release: 8.6.0 or later for the 8.x line, or 7.6.3 or later for the 7.x line. Also update protobufjs-cli where it is present, because generated artifacts and descriptor workflows may be affected. If direct upgrade is delayed, reduce exposure by rejecting untrusted protobuf schemas and JSON/reflection descriptors containing reserved or collision-prone names such as hasOwnProperty, $type, and service helper names that generate rpcCall. Treat externally supplied schemas as untrusted input, validate them before loading, and avoid dynamically compiling protobuf definitions from unauthenticated or low-trust sources. Rebuild and redeploy applications after dependency updates, and regenerate any protobufjs-generated code if the build process embeds generated output.
How to confirm the fix worked
Confirm that dependency manifests and lockfiles resolve protobufjs to 8.6.0 or later, or 7.6.3 or later, including transitive uses through protobufjs-cli or other packages. Use package-manager inspection commands such as npm ls protobufjs protobufjs-cli, yarn why protobufjs, or pnpm why protobufjs across source repositories and deployed artifacts. Validate runtime containers or serverless bundles, not only source trees, because protobufjs may be bundled. As a functional validation, load a test descriptor containing the previously problematic names in a non-production test harness and confirm the patched version rejects or safely handles it without recursive calls or deterministic exceptions. Review CI/CD output to ensure regenerated code and packaged artifacts use the patched dependency version.
Typical attack path
- Identify an application, API, build pipeline, plugin system, or service that processes protobuf schemas or JSON/reflection descriptors using protobufjs before 8.6.0 or 7.6.3.
- Submit or cause ingestion of a protobuf definition or descriptor containing a colliding schema-derived name such as hasOwnProperty, $type, or rpcCall.
- Trigger application functionality that decodes, verifies, converts, serializes, or invokes RPC helpers for the affected message or service type.
- Cause protobufjs runtime/helper logic to resolve the schema-controlled property instead of the intended internal helper or metadata.
- Produce deterministic exceptions, recursion, failed requests, worker crashes, or service degradation depending on how the application handles the error.
How to detect it
Look for evidence that untrusted or newly introduced protobuf schemas/descriptors were processed shortly before application errors, worker restarts, request spikes, or failed RPC calls. Useful log sources include application logs, API gateway logs for schema upload or descriptor import endpoints, CI/CD build logs, package/build tool logs, container stdout/stderr, process supervisor logs, crash reports, and APM traces. Search for protobufjs stack traces or exceptions during decode, verify, toObject/fromObject conversion, reflected JSON serialization, or RPC helper invocation. Correlate failures with protobuf schema content containing the known colliding names hasOwnProperty, $type, or rpcCall. Because this vulnerability primarily causes availability impact, indicators are more likely to be repeated deterministic errors, recursion/stack overflow messages, or service restarts than persistent malware artifacts. There are no public KEV or named threat actor indicators in the provided intelligence, and no ransomware association is reported.
- hasOwnProperty
- $type
- rpcCall
- RangeError: Maximum call stack size exceeded
- TypeError: hasOwnProperty is not a function
- protobufjs
- protobufjs-cli
What your security team should do
- Inventory all JavaScript and Node.js applications, build tools, CLIs, and generated-code workflows that include protobufjs or protobufjs-cli, including transitive dependencies.
- Prioritize updates for internet-facing services, APIs, developer portals, plugin systems, schema registries, CI/CD jobs, and data-processing services that accept protobuf definitions or descriptors from outside a trusted codebase.
- Upgrade to protobufjs 8.6.0 or later, or 7.6.3 or later, and update protobufjs-cli where present.
- Add validation controls for protobuf schema ingestion to block reserved or collision-prone names such as hasOwnProperty, $type, and rpcCall-derived service helper names.
- Search logs for repeated protobuf processing exceptions, stack overflows, recursion errors, or crashes correlated with newly uploaded or remotely fetched protobuf descriptors.
- Add dependency scanning rules to flag protobufjs versions earlier than 8.6.0 on the 8.x line and earlier than 7.6.3 on the 7.x line.
- If untrusted schemas are not required for business functionality, disable dynamic schema loading and use only reviewed, version-controlled protobuf definitions.
The record
protobufjs compiles protobuf definitions into JavaScript (JS) functions. Prior to 8.6.0 and 7.6.3, protobufjs accepted certain schema-derived names that could collide with properties used by protobufjs runtime helpers. The known affected names are fields named hasOwnProperty, field or oneof names such as $type when loaded through protobufjs JSON/reflection descriptors, and service methods whose generated helper name is rpcCall. When affected message or service types were used, protobufjs could read schema-controlled data where it expected an own-property helper, reflected type metadata, or the base RPC helper. This could cause deterministic exceptions or recursive calls in affected decode post-checks, verification, object conversion, reflected JSON serialization, or protobufjs RPC helper invocation. This vulnerability is fixed in 8.6.0 and 7.6.3.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| npm | protobufjs | 0 | 7.6.3 |
| npm | protobufjs | 8.0.0 | 8.6.0 |
| npm | protobufjs-cli | 0 | 1.3.3 |
| npm | protobufjs-cli | 2.0.0 | 2.5.1 |
Related vulnerabilities
- GHSA-f38q-mgvj-vph7 protobufjs : Schema-derived names can shadow runtime-significant properties Same vulnerability
- CVE-2026-54270 protobufjs compiles protobuf definitions into JavaScript (JS) functions. Also affects protobufjs
- CVE-2026-48712 protobufjs compiles protobuf definitions into JavaScript (JS) functions. Also affects protobufjs
- GHSA-94rc-8x27-4472 protobufjs: Memory amplification from preserved unknown fields in binary decode Also affects protobufjs
- GHSA-wcpc-wj8m-hjx6 protobufjs: Denial of service through unbounded Any expansion during JSON conversion Also affects protobufjs
- GHSA-jggg-4jg4-v7c6 protobufjs: Denial of Service via unbounded recursive JSON descriptor expansion Also affects protobufjs
- CVE-2026-45740 protobufjs compiles protobuf definitions into JavaScript (JS) functions. Also affects protobufjs
- CVE-2026-44294 protobufjs compiles protobuf definitions into JavaScript (JS) functions. Also affects protobufjs