Cloudanix VulnDB

GHSA-5rrq-pxf6-6jx5

None

CVSS

—

EPSS

—

Published

Jan 8, 2022

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A vulnerable software component can let specially crafted input interfere with how an application handles data, potentially causing incorrect behavior or outages.

Chainable
Exploitation
Other
Attacker needs
None
Complexity
Moderate
Impact
Data Tampering
Component
Library
Class
Improper Input Validation
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

This vulnerability is a prototype pollution flaw in the node-forge debug API. If an application passes attacker-controlled object paths, keys, or debug data into the vulnerable API, an attacker may be able to write properties onto JavaScript object prototypes such as Object.prototype. That can alter default behavior for subsequently created objects in the same Node.js process and may lead to application logic corruption, denial of service, security control bypass, or secondary exploitation depending on how the application uses polluted properties. The impact is highly context-dependent because exploitation requires the vulnerable API to be reachable with untrusted input.

Why it matters to the business

Applications or products that embed vulnerable node-forge versions may behave unpredictably if attacker-controlled data reaches the affected debug API. Business consequences can include service instability, failed transactions, incorrect authorization or validation decisions, and potential compromise of application integrity. Because this issue is old and has no known KEV listing or reported mature public exploitation in the provided data, urgency is lower than actively exploited vulnerabilities, but remediation is still important for internet-facing services and software supply-chain hygiene. The presence of downstream products such as Bitnami GitLab packages means organizations should check both direct npm dependencies and bundled third-party distributions.

How an attack unfolds

An attacker first identifies an application or packaged product using a vulnerable version of node-forge where the debug API is exposed directly or indirectly to untrusted input. The attacker then submits crafted input containing prototype-polluting property names or paths, such as values intended to influence __proto__, constructor, or prototype. If that input is processed by the vulnerable debug API, the library writes attacker-controlled properties onto a shared JavaScript prototype rather than only onto a local object. Later application code may read those inherited properties and make incorrect decisions, crash, or behave in attacker-influenced ways. In many deployments this vulnerability is not directly exploitable unless the application wires user-controlled data into the affected debug functionality.

How to fix it

Upgrade affected components to fixed versions or later. For direct npm usage, upgrade node-forge to version 1.0.0 or later. For Bitnami GitLab packages, upgrade to version 13.2.10 or later. Rebuild and redeploy applications after dependency updates so the fixed library is actually present in runtime artifacts, containers, serverless packages, and lockfiles. If immediate upgrade is not possible, prevent untrusted input from reaching node-forge debug APIs, disable debug functionality in production, and add input validation that rejects prototype-pollution keys such as __proto__, prototype, and constructor in object paths or recursively merged objects. Mitigations should be treated as temporary because application-level filtering is easy to miss in nested structures.

How to confirm the fix worked

Confirm dependency remediation by inspecting package manifests, lockfiles, software composition analysis results, and deployed artifacts for node-forge versions earlier than 1.0.0. For Bitnami GitLab distributions, verify the installed package version is 13.2.10 or later. In Node.js applications, run npm ls node-forge or equivalent package-manager commands in build and runtime contexts to ensure vulnerable transitive copies are removed. Validate container images and bundled vendor packages, not only source repositories. Where feasible, add regression tests that pass prototype-pollution payloads through any debug-related code paths and assert that Object.prototype is not modified. Also verify production configuration does not expose debug-only APIs or verbose debug handlers to unauthenticated users.

Typical attack path

  1. Identify an application, service, or packaged distribution that includes a vulnerable node-forge version.
  2. Find an endpoint, API, job processor, or integration path that passes attacker-controlled data into node-forge debug functionality.
  3. Send crafted input containing prototype pollution keys or object paths such as __proto__, constructor, or prototype.
  4. Cause the vulnerable code to modify JavaScript object prototypes in the Node.js process.
  5. Trigger follow-on application behavior that relies on polluted inherited properties, such as validation, authorization, serialization, or error-handling logic.
  6. Leverage the resulting behavior for denial of service, logic manipulation, or other application-specific impact.

How to detect it

Look for evidence that attackers attempted to deliver prototype-pollution payloads to Node.js applications or products that bundle vulnerable node-forge. Useful sources include HTTP access logs, API gateway logs, WAF events, application request logs, Node.js error logs, job queue payload logs, and telemetry from services that process JSON, form-encoded, or query-string input. Search for requests or payloads containing prototype pollution markers such as __proto__, constructor.prototype, prototype, or nested object-path syntax targeting those names. Investigate abnormal Node.js process crashes, spikes in 500 errors, unexpected TypeError messages, authorization or validation anomalies, and behavior changes after suspicious requests. Because no universal post-exploitation artifact exists for this vulnerability, detection is primarily payload- and behavior-based and must be correlated with confirmed exposure to vulnerable node-forge versions and reachable debug API usage.

  • __proto__
  • constructor.prototype
  • constructor[prototype]
  • prototype.polluted
  • __proto__[polluted]
  • __proto__.polluted
  • constructor.prototype.polluted
  • "__proto__"
  • "constructor":{"prototype"
  • Cannot convert undefined or null to object
  • TypeError: Cannot read property
  • TypeError: Cannot read properties of undefined
  • Object.prototype.polluted
  • node-forge

What your security team should do

  • Inventory direct and transitive use of node-forge across source repositories, lockfiles, container images, and packaged applications.
  • Upgrade node-forge to 1.0.0 or later and Bitnami GitLab packages to 13.2.10 or later where applicable.
  • Prioritize remediation for internet-facing Node.js services, applications that process untrusted structured input, and systems where debug functionality may be enabled in production.
  • Search code for uses of node-forge debug APIs and review whether any attacker-controlled input can reach those calls.
  • Add software composition analysis policy to block vulnerable node-forge versions in new builds.
  • If upgrade is delayed, disable production debug paths and reject prototype-pollution keys in untrusted nested input as a temporary control.
  • Perform targeted log and forensic review for suspicious payloads containing __proto__, constructor.prototype, or prototype manipulation strings in requests and job inputs.

The record

Prototype Pollution in node-forge debug API.

Affected packages

Ecosystem Package Introduced Fixed
npm node-forge 0 1.0.0

Related vulnerabilities