{"items":[{"id":"NVI-00013168","kind":"vulnerability","title":"Trigger.dev: Run replay injects a task run into an attacker-chosen environment (cross-tenant write)","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-qxpp-qjg8-x4jv"],"plain_summary":"GitHub lists this reviewed advisory for trigger.dev. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-812bb6e5baf9dcafbf56c94dca900ff3"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-10-02T19:31:17.000Z","value":"7.1 high","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-812bb6e5baf9dcafbf56c94dca900ff3"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-812bb6e5baf9dcafbf56c94dca900ff3","url":"https://github.com/advisories/GHSA-qxpp-qjg8-x4jv","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-qxpp-qjg8-x4jv","publisher":"GitHub Advisory Database","observed_at":"2026-11-01T01:40:00.567Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-812bb6e5baf9dcafbf56c94dca900ff3"],"technology":"trigger.dev","known_exclusions":[],"conditions_summary":"### Summary\nThe dashboard replay action authorizes the source run (it must belong to the caller's org), but the target environment for the replayed run is taken verbatim from the request body and is never checked for org or project membership. The environment lookup used by the replay path filters by id only. As a result, an authenticated user can replay one of their own runs into another organization's or project's environment, creating a task run there that consumes the victim tenant's queue and compute and pollutes their run history.\n\n### Details\nThe replay action member-scopes the source run correctly (apps/webapp/app/routes/resources.taskruns.$runParam.replay.ts, the findFirst on taskRun filtered by `project.organization.members.some.userId`), but passes the target environment straight from the submitted form, resources.taskruns.$runParam.replay.ts:344-346:\n```js\nconst replayRunService = new ReplayTaskRunService();\nconst newRun = await replayRunService.call(taskRun, {\n  environmentId: submission.value.environment,   // attacker-controlled, unvalidated\n  payload: submission.value.payload,\n  ...\n});\n```\n`submission.value.environment` comes from ReplayRunData (apps/webapp/app/v3/","public_affected_ranges":["< 4.5.2"]}],"null_published_at":"2026-11-01T07:29:12.927Z","source_updated_at":"2026-10-02T19:31:17.000Z","source_disclosed_at":"2026-10-02T19:31:17.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-11-01T01:40:00.567Z"}],"next_cursor":null,"snapshot_revision":"42594"}