CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-73654

CVE-2026-73654: Prototype Pollution in Trigger.dev leading to Cascading Denial of Service

Alon Barad
Alon Barad
Software Engineer

Aug 13, 2026·6 min read·21 visits

Executive Summary (TL;DR)

Unvalidated JSON path validation in the Trigger.dev metadata update endpoint allows authenticated attackers to pollute Object.prototype, crashing Prisma queries and Prometheus metrics client instances, resulting in a system-wide denial of service.

CVE-2026-73654 is a high-severity prototype pollution vulnerability in Trigger.dev. The flaw occurs during the handling of run-metadata updates through the PUT /api/v1/runs/:runId/metadata endpoint. Because user-supplied keys are parsed directly by the @jsonhero/path library without sanitization, an authenticated attacker with low privileges can pollute the global Object.prototype. This causes database queries via Prisma ORM to fail validation and induces unhandled exceptions in the Prometheus metrics client, resulting in a process-wide denial of service.

Vulnerability Overview

CVE-2026-73654 identifies a high-severity prototype pollution vulnerability located in the core orchestration engine of Trigger.dev, an open-source background jobs and AI workflow platform. The flaw resides in the handling of run-metadata updates through the PUT /api/v1/runs/:runId/metadata API endpoint. Under normal operational conditions, this endpoint allows client applications to dynamically assign metadata payloads to execution states.\n\nAt the core of this vulnerability is the ingestion of user-defined JSON path notations by the @jsonhero/path library. The library processes these inputs without validation or sanitization of path segments. Consequently, the endpoint exposes a vector where unauthorized or low-privileged users can supply keys that traverse beyond the boundaries of local scope.\n\nAn attacker who possesses a standard environment API key can exploit this vulnerability to overwrite properties of the shared runtime base prototype. Because the server processes run metadata updates in the same Node.js execution context as other system processes, the resultant pollution affects all active operations. This leads to system-wide degradation, cascading errors in database drivers, and complete platform denial of service.

Root Cause Analysis

The root cause of CVE-2026-73654 is an improperly controlled modification of object prototype attributes, classified under CWE-1321. The vulnerability exists within the metadata operation processing pipeline defined in packages/core/src/v3/runMetadata/operations.ts. The implementation accepts client-supplied keys to perform fine-grained object manipulation within a run's state metadata.\n\nSpecifically, the application initializes a JSONHeroPath instance with a user-supplied key and invokes the .set() method. The target object is intended to be a simple dictionary representing execution metadata. However, the @jsonhero/path library resolves standard JSON path structures, including keys containing parent and root references, without checking for forbidden property names.\n\nWhen a client specifies a path containing the __proto__ property, the resolver navigates the object hierarchy and references the underlying Object.prototype. The subsequent assignment action writes the specified value directly onto this global prototype object. In Node.js runtimes, all plain JavaScript objects inherit from Object.prototype, meaning any attribute defined here immediately populates all subsequently instantiated objects.

Code Analysis

The vulnerable implementation in packages/core/src/v3/runMetadata/operations.ts processed metadata operations by directly instantiating the path parser on client-controlled keys. The code lacked any verification step prior to invoking the mutation logic on the target metadata structure.\n\ntypescript\n// Vulnerable Code Path\n// User-controlled key was passed directly to the JSONHeroPath constructor\nnew JSONHeroPath(operation.key).set(newMetadata, value);\n\n\nThe remediation applied in commit 6997aeb05e27d2db47f9eda01fdc8a17c81a1ae0 addresses this by implementing a validation guard before any mutation is attempted. The application now iterates over incoming operations and evaluates each operation key using isSafeMetadataKey to block unsafe paths.\n\ntypescript\n// Patched Code Path in packages/core/src/v3/runMetadata/operations.ts\nfor (const operation of Array.isArray(operations) ? operations : [operations]) {\n // Prevent unsafe JSON paths and direct __proto__ assignments from changing Object.prototype.\n if (operation.type !== "update" && !isSafeMetadataKey(operation.key)) {\n unappliedOperations.push(operation);\n continue;\n }\n\n\nThe helper function isSafeMetadataKey in packages/core/src/v3/schemas/common.ts implements a multi-tiered defense against path-based pollution. It blocks both direct manipulation of __proto__ and any JSON path that splits into segments matching forbidden prototype attributes.\n\ntypescript\n// Validation logic in packages/core/src/v3/schemas/common.ts\nconst DANGEROUS_METADATA_KEY_SEGMENTS = new Set(["__proto__", "constructor", "prototype"]);\n\nexport function isSafeMetadataKey(key: string): boolean {\n if (!key.startsWith("$.")) {\n return key !== "__proto__";\n }\n\n return !key.split(/[.[\]'\u0022]+/).some((segment) => DANGEROUS_METADATA_KEY_SEGMENTS.has(segment));\n}\n\n\nThis fix is complete because it addresses all potential path traversal syntaxes that @jsonhero/path parses, including bracket notations and dot-notations. Additionally, it hardens the flattenAttributes utility, preventing telemetry ingestion mechanisms from causing similar pollution.

