Executive brief
Trigger.dev's run metadata update API endpoint fails to validate user-supplied object property paths, allowing an attacker with a normal API key to pollute the JavaScript Object.prototype. This single request corrupts the entire application process, breaking authentication for other tenants' workers and crashing the shared multi-tenant webapp service, causing full denial of service for all users.
Technical details
The vulnerability is a prototype pollution flaw in `PUT /api/v1/runs/:runId/metadata` endpoint (packages/core/src/v3/runMetadata/operations.ts). The endpoint accepts client-supplied metadata update operations with an attacker-controlled `operation.key` parameter, which is passed directly to `new JSONHeroPath(operation.key).set(newMetadata, value)` without validation. The underlying `@jsonhero/path@1.0.21` library does not reject dangerous path segments like `__proto__`, `constructor`, or `prototype`. An attacker sending a request with `key: "$.__proto__.polluted"` sets `Object.prototype.polluted` in the webapp process. Since every plain object inherits from Object.prototype, this single request contaminates all subsequent code execution process-wide and across all tenants. The attack requires only a normal, low-privilege environment API key and no user interaction. The pollution breaks Prisma query building (unknown field errors), breaks authentication in `findEnvironmentByApiKey`, and triggers an uncaught exception in the Prometheus metrics client that crashes the entire webapp process. Fixed in version 4.5.6.
Affected products
- Trigger.dev @trigger.dev/core >= 3.3.8, <= 4.5.5
Timeline
- 2026-08-13: disclosed: Published to GitHub Advisory Database
- 2026-08-13: patched: Fixed in version 4.5.6
- 2025-01-08: other: Vulnerability introduced in commit 34f8bd588 (PR #1563) at SDK version 3.3.8
References
- https://api.github.com/users/MatiasTilleriasLey
- https://github.com/MatiasTilleriasLey
- https://api.github.com/users/MatiasTilleriasLey/gists%7B/gist_id%7D
- https://api.github.com/users/MatiasTilleriasLey/repos
- https://avatars.githubusercontent.com/u/136657682?v=4
- https://api.github.com/users/MatiasTilleriasLey/events%7B/privacy%7D