CVE-2021-23373

7.5 HIGH

📋 TL;DR

CVE-2021-23373 is a prototype pollution vulnerability in the set-deep-prop npm package that allows attackers to modify object prototypes, potentially leading to denial of service, remote code execution, or privilege escalation. Any application using this package is affected, particularly Node.js applications that process untrusted user input.

💻 Affected Systems

Products:
  • set-deep-prop npm package
Versions: All versions before patching
Operating Systems: All operating systems running Node.js
Default Config Vulnerable: ⚠️ Yes
Notes: Any Node.js application using set-deep-prop with untrusted input is vulnerable regardless of configuration.

📦 What is this software?

⚠️ Manual Verification Required

This CVE does not have specific version information in our database, so automatic vulnerability detection cannot determine if your system is affected.

Why? The CVE database entry doesn't specify which versions are vulnerable (no version ranges provided by the vendor/NVD).

🔒 Custom verification scripts are available for registered users. Sign up free to download automated test scripts.

Recommended Actions:
  1. Review the CVE details at NVD
  2. Check vendor security advisories for your specific version
  3. Test if the vulnerability is exploitable in your environment
  4. Consider updating to the latest version as a precaution

⚠️ Risk & Real-World Impact

🔴

Worst Case

Remote code execution leading to complete system compromise, data exfiltration, or lateral movement within the network.

🟠

Likely Case

Denial of service through application crashes or unexpected behavior, potentially leading to data corruption.

🟢

If Mitigated

Limited impact if input validation and sanitization are properly implemented, restricting prototype pollution vectors.

🌐 Internet-Facing: HIGH - Web applications using this package with user-controlled input are directly exploitable.
🏢 Internal Only: MEDIUM - Internal applications may still be vulnerable if they process untrusted data from internal sources.

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

Prototype pollution exploits are well-documented and relatively easy to weaponize given the right conditions.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Version 1.0.1 or later

Vendor Advisory: https://security.snyk.io/vuln/SNYK-JS-SETDEEPPROP-1083231

Restart Required: Yes

Instructions:

1. Update package.json to use set-deep-prop version 1.0.1 or higher. 2. Run 'npm update set-deep-prop'. 3. Restart the application to load the patched version.

🔧 Temporary Workarounds

Input validation and sanitization

all

Implement strict input validation to prevent prototype pollution by sanitizing user-controlled objects before passing to set-deep-prop.

Use Object.freeze() on prototypes

all

Freeze Object.prototype and other critical prototypes to prevent modification.

Object.freeze(Object.prototype);
Object.freeze(Object.prototype.__proto__);

🧯 If You Can't Patch

  • Remove or replace set-deep-prop with alternative libraries that don't have prototype pollution issues.
  • Implement strict Content Security Policies and network segmentation to limit potential damage from exploitation.

🔍 How to Verify

Check if Vulnerable:

Check package.json or package-lock.json for set-deep-prop version. Versions below 1.0.1 are vulnerable.

Check Version:

npm list set-deep-prop

Verify Fix Applied:

Verify set-deep-prop version is 1.0.1 or higher in package.json and that the application loads this version.

📡 Detection & Monitoring

Log Indicators:

  • Unexpected application crashes
  • Unusual prototype modifications in error logs
  • Suspicious object property assignments

Network Indicators:

  • Unusual outbound connections from the application
  • Requests containing prototype pollution payloads

SIEM Query:

source="application_logs" AND ("prototype" OR "__proto__") AND ("pollution" OR "modification" OR "unexpected")

🔗 References

📤 Share & Export