CVE-2024-39008
Critical · 10.0CVSS
10.0
EPSS
0.9%
Published
Jul 1, 2024
CISA due date
—
Cloudanix analysis
A vulnerable software component may let attackers tamper with how an application handles data, potentially causing outages or full compromise if exposed to untrusted input.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Remote Code Execution
- Component
- Library
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
CVE-2024-39008 is a prototype pollution vulnerability in robinweser fast-loops v1.1.3, specifically in the objectMergeDeep function. If attacker-controlled input is passed into this deep-merge routine, special JavaScript object keys such as __proto__, constructor, or prototype can be merged into Object.prototype or other shared prototypes. This can alter application behavior globally, bypass security checks, corrupt data assumptions, trigger denial of service, and, in applications with exploitable gadget chains, potentially lead to arbitrary code execution. The practical impact depends heavily on how the library is used by the consuming application and whether polluted properties influence sensitive logic such as templating, command execution, authorization, serialization, or configuration handling.
Why it matters to the business
Applications that use the vulnerable fast-loops merge functionality on untrusted input may be exposed to critical compromise scenarios, including service outages, unauthorized access, data exposure, or remote code execution. Because this is a library-level issue, exposure may exist indirectly through application dependencies and may not be obvious from externally visible product banners. The vulnerability is not currently listed in CISA KEV, has no reported ransomware association, and has a low EPSS score, suggesting no strong evidence of broad exploitation at this time; however, the CVSS score is critical because exploitation can be unauthenticated and highly impactful when reachable in application code.
How an attack unfolds
An attacker first identifies an application endpoint or workflow that accepts structured input such as JSON, form data, query parameters, configuration objects, or API payloads. They then submit a payload containing prototype-pollution keys such as __proto__, constructor, or prototype with attacker-chosen nested properties. If the application passes that input into fast-loops v1.1.3 objectMergeDeep without filtering dangerous keys, the merge operation can write those properties into a shared prototype. After pollution, subsequent application logic may read attacker-supplied inherited properties as if they were legitimate object fields. This can cause crashes, logic manipulation, security control bypass, or code execution if the polluted property influences a dangerous sink such as a template engine option, process-spawning parameter, eval-like behavior, deserialization path, or server-side rendering configuration.
How to fix it
Remove or upgrade the vulnerable dependency wherever fast-loops v1.1.3 is present. No fixed version was provided in the input, so security teams should verify the upstream package status, update to a patched release if available, or replace the package with a maintained alternative that safely handles deep merges. If immediate replacement is not possible, avoid passing untrusted input into objectMergeDeep, and add defensive filtering that rejects or strips __proto__, prototype, and constructor keys at every nested level before merge operations. Use safe merge utilities that create null-prototype objects where appropriate and explicitly block prototype mutation. Add dependency scanning to detect direct and transitive use of fast-loops v1.1.3, regenerate lockfiles after remediation, and redeploy affected applications.
How to confirm the fix worked
Confirm remediation by inspecting package manifests and lockfiles for fast-loops v1.1.3, including transitive dependency paths. Run package-manager queries such as npm ls fast-loops, yarn why fast-loops, or pnpm why fast-loops in each JavaScript project. Validate that the vulnerable version is absent or replaced by a patched or mitigated version. Add unit or integration tests that submit nested payloads containing __proto__, constructor.prototype, and prototype keys and verify that Object.prototype is not modified after merge operations. In running services, perform controlled testing in a non-production environment to ensure malicious merge payloads are rejected or treated as ordinary inert data without changing application behavior.
Typical attack path
- Discover an application or API that accepts attacker-controlled structured input.
- Send probe payloads containing prototype-pollution keys such as __proto__, constructor, or prototype.
- Observe behavioral changes, errors, response differences, or reflected polluted properties that indicate successful pollution.
- Refine the payload to influence a security-sensitive property used by application logic.
- Trigger the affected code path after pollution so the application reads the injected inherited property.
- Exploit the resulting condition to cause denial of service, bypass logic checks, alter application behavior, or reach code execution if a suitable gadget exists.
How to detect it
To assess prior exploitation, review API gateway, reverse proxy, WAF, application, and error logs for requests containing prototype-pollution keys such as __proto__, constructor.prototype, or nested prototype fields in JSON bodies, query strings, form posts, GraphQL variables, or encoded payloads. Look for suspicious follow-on behavior after such requests, including unexpected authorization decisions, sudden configuration changes, unexplained crashes, increased 5xx errors, TypeError exceptions, JavaScript heap or recursion failures, or anomalous child process execution by Node.js services. In application logs, search for references to objectMergeDeep near malformed input handling or merge errors. For forensic review, inspect dependency manifests and lockfiles to confirm whether fast-loops v1.1.3 was deployed at the time of suspicious activity. Because this vulnerability does not produce a universal file, process, or network artifact, detection should focus on exploit payload patterns and application-specific consequences of polluted object properties.
- __proto__
- constructor.prototype
- prototype%5D
- __proto__%5D
- constructor%5Bprototype%5D
- "__proto__"
- "constructor":{"prototype"
- objectMergeDeep
- node_modules/fast-loops
- TypeError: Cannot convert undefined or null to object
- RangeError: Maximum call stack size exceeded
- child_process.exec
- child_process.spawn
What your security team should do
- Inventory all JavaScript and Node.js applications for direct or transitive use of fast-loops v1.1.3.
- Prioritize remediation for internet-facing services, APIs processing JSON or user-supplied objects, and applications using objectMergeDeep on request data.
- Upgrade, replace, or patch the vulnerable dependency; if no safe upstream version is available, remove use of objectMergeDeep for untrusted input.
- Add input validation that recursively blocks __proto__, constructor, and prototype keys before any deep merge operation.
- Search application code for objectMergeDeep call sites and determine whether attacker-controlled data can reach them.
- Add regression tests to confirm prototype pollution payloads cannot modify Object.prototype or application configuration objects.
- Monitor application, API gateway, and WAF logs for prototype-pollution probes, especially payloads containing __proto__ or constructor.prototype.
- Because there is no KEV listing, no ransomware flag, and low EPSS at this time, handle as critical where reachable rather than assuming universal emergency exposure across all applications.
The record
robinweser fast-loops v1.1.3 was discovered to contain a prototype pollution via the function objectMergeDeep. This vulnerability allows attackers to execute arbitrary code or cause a Denial of Service (DoS) via injecting arbitrary properties.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| npm | fast-loops | 0 | 1.1.4 |
Related vulnerabilities
- CVE-2026-104852 GraphQL Tools provides utilities for building, stitching, and mocking GraphQL schemas. CWE-1321
- CVE-2026-104849 Tinypool is a minimal Node.js worker thread pool implementation. CWE-1321
- CVE-2026-104848 Tinypool is a minimal Node.js worker thread pool implementation. CWE-1321
- CVE-2026-104183 stream-json is a micro-library of stream components for processing JSON and JSONC with a… CWE-1321
- CVE-2026-102992 piscina is a node.js worker pool implementation. CWE-1321
- CVE-2026-101908 Axios is a promise-based HTTP client for the browser and Node.js. CWE-1321
- CVE-2026-101909 Axios is a promise-based HTTP client for the browser and Node.js. CWE-1321
- CVE-2026-101902 Axios is a promise-based HTTP client for the browser and Node.js. CWE-1321