☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
CVSS: 10 🐛 CWE-1321
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2023-3696

CVE-2023-3696 — Prototype Pollution in automattic/mongoose
📅 PUBLISHED: 2023-07-17 00:00 UTC 🔄 UPDATED: 2026-08-13 10:06 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 1.21%
👁️
1.21% probability
30.2× above the median CVE
Tier: HIGH
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
10.0
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2023-3696 is a Prototype Pollution vulnerability affecting the Mongoose MongoDB Object Document Mapper (ODM) library for Node.js, with all versions prior to 7.3.4 considered vulnerable. The flaw carries a CVSS score of 10.0, indicating critical severity, and allows an attacker to pollute the JavaScript object prototype, potentially leading to authentication bypass, denial of service, or remote code execution depending on how the application uses the library. Applications exposing Mongoose-based APIs to untrusted input — particularly those processing JSON documents, query parameters, or request bodies that flow into Mongoose operations — are at risk.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Technical Analysis

Prototype Pollution is a JavaScript-specific vulnerability class (CWE-1321) that occurs when an application merges or assigns user-controlled properties into objects without proper validation of the __proto__, constructor.prototype, or prototype keys. In the context of Mongoose, the library's internal schema validation and document casting mechanisms process input data before persisting it to MongoDB. If Mongoose's input handling routines merge attacker-controlled keys into JavaScript objects without sanitizing dangerous prototype-related keys, an attacker can modify Object.prototype globally.

Once Object.prototype is polluted, every JavaScript object in the application process inherits the malicious properties. This global modification can manifest in several ways:

  • Property Injection: Attacker-set properties like isAdmin, role, or status may be inherited by objects that should not contain them, potentially bypassing authorization checks in application logic that relies on default or absent property values.
  • Denial of Service: Polluting properties such as toString or valueOf with non-function values can crash the application when these methods are implicitly invoked during string coercion or comparison operations.
  • Potential Code Execution: In some application contexts, polluted properties that end up in template engines, command execution sinks, or require statements can lead to RCE, though this depends on downstream usage patterns.

The attack vector is the application's ingestion of untrusted JSON or object-like input that eventually reaches Mongoose's internal processing. The NVD description confirms the flaw exists "prior to 7.3.4," indicating the maintainers addressed the issue in that release. Insufficient technical detail is available regarding the exact function names, code paths, or validation gaps that permitted the pollution; however, the vulnerability class is well understood and has been exploited across numerous JavaScript libraries over the past several years.

Exploitation Scenarios

No public PoC or exploit code is available for this CVE. The attack chain described below is inferred from the vulnerability class and standard Prototype Pollution exploitation techniques.

Step 1 — Reconnaissance/Target Identification: An attacker identifies a publicly accessible Node.js application using Mongoose. This can be accomplished via fingerprinting the presence of API endpoints that return MongoDB-backed data, observing error messages that leak stack traces referencing Mongoose internals, or using Shodan-style queries for known MongoDB/interaction signatures. The attacker must also confirm the application accepts JSON input — typically via REST/GraphQL APIs that create, update, or query documents.

Step 2 — Triggering the Flaw: The attacker crafts a JSON payload containing a nested __proto__ key (or constructor.prototype) within any field that Mongoose processes. For example, sending a document creation or update request with a body such as:

{ "name": "attacker", "__proto__": { "isAdmin": true } }

If Mongoose's document casting or schema validation merges this nested object into a plain JavaScript object without filtering dangerous keys, the global Object.prototype becomes polluted with isAdmin = true.

Step 3 — Payload/Execution Method: At the vulnerability-class level, the attacker exploits the recursive merge or assignment of user-controlled keys. The malicious payload is delivered through any request body, query string parameter, or JSON object processed by Mongoose. No specific API endpoint or parameter names are available from the NVD description; the attack succeeds wherever Mongoose handles untrusted objects.

Step 4 — Post-Exploitation Impact: After successful prototype pollution, the attacker can:

  • Bypass authentication/authorization if application logic checks for properties like isAdmin or role that now evaluate truthy via prototype inheritance.
  • Cause application denial-of-service by polluting toString or hasOwnProperty with non-callable values.
  • Escalate to remote code execution in applications where polluted properties flow into unsafe sinks, such as template rendering (pug/ejs), eval-based utilities, or dynamic module loading.

Impact Assessment

The CVSS score of 10.0 (Critical) reflects the maximum severity rating, signaling that exploitation is straightforward, requires no special privileges, and can have severe confidentiality, integrity, and availability impacts. Although the NVD description does not provide the full CVSS vector, the score alone indicates both high attack complexity is low and the potential for complete system compromise.

Business Impact:

  • Confidentiality: Potential unauthorized data access if auth checks are bypassed via polluted properties.
  • Integrity: Attacker-controlled properties can alter application logic, data validation, and stored documents.
  • Availability: Prototype pollution can crash Node.js processes or cause persistent undetected errors.

Affected Systems: All applications using Mongoose below version 7.3.4. Given Mongoose's widespread adoption in Node.js/Express/MongoDB stacks, the blast radius includes enterprise APIs, microservices, IoT backends, and any application exposing MongoDB ORM functionality.

EPSS Note: The EPSS score of 0.01208 (65.4% percentile) indicates a moderate probability of exploitation in the wild. While not currently listed on CISA KEV, the critical CVSS scoring and the well-documented history of Prototype Pollution exploits in real-world attacks warrant immediate attention.

Detection Guidance

