protobuf.js CVE-2026-44291
HIGHAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify prototype pollution primitive
-
DeliveryPollute Object.prototype with crafted type metadata
-
ExploitTrigger protobufjs encode/decode code generation
-
ExecutionInject malicious JavaScript into generated functions
-
PersistExecute injected code with application privileges
-
ImpactAchieve RCE or data exfiltration
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Code injection prevention, sandbox exec
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires four specific preconditions to be met sequentially. First, the application or one of its dependencies must contain a reachable prototype pollution vulnerability (e.g., unsafe JSON.parse, recursive object merge functions like lodash merge without proper guards, or vulnerable dependencies with prototype pollution flaws). Second, the polluted property keys must match the specific internal type lookup keys used by protobufjs code generation logic-attackers must understand protobufjs internals to craft effective pollution payloads. Third, the application must invoke protobufjs functionality that dynamically generates encode or decode functions for message types (static/pre-built code generation is not affected). Fourth, the code generation and execution must occur after Object.prototype pollution is established and while the polluted state persists-pollution must survive until the generated code path is reached. Limiting factors: Applications using Object.freeze(Object.prototype), applications performing only build-time code generation (not runtime), and applications without prototype pollution attack surface are not exploitable. Default configurations of protobufjs alone do not enable exploitation-an external prototype pollution primitive is mandatory. |
| Impact | Real-world risk is moderate despite CVSS 8.1 (High). The CVSS vector AV:N/AC:H/PR:N/UI:N indicates network-accessible remote exploitation without authentication, but AC:H (high complexity) accurately reflects the multi-stage attack requirement: attackers must first achieve prototype pollution through a separate vulnerability, then trigger protobufjs code generation with the polluted state intact. This is not a standalone vulnerability but an exploitation gadget requiring chaining. EPSS and KEV data not provided in input, but absence from CISA KEV and no public POC reference suggests limited in-the-wild exploitation. High impact ratings (C:H/I:H/A:H) are valid if exploitation succeeds, as arbitrary JavaScript execution grants full process control. SSVC decision factors: exploitation requires multiple preconditions (not automatable as standalone), technical impact is total system compromise (code execution), but exploitation status appears proof-of-concept at most. Priority depends heavily on whether the application has reachable prototype pollution primitives-applications hardened against prototype pollution (frozen prototypes, defensive coding) are not exploitable through this issue alone. Security teams should prioritize patching if using protobufjs AND the application accepts untrusted JSON/object inputs without prototype pollution defenses. |
| Exploit ScenarioDerived | An attacker targets a Node.js API service using protobufjs 7.5.5 for gRPC message handling. The service has a separate JSON merge vulnerability allowing prototype pollution via POST /api/config endpoint. The attacker first sends a malicious JSON payload that pollutes Object.prototype with crafted properties matching protobufjs internal type lookup keys. When a legitimate user subsequently triggers protobuf message encoding (e.g., via GET /api/data), protobufjs generates encode functions that resolve the polluted properties as type metadata, injecting attacker-controlled JavaScript into the generated code. When the generated encoder executes, the injected code runs with the service's privileges, allowing the attacker to exfiltrate environment variables, access internal APIs, or establish a reverse shell. Exploitation requires the attacker to control both the pollution primitive and influence the timing/type of protobuf operations, but no authentication is required if endpoints are publicly accessible. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – May 12, 2026
Prototype pollution in protobuf.js type lookup tables enables remote code execution via code injection into generated encode/decode functions. Affects npm package protobuf.js versions ≤7.5.5 and 8.0.0-8.0.1. Exploitation requires chaining with a separate prototype pollution vulnerability-applications must first allow Object.prototype pollution, then invoke protobufjs code generation on attacker-influenced schemas. Vendor-released patches available (v7.5.6, v8.0.2). CVSS 8.1 (High) reflects network vector but high attack complexity (AC:H) due to multi-step prerequisite. No evidence of active exploitation (not in CISA KEV), public exploit code not identified at time of analysis.
RemediationAI
Upgrade to patched versions immediately: protobufjs v7.5.6 for the 7.x branch or v8.0.2 for the 8.x branch. Both patches implement input hardening in type lookup tables to prevent inherited property resolution from polluted prototypes (per GitHub release notes commit 75392ea). If immediate upgrade is infeasible, implement defense-in-depth compensating controls: First, eliminate or mitigate all reachable prototype pollution primitives in the application (audit JSON parsing, object merging, deep clone operations). Second, freeze Object.prototype using Object.freeze(Object.prototype) at application startup-this prevents new property additions but may break legitimate code expecting prototype extensibility; test thoroughly in non-production first. Third, isolate protobufjs schema processing from untrusted application state by running code generation in a separate sandboxed context or during build time only (not at runtime with user input). Fourth, apply strict Content Security Policy headers to limit damage if code injection occurs. Note these workarounds significantly reduce functionality and have compatibility risks-vendor patch is the definitive solution. Advisory: https://github.com/protobufjs/protobuf.js/security/advisories/GHSA-75px-5xx7-5xc7.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
protobuf.js is a popular Protocol Buffers implementation for JavaScript/TypeScript (npm package protobufjs, used in Node.js and browser environments). The library dynamically generates encode/decode functions from protobuf schemas using plain JavaScript objects for internal type lookup tables. CWE-94 (Code Injection) occurs because these lookup objects inherit from Object.prototype without defensive property checks. When Object.prototype has been polluted with attacker-controlled properties (e.g., via JSON.parse vulnerabilities, recursive merge functions, or other prototype pollution primitives), the type lookup can resolve malicious inherited properties as legitimate type metadata. This polluted metadata then flows into code generation logic, causing attacker-controlled strings to be emitted directly into dynamically generated JavaScript functions-effectively achieving arbitrary code execution when those generated functions are invoked. The vulnerability exists in the code generation pipeline itself, not in schema parsing, making it a second-order exploitation gadget dependent on prior prototype pollution.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
Primary rating from GitHub Advisory.
CVSS VectorGitHub Advisory
DescriptionGitHub Advisory
Summary
protobufjs used plain objects with inherited prototypes for internal type lookup tables used by generated encode and decode functions. If Object.prototype had already been polluted, those lookup tables could resolve attacker-controlled inherited properties as valid protobuf type information.
This could cause attacker-controlled strings to be emitted into generated JavaScript code.
Impact
An attacker who can first trigger a prototype pollution vulnerability may be able to influence generated protobufjs encode or decode functions in a way that can lead to arbitrary JavaScript execution.
This issue requires a separate prototype pollution primitive before protobufjs is invoked.
Applications without a reachable prototype pollution primitive are not directly exploitable through this issue alone.
Preconditions
- The application or one of its dependencies must allow an attacker to pollute
Object.prototype. - The polluted property must affect protobufjs internal type lookup behavior.
- The application must use protobufjs functionality that generates encode or decode code for affected types.
- The generated code path must be reached after the prototype pollution has occurred.
Workarounds
Avoid running affected versions in applications where attacker-controlled input can pollute Object.prototype. If immediate upgrade is not possible, remove or mitigate reachable prototype pollution primitives and isolate schema/message processing from untrusted application state.
Blast Radius
ecosystem impact- 1,832 npm packages depend on protobufjs (158 direct, 1,675 indirect)
Ecosystem-wide dependent count for version 8.0.0.
Executive ViewAI
CVE-2026-44291 affects protobuf.js libraries used for data serialization in applications, creating a remote code execution risk through prototype pollution chains. Organizations using protobuf.js versions 7.5.5 or earlier, or 8.0.0-8.0.1 face potential compromise if their applications process untrusted schema data, requiring immediate inventory and patching to prevent supply chain attack vectors.
Vendor-released patch: protobuf.js v7.5.6 and v8.0.2. Until patching is complete, restrict runtime code generation from untrusted sources, implement strict input validation on schema definitions, and disable dynamic protobuf schema compilation if not business-critical.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
GHSA-75px-5xx7-5xc7
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB