Cloudanix VulnDB

CVE-2024-39008

Critical · 10.0

CVSS

10.0

EPSS

0.9%

Published

Jul 1, 2024

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

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.

Chainable
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

  1. Discover an application or API that accepts attacker-controlled structured input.
  2. Send probe payloads containing prototype-pollution keys such as __proto__, constructor, or prototype.
  3. Observe behavioral changes, errors, response differences, or reflected polluted properties that indicate successful pollution.
  4. Refine the payload to influence a security-sensitive property used by application logic.
  5. Trigger the affected code path after pollution so the application reads the injected inherited property.
  6. 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