Sigma Rule

title: Mongoose Prototype Pollution Attempt (CVE-2023-3696)
id: 3f9e1c2a-8b4d-4e6f-9a1c-2d3e4f5a6b7c
status: experimental
description: Detects attempts to exploit prototype pollution in Mongoose by identifying __proto__ or constructor.prototype keys in JSON request bodies.
logsource:
  category: webserver
  product: generic
detection:
  selection:
    http.request.body|contains:
      - '"__proto__"'
      - '__proto__:'
      - 'constructor.prototype'
      - '"\constructor"'
      - '\constructor\'
  condition: selection
falsepositives:
  - Legitimate use of __proto__ in JSON for debugging or testing environments (rare)
  - Applications that legitimately process JavaScript objects with reserved keys
level: high
tags:
  - attack.t1190
  - cve.2023-3696
  - cwe.1321

YARA Rule

rule Mongoose_Prototype_Pollution_CVE_2023_3696
{
    meta:
        author = "ValtersIT Threat Intel"
        description = "Detect payloads targeting prototype pollution in Mongoose (CVE-2023-3696)"
        cve = "CVE-2023-3696"
        date = "2025-03-13"
        severity = "10"
    strings:
        $s1 = "__proto__" ascii wide
        $s2 = "constructor.prototype" ascii wide
        $s3 = "prototype[" ascii wide nocase
        $s4 = "__proto__[" ascii wide
        $s5 = "polluted" ascii wide nocase
    condition:
        any of ($s1, $s2, $s3, $s4) and any of them
}

Suricata IDS Rule

alert http any any -> $HOME_NET any (msg:"ET EXPLOIT Mongoose Prototype Pollution Attempt (CVE-2023-3696)"; flow:to_server,established; content:"__proto__"; http_client_body; sid:20233696; rev:1; classtype:web-application-attack; reference:cve,2023-3696; metadata:attack_target Web_Server, deployment Perimeter, tag CVE-2023-3696;)

Elastic Detection

sequence by source.ip, destination.ip with maxspan=5m
  [ network where event.type == "connection" and network.protocol == "http" ]
  [ file where event.action == "open" and process.name == "node" and file.name == "package.json" ]
  [ http where event.type == "request" and http.request.body.content contains "__proto__" or http.request.body.content contains "constructor.prototype" ]

Splunk SPL Query

index=web sourcetype=access_combined_wcookie OR sourcetype=iis 
  | regex _raw="__proto__|constructor\.prototype"
  | stats count by src_ip, uri_path, http_method, status
  | sort - count

Wazuh OSSEC Rule

<rule id="157441" level="12">
  <decoded_as>json</decoded_as>
  <field name="url">.*</field>
  <match>__proto__|constructor\.prototype</match>
  <description>CVE-2023-3696: Mongoose Prototype Pollution attempt detected</description>
  <group>mongodb,nodejs,cve_2023_3696,attack_t1190,</group>
</rule>

Mitigation & Patch Guidance

Patch Confidence: 0/4 — UNPATCHED

Immediate Mitigations (1):

  1. Input Sanitization: Implement strict JSON schema validation at the application entry point to reject any object keys containing __proto__, prototype, or constructor before data reaches Mongoose.
  2. Disable Dangerous Merge Semantics: If using Mongoose plugins or custom middleware that recursively merge objects, replace with Object.freeze or deep-clone functions that explicitly strip prototype keys.
  3. Web Application Firewall (WAF): Deploy WAF rules blocking requests containing __proto__ or constructor.prototype in JSON bodies.

Patch/Upgrade Steps (2):

  1. Verify Patch Availability: Continuously monitor the official Mongoose GitHub repository and npm registry for updates beyond 7.3.4. Confirm whether 7.3.4 contains an adequate fix by reviewing the changelog and commit history.
  2. Upgrade Strategy: If the fix is confirmed, upgrade to Mongoose 7.3.4 or later in a staging environment, run regression tests on all CRUD and aggregation operations, then promote to production. If the fix is unconfirmed, remain on the current version and rely on mitigations.

Long-term Hardening (3):

  1. Apply the Object.freeze(Object.prototype) at application startup as a defense-in-depth measure, which prevents any prototype mutation regardless of library flaws.
  2. Adopt Runtime Protection: Integrate Node.js security tools such as npm audit, snyk, or socket.dev into CI/CD to catch vulnerable dependency versions before deployment.
  3. Audit All JavaScript Dependencies for similar Prototype Pollution vectors (CWE-1321), as this class of vulnerability is pervasive across the npm ecosystem.

References

  1. NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2023-3696
  2. Mongoose GitHub Repository: https://github.com/Automattic/mongoose — Monitor for release notes beyond 7.3.4 and discuss the fix in the changelog.
  3. NPM Package Registry: https://www.npmjs.com/package/mongoose — Check for patched versions and security advisories.
  4. OWASP Prototype Pollution Guide: https://owasp.org/www-community/attacks/Prototype_Pollution — Reference for vulnerability class details and mitigation strategies.

Exploit-in-the-Wild Evidence: No public PoC, exploit code, or threat actor campaign associated with CVE-2023-3696 has been observed as of this report. The CVE is not listed on CISA KEV. Attackers commonly chain Prototype Pollution with downstream application logic flaws, so monitoring should focus on abnormal API responses or unauthorized data access patterns post-exploitation.

👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

http.title:"Mongoose"
product:"mongoose"
server:"mongoose"

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2023-3696/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.