<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>Trigger.dev (3.3.8 - 4.5.5) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/trigger.dev-3.3.8---4.5.5/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Fri, 14 Aug 2026 02:03:29 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/trigger.dev-3.3.8---4.5.5/feed.xml" rel="self" type="application/rss+xml"/><image><url>https://feed.craftedsignal.io/favicon-32x32.png</url><title>CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/</link><width>32</width><height>32</height></image><webfeeds:icon>https://feed.craftedsignal.io/favicon.svg</webfeeds:icon><item><title>Prototype Pollution in Trigger.dev Run Metadata API</title><link>https://feed.craftedsignal.io/briefs/2026-08-trigger-dev-prototype-pollution/</link><pubDate>Fri, 14 Aug 2026 02:03:29 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-08-trigger-dev-prototype-pollution/</guid><description>An unauthenticated-accessible prototype pollution vulnerability in the Trigger.dev metadata API allows low-privileged attackers to corrupt the global object, leading to cross-tenant denial of service and process crashes via CVE-2026-73654.</description><content:encoded><![CDATA[<p>Trigger.dev versions 3.3.8 through 4.5.5 are vulnerable to prototype pollution via the <code>PUT /api/v1/runs/:runId/metadata</code> endpoint. The vulnerability exists because the application passes attacker-controlled <code>operation.key</code> inputs directly into the <code>JSONHeroPath.set()</code> method without sanitization. This allows an attacker possessing a valid environment API key to inject properties into <code>Object.prototype</code>, which is inherited by all objects in the webapp process. Because Trigger.dev operates as a multi-tenant web application, this pollution corrupts internal state across tenants, including Prisma query objects and Prometheus metrics. The contamination results in authentication failures for other tenants and triggers uncaught exceptions that cause the entire webapp process to crash, enabling a persistent denial-of-service attack.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker authenticates to the Trigger.dev instance using a standard, low-privileged environment API key.</li>
<li>Attacker crafts a malicious <code>PUT</code> request to the <code>/api/v1/runs/:runId/metadata</code> endpoint.</li>
<li>The request body includes an <code>operation.key</code> value set to <code>$.__proto__.polluted</code> (or similar prototype path).</li>
<li>The <code>applyMetadataOperations()</code> function in <code>packages/core/src/v3/runMetadata/operations.ts</code> receives the untrusted key.</li>
<li><code>JSONHeroPath</code> processes the key and executes <code>.set()</code> on the <code>newMetadata</code> object, inadvertently writing to <code>Object.prototype</code>.</li>
<li>Global process state is corrupted; subsequent database queries (e.g., via Prisma) fail because they now inherit unexpected properties.</li>
<li>Third-party libraries (e.g., Prometheus <code>prom-client</code>) encounter validation errors due to the polluted object structure, causing an <code>uncaughtException</code>.</li>
<li>The webapp process crashes, resulting in service denial for all tenants, repeating upon subsequent requests (crash-loop).</li>
</ol>
<h2 id="impact">Impact</h2>
<p>The vulnerability enables a complete cross-tenant denial of service. A single authenticated request can crash the entire webapp process. Beyond availability, the ability to pollute <code>Object.prototype</code> serves as a primitive for further exploitation, such as logic or authentication bypasses, depending on the gadgets present in the runtime environment.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade Trigger.dev instances immediately to version 4.5.6 or later to include the prototype pollution guards.</li>
<li>Audit existing logs for anomalous <code>PUT</code> requests to the metadata API containing suspicious path segments like <code>__proto__</code>, <code>constructor</code>, or <code>prototype</code>.</li>
<li>Ensure that any custom middleware or API extensions for metadata processing use <code>Object.create(null)</code> for storage and implement strict allow-listing for JSON path keys.</li>
<li>Implement request schema validation to strictly enforce expected character sets and patterns for API metadata keys.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>prototype-pollution</category><category>rce</category><category>vulnerability</category><category>webserver</category></item></channel></rss>