GHSA-5rrq-pxf6-6jx5
NoneCVSS
—
EPSS
—
Published
Jan 8, 2022
CISA due date
—
Cloudanix analysis
A vulnerable software component can let specially crafted input interfere with how an application handles data, potentially causing incorrect behavior or outages.
- 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
- Identify an application, service, or packaged distribution that includes a vulnerable node-forge version.
- Find an endpoint, API, job processor, or integration path that passes attacker-controlled data into node-forge debug functionality.
- Send crafted input containing prototype pollution keys or object paths such as __proto__, constructor, or prototype.
- Cause the vulnerable code to modify JavaScript object prototypes in the Node.js process.
- Trigger follow-on application behavior that relies on polluted inherited properties, such as validation, authorization, serialization, or error-handling logic.
- 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
- CVE-2026-33895 Forge (also called `node-forge`) is a native implementation of Transport Layer Security… Also affects node-forge
- CVE-2026-33896 Forge (also called `node-forge`) is a native implementation of Transport Layer Security… Also affects node-forge
- CVE-2026-33894 Forge (also called `node-forge`) is a native implementation of Transport Layer Security… Also affects node-forge
- CVE-2026-33891 Forge (also called `node-forge`) is a native implementation of Transport Layer Security… Also affects node-forge
- GHSA-2328-f5f3-gj25 Forge has a basicConstraints bypass in its certificate chain verification (RFC 5280… Also affects node-forge
- GHSA-q67f-28xg-22rw Forge has signature forgery in Ed25519 due to missing S > L check Also affects node-forge
- GHSA-ppp5-5v6c-4jwp Forge has signature forgery in RSA-PKCS due to ASN.1 extra field Also affects node-forge
- GHSA-5m6q-g25r-mvwx Forge has Denial of Service via Infinite Loop in BigInteger.modInverse() with Zero Input Also affects node-forge