Exploitation Methodology

Exploitation of CVE-2026-73654 requires low privileges, specifically a standard workspace environment API key. The attacker must first obtain a valid run identifier associated with their workspace environment. This requirement makes the vulnerability accessible to compromised internal accounts or low-privileged workspace members.\n\nTo execute the attack, the adversary structures a PUT request targeting the /api/v1/runs/:runId/metadata endpoint. The body of the request contains an operations array designed to inject a key value that accesses the prototype. The JSON path $.__proto__.corruptedProperty is used as the target key.\n\njson\n{\n "operations": [\n {\n "type": "set",\n "key": "$.__proto__.corruptedProperty",\n "value": "trigger-denial-of-service"\n }\n ]\n}\n\n\nUpon receiving this request, the server executes the set operation, which traverses and updates Object.prototype.corruptedProperty. Once the pollution is achieved, the shared process immediately begins inheriting this property across all object instances. The diagram below illustrates the attack flow and subsequent process failures.\n\nmermaid\ngraph LR\n Attacker[\"Attacker (Low Privilege)\"] -->|HTTP PUT with polluted key| Endpoint[\"/api/v1/runs/:runId/metadata\"]\n Endpoint -->|Resolves $.\u005f\u005fproto\u005f\u005f| Engine[\"JSONHeroPath.set()\"]\n Engine -->|Modifies| Prototype[\"Global Object.prototype\"]\n Prototype -->|Inherited by| Prisma[\"Prisma ORM Builder\"]\n Prototype -->|Inherited by| PromClient[\"prom-client Metrics\"]\n Prisma -->|Validation Failure| DBError[\"Database Query Failure\"]\n PromClient -->|Unhandled Exception| Crash[\"Process Crash (DoS)\"]\n

Impact Assessment

The security impact of CVE-2026-73654 is evaluated as High, with a CVSS v3.1 score of 8.5. The vulnerability allows an authenticated attacker to execute a highly effective Denial of Service (DoS) attack that crosses tenant boundaries. This cross-tenant behavior justifies the Scope (S) parameter being classified as Changed.\n\nBecause Trigger.dev utilizes a shared webapp process architecture for multiple workspaces and tenants, the prototype pollution is not isolated to the attacker's workspace. Every tenant whose requests are handled by the polluted webapp node experiences database access failures due to Prisma ORM query builder crashes. Prisma identifies the polluted key as an invalid query parameter and throws immediate parsing errors.\n\nFurthermore, the Prometheus instrumentation client (prom-client) regularly iterates over global metrics configurations. When it processes properties from the polluted prototype, it encounters unexpected string values where numeric structures or labels are expected, leading to unhandled runtime exceptions. This crashes the main thread of the webapp container, disrupting background workers, authentication checks, and active workflows globally.

Remediation and Mitigation

The primary remediation path for CVE-2026-73654 is to upgrade the Trigger.dev dependency suite and self-hosted instances to version 4.5.6 or later. This release integrates the proper input validation schemas and helper functions to neutralize prototype pollution payloads before they reach the path resolver.\n\nIf an immediate upgrade is not feasible, organizations running self-hosted instances should apply web application firewall (WAF) filtering. The WAF rules must inspect the payload of HTTP PUT requests targeted at paths ending in /metadata. Specifically, the rules must identify and block payloads containing the key words __proto__, constructor, or prototype when formatted inside JSON fields.\n\nAdditionally, developers are advised to audit custom metadata parsing logic to ensure that generic input parsing utilities do not trust unsanitized JSON path inputs. Implementing strict Zod schemas with refinement checks, as demonstrated in the patch, is the recommended security pattern for handling dynamic nested configurations in TypeScript.

Technical Appendix

CVSS Score
8.5/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:L/A:H

Affected Systems

Trigger.dev Self-Hosted PlatformsTrigger.dev Cloud Worker Nodes

Affected Versions Detail

Product
Affected Versions
Fixed Version
trigger.dev
triggerdotdev
>= 3.3.8, < 4.5.64.5.6
AttributeDetail
CWE IDCWE-1321
Attack VectorNetwork (AV:N)
Attack ComplexityLow (AC:L)
Privileges RequiredLow (PR:L)
ScopeChanged (S:C)
Integrity ImpactLow (I:L)
Availability ImpactHigh (A:H)
CVSS Score8.5
Exploit StatusPoC (Proof of Concept)
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1059Command and Scripting Interpreter
Execution
CWE-1321
Improperly Controlled Modification of Object Prototype Attributes

Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution')

Known Exploits & Detection

GitHub Security AdvisoryVulnerability description and proof of concept references in the official repository advisory.

Vulnerability Timeline

Security patch committed to the trigger.dev repository
2026-07-21
Trigger.dev release v4.5.6 tagged and pushed to registry
2026-07-21
Vulnerability formally assigned CVE-2026-73654 and published
2026-08-13

References & Sources

  • [1]GitHub Security Advisory GHSA-p28v-f755-9qrg
  • [2]Fix Commit 6997aeb05e27d2db47f9eda01fdc8a17c81a1ae0
  • [3]Pull Request #4316
  • [4]Release v4.5.6

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 12 hours ago•CVE-2026-11748
6.9

CVE-2026-11748: Unauthenticated LDAP Injection in Central Dogma Server Authentication

An LDAP injection vulnerability exists in the centraldogma-server-auth-shiro module of LY Corporation Central Dogma before version 0.84.0. The search logic dynamically constructs LDAP search filters by interpolating user-provided usernames without escaping RFC 4515 metacharacters. Unauthenticated remote attackers can leverage this flaw to bypass authentication, enumerate directory hierarchies, and access unauthorized resources.

Alon Barad
Alon Barad
7 views•6 min read
•about 13 hours ago•CVE-2026-11746
9.4

CVE-2026-11746: Use of Hard-coded ZooKeeper Replication Secret 'ch4n63m3' in Central Dogma Server

CVE-2026-11746 is a critical vulnerability in Central Dogma Server prior to version 0.84.0, where an embedded ZooKeeper replication secret silently falls back to a publicly known, hard-coded default string ('ch4n63m3'). Remote attackers with access to the replication network can authenticate as legitimate cluster peers, potentially leading to unauthorized data exposure, state manipulation, or complete cluster takeover.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 14 hours ago•CVE-2026-56665
4.2

CVE-2026-56665: Logical Validation Bypass in ZITADEL External JWT Identity Provider

A logical verification flaw in ZITADEL's external JWT Identity Provider validation allows attackers to bypass session expiration checks. If an incoming JWT lacks the 'exp' claim, the system skips validation entirely, creating an indefinitely valid session. This issue has been addressed in versions 3.4.12 and 4.15.2.

Alon Barad
Alon Barad
4 views•7 min read
•about 15 hours ago•CVE-2026-59149
6.5

CVE-2026-59149: Sibling Directory Path Traversal in Mockoon Backend Server

CVE-2026-59149 identifies a directory traversal vulnerability in `@mockoon/commons-server`, the backend mock-server library powering the Mockoon application. The flaw occurs in the path containment validation logic used during raw file response generation. An unauthenticated attacker can exploit this weakness to retrieve arbitrary files from sibling directories sharing a common prefix with the designated static base directory.

Amit Schendel
Amit Schendel
6 views•5 min read
•about 16 hours ago•CVE-2026-59148
8.8

CVE-2026-59148: Unauthenticated Administrative API and CORS Misconfiguration in Mockoon

An in-depth analysis of CVE-2026-59148, a high-severity flaw in Mockoon where unauthenticated administrative endpoints and a wildcard Cross-Origin Resource Sharing (CORS) policy allow remote execution, state poisoning, and credential theft.

Alon Barad
Alon Barad
5 views•6 min read
•about 17 hours ago•CVE-2026-56666
4.8

CVE-2026-56666: Account Takeover via Improper Email Verification in ZITADEL Federated Identity Handler

An improper authentication vulnerability (CWE-287) in ZITADEL's external identity provider handler before version 4.15.3 allows remote attackers to perform complete account takeover. When auto-linking by email is enabled, ZITADEL verifies that the local target account has a verified email address but fails to verify if the external provider confirmed ownership of that same email. Attackers can exploit this by registering an unverified account with a victim's email address on a permissive external provider, leading to unauthorized account binding and persistent access.

Amit Schendel
Amit Schendel
2 views•7 min read