CVE-2024-38999

10.0 CRITICAL

📋 TL;DR

CVE-2024-38999 is a prototype pollution vulnerability in requirejs v2.3.6 that allows attackers to inject arbitrary properties into object prototypes, potentially leading to arbitrary code execution or denial of service. This affects any application using the vulnerable version of requirejs for JavaScript module loading. Attackers can exploit this by manipulating the configuration context.

💻 Affected Systems

Products:
  • jrburke requirejs
Versions: 2.3.6
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Any application using requirejs v2.3.6 for JavaScript module loading is vulnerable regardless of operating system.

⚠️ 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 theft, or persistent backdoor installation.

🟠

Likely Case

Denial of service through application crashes or instability, with potential for limited code execution in specific configurations.

🟢

If Mitigated

Application instability or crashes without full system compromise if proper sandboxing and input validation are in place.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Proof of concept available in public gists, exploitation requires attacker to control input to s.contexts._.configure function.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.3.7 or later

Vendor Advisory: https://github.com/requirejs/requirejs

Restart Required: Yes

Instructions:

1. Update requirejs dependency to version 2.3.7 or later. 2. Update package.json or equivalent dependency file. 3. Run npm update requirejs or equivalent package manager command. 4. Restart all affected applications and services.

🔧 Temporary Workarounds

Input validation and sanitization

all

Implement strict input validation for all configuration inputs to requirejs

Object.freeze on prototypes

all

Use Object.freeze() to prevent modification of object prototypes

Object.freeze(Object.prototype);
Object.freeze(Object.getPrototypeOf({}));

🧯 If You Can't Patch

  • Implement strict input validation and sanitization for all requirejs configuration inputs
  • Deploy web application firewall (WAF) rules to detect and block prototype pollution attempts

🔍 How to Verify

Check if Vulnerable:

Check package.json or equivalent for requirejs version 2.3.6. Run: npm list requirejs or check installed modules.

Check Version:

npm list requirejs | grep requirejs

Verify Fix Applied:

Verify requirejs version is 2.3.7 or later. Run: npm list requirejs and confirm version.

📡 Detection & Monitoring

Log Indicators:

  • Unusual configuration requests to requirejs
  • Application crashes with prototype-related errors
  • Unexpected property assignments in JavaScript objects

Network Indicators:

  • HTTP requests with unusual configuration payloads
  • Patterns matching prototype pollution attempts in POST data

SIEM Query:

source="application_logs" AND ("requirejs" AND ("configure" OR "prototype")) AND status="error"

🔗 References

📤 Share & Export