Skip to content

Commit 91fd8a8

Browse files
authored
chore(security): close dependabot alerts q2 (#3456)
Closes ~80 dependabot alerts (3 critical, ~25 high, ~31 medium) by bumping direct deps where possible and narrowly overriding the rest. Cloud uses `resend` email transport and Node 20 - all bumps are safe for both cloud and self-hosters. ## Direct upgrades | Package | Where | From | To | Why | |---|---|---|---|---| | `vite` | root devDeps | ^5.4.21 | *(removed)* | dead pin; vitest pulls vite transitively | | `dompurify` | apps/webapp | ^3.2.6 | ^3.4.1 | XSS CVEs | | `effect` | apps/webapp | ^3.11.7 | ^3.21.2 | AsyncLocalStorage CVE in Effect fibers | | `nodemailer` | internal-packages/emails | ^7.0.11 | ^8.0.6 | SMTP CRLF injection (only affects self-hosters w/ smtp/aws-ses transport) | | `uuid` | apps/webapp | ^9.0.0 | ^14.0.0 | buffer bounds check; ESM-only but bundled by Remix | | `uuid` + `@types/uuid` | packages/trigger-sdk | ^9.0.0 | *(removed)* | dead deps, no usage | | `@types/uuid` | apps/webapp | ^9.0.0 | *(removed)* | uuid 14 ships its own types | | `tar` | packages/cli-v3 | ^7.5.4 | ^7.5.13 | path traversal CVEs | | `testcontainers` + `@testcontainers/postgresql` + `@testcontainers/redis` | internal-packages/testcontainers | ^10.28.0 | ^11.14.0 | dev/test cleanup; one-line API fix for `RedisContainer(image)` | | `rimraf` | webapp + 6 packages | ^3.0.2 / ^5.0.7 | ^6.0.1 | dev/build tool consolidation | ## Scoped overrides All bound by both `>=` and `<` to avoid major-version yanks. | Override | Closes | |---|---| | `tar@>=7 <7.5.11` → `^7.5.11` | supervisor's `@kubernetes/client-node 1.0.0` chain | | `axios@>=1.0.0 <1.15.0` → `^1.15.0` | replaces older 1.9.0 pin | | `systeminformation@>=5.0.0 <5.31.0` → `^5.31.0` | bumps existing 5.27.14 pin | | `lodash@>=4.0.0 <4.18.0` → `^4.18.0` | bumps existing 4.17.23 pin | | `lodash-es@>=4.0.0 <4.18.0` → `^4.18.0` | new (mirrors lodash) | | `dompurify@>=3 <3.4.0` → `^3.4.1` | catches transitive dompurify via mermaid | | `vite@>=5.0.0 <6.4.2` → `^6.4.2` | path traversal; vite 5 has no patch | | `rollup@>=4 <4.59.0` → `^4.59.0` | path traversal in vite/vitest chain | | `flatted@>=3 <3.4.2` → `^3.4.2` | prototype pollution in eslint flat-cache | | `picomatch@>=2 <2.3.2` → `^2.3.2` | ReDoS in 2.x branch (transitive) | | `picomatch@>=4 <4.0.4` → `^4.0.4` | ReDoS in 4.x branch (vitest/tinyglobby) | | `minimatch@>=3 <3.1.3` → `^3.1.3` | ReDoS in eslint 8 chain | | `protobufjs@>=7 <7.5.5` → `^7.5.5` | **critical** RCE via @opentelemetry/otlp-transformer | | `fast-xml-parser@>=4 <4.5.5` → `^4.5.5` | DOCTYPE bypass + others (4.x branch via aws-sdk in supervisor) | | `fast-xml-parser@>=5 <5.7.0` → `^5.7.0` | **critical** + others (5.x branch via aws-sdk in webapp) | | `path-to-regexp@>=0.1 <0.1.13` → `^0.1.13` | ReDoS in express 4 / @remix-run/express | | `ajv@>=8 <8.18.0` → `^8.18.0` | DoS | | `socket.io-parser@>=4 <4.2.6` → `^4.2.6` | DoS in @trigger.dev/core's socket.io | | `postcss@>=8 <8.5.10` → `^8.5.10` | XSS via stringify | | `yaml@>=2 <2.8.3` → `^2.8.3` | DoS | | `semver@>=5 <5.7.2` → `^5.7.2` | ReDoS in 5.x | | `defu@>=6 <6.1.5` → `^6.1.5` | prototype pollution via __proto__ in @prisma/config c12 chain | ## Dismissed (~47) | Reason | Cluster | Count | |---|---|---| | `not_used` | langsmith + next 15.x in references/* | 10 | | `not_used` | minimatch 8.x via prisma-generator-ts-enums (references/prisma-6) | 3 | | `not_used` | basic-ftp via puppeteer in references/hello-world + references/seed | 2 | | `not_used` | hono / @hono/node-server / express-rate-limit / path-to-regexp 8.x / @modelcontextprotocol/sdk - all via mcp-sdk chain (dormant in webapp; dev-only localhost in cli-v3) | 22 | | `not_used` | fastify / @fastify/static / file-type via evalite devDep | 5 | | `tolerable_risk` | rollup 3 + minimatch 5/8/9/10 dev/build tooling | 13 | ## Notes - **mcp-sdk chain**: `@vercel/sdk` in webapp imports `Vercel` API client only; `mcp-server/*` subpath isn't loaded at runtime. cli-v3's MCP server runs only via `trigger mcp` on developer machines. Bumping `@modelcontextprotocol/sdk` to latest (1.29.0) wouldn't close these alerts anyway - it ships hono ^4.11.4 which is still vulnerable - so dismissal is the cleaner call. - **References ignore list**: confirmed with current dependabot ignore config; added `references/seed/package.json` (only gap). - **undici** alerts (CVE-2026-1527, 4 alerts) will auto-close: lockfile already at 6.25.0 > patched 6.24.0; just needs Dependabot rescan. - **Effect 3.20 fix** is a runtime-only scheduler fix, no public API changes - verified with research agent against our four `effect/*` imports. - **uuid 14** is ESM-only; we only call `validate`/`version` (no crypto needed) so Node 20 requirement isn't load-bearing for us. ## Public packages (`packages/*`) Minimal surface, deliberately. None of these change published runtime behaviour - all changesets-worthy public package changes are deferred to a regular release pass. | Package | Change | Runtime impact | |---|---|---| | `packages/trigger-sdk` | Removed dead `uuid` dep (no source imports) | None - dep was unused | | `packages/cli-v3` | `tar` ^7.5.4 → ^7.5.13 | Patch bump within already-allowed 7.x range; nothing CLI consumers see | | `packages/core` / `packages/build` / `packages/python` / `packages/rsc` / `packages/react-hooks` / `packages/schema-to-json` | `rimraf` ^3.0.2 → ^6.0.1 in devDeps | Build-time only, no runtime change | No changeset added because nothing in these packages affects what published consumers run. ## Validation - Webapp typecheck (forced, no cache) passes after every commit - Smoke-tested testcontainers v11 changes via real `postgresTest` + `redisTest` (sync.test.ts, releaseConcurrency.test.ts) - both pass - Webapp built + verified `require("uuid")` no longer in CJS server output (now bundled inline) - Test env webapp deployed at `dependabot-q2.rc0` (cloud#740) - no issues observed - Test suite run with package prerelease passed
1 parent 9e99c81 commit 91fd8a8

13 files changed

Lines changed: 791 additions & 925 deletions

File tree

apps/webapp/package.json

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,9 @@
147147
"cross-env": "^7.0.3",
148148
"cuid": "^2.1.8",
149149
"date-fns": "^4.1.0",
150-
"dompurify": "^3.2.6",
150+
"dompurify": "^3.4.1",
151151
"dotenv": "^16.4.5",
152-
"effect": "^3.11.7",
152+
"effect": "^3.21.2",
153153
"emails": "workspace:*",
154154
"eventsource": "^4.0.0",
155155
"evt": "^2.4.13",
@@ -227,7 +227,7 @@
227227
"tiny-invariant": "^1.2.0",
228228
"ulid": "^2.3.0",
229229
"ulidx": "^2.2.1",
230-
"uuid": "^9.0.0",
230+
"uuid": "^14.0.0",
231231
"ws": "^8.11.0",
232232
"zod": "3.25.76",
233233
"zod-error": "1.5.0",
@@ -249,7 +249,6 @@
249249
"@types/bcryptjs": "^2.4.2",
250250
"@types/compression": "^1.7.2",
251251
"@types/cookie": "^0.6.0",
252-
"@types/dompurify": "^3.2.0",
253252
"@types/eslint": "^8.4.6",
254253
"@types/express": "^4.17.13",
255254
"@types/humanize-duration": "^3.27.1",
@@ -270,7 +269,6 @@
270269
"@types/slug": "^5.0.3",
271270
"@types/supertest": "^6.0.2",
272271
"@types/tar": "^6.1.4",
273-
"@types/uuid": "^9.0.0",
274272
"@types/ws": "^8.5.3",
275273
"@typescript-eslint/eslint-plugin": "^5.59.6",
276274
"@typescript-eslint/parser": "^5.59.6",
@@ -292,7 +290,7 @@
292290
"prettier": "^2.8.8",
293291
"prettier-plugin-tailwindcss": "^0.3.0",
294292
"prop-types": "^15.8.1",
295-
"rimraf": "^3.0.2",
293+
"rimraf": "^6.0.1",
296294
"style-loader": "^3.3.4",
297295
"supertest": "^7.0.0",
298296
"tailwind-scrollbar": "^3.0.1",

apps/webapp/remix.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ module.exports = {
3131
"parse-duration",
3232
"uncrypto",
3333
"std-env",
34+
"uuid",
3435
],
3536
browserNodeBuiltinsPolyfill: {
3637
modules: {

internal-packages/emails/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313
"@aws-sdk/client-sesv2": "^3.716.0",
1414
"@react-email/components": "0.0.16",
1515
"@react-email/render": "^0.0.12",
16-
"nodemailer": "^7.0.11",
16+
"nodemailer": "^8.0.6",
1717
"react": "^18.2.0",
1818
"react-email": "^2.1.1",
1919
"resend": "^3.2.0",
2020
"tiny-invariant": "^1.2.0",
2121
"zod": "3.25.76"
2222
},
2323
"devDependencies": {
24-
"@types/nodemailer": "^7.0.4",
24+
"@types/nodemailer": "^8.0.0",
2525
"@types/react": "18.2.69"
2626
},
2727
"engines": {

internal-packages/otlp-importer/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
},
2929
"devDependencies": {
3030
"@types/node": "^20",
31-
"rimraf": "^3.0.2",
31+
"rimraf": "^6.0.1",
3232
"ts-proto": "^1.167.3"
3333
},
3434
"engines": {

internal-packages/testcontainers/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
"ioredis": "^5.3.2"
1616
},
1717
"devDependencies": {
18-
"@testcontainers/postgresql": "^10.28.0",
19-
"@testcontainers/redis": "^10.28.0",
18+
"@testcontainers/postgresql": "^11.14.0",
19+
"@testcontainers/redis": "^11.14.0",
2020
"@trigger.dev/core": "workspace:*",
2121
"std-env": "^3.9.0",
22-
"testcontainers": "^10.28.0",
22+
"testcontainers": "^11.14.0",
2323
"tinyexec": "^0.3.0"
2424
},
2525
"scripts": {

internal-packages/testcontainers/src/utils.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,9 @@ export async function createRedisContainer({
7575
port?: number;
7676
network?: StartedNetwork;
7777
}) {
78-
let container = new RedisContainer().withExposedPorts(port ?? 6379).withStartupTimeout(120_000); // 2 minutes
78+
let container = new RedisContainer("redis:7.2")
79+
.withExposedPorts(port ?? 6379)
80+
.withStartupTimeout(120_000); // 2 minutes
7981

8082
if (network) {
8183
container = container.withNetwork(network).withNetworkAliases("redis");
@@ -97,7 +99,7 @@ export async function createRedisContainer({
9799
const [error] = await tryCatch(verifyRedisConnection(startedContainer));
98100

99101
if (error) {
100-
await startedContainer.stop({ timeout: 30 });
102+
await startedContainer.stop({ timeout: 30_000 });
101103
throw new Error("verifyRedisConnection error", { cause: error });
102104
}
103105

@@ -236,7 +238,7 @@ export async function useContainer<TContainer extends StartedTestContainer>(
236238
metadata.useDurationMs = useDurationMs;
237239
} finally {
238240
// WARNING: Testcontainers by default will not wait until the container has stopped. It will simply issue the stop command and return immediately.
239-
// If you need to wait for the container to be stopped, you can provide a timeout. The unit of timeout option here is second
240-
await logCleanup(name, container.stop({ timeout: 10 }), metadata);
241+
// If you need to wait for the container to be stopped, you can provide a timeout. The unit of timeout option here is milliseconds (changed from seconds in testcontainers v11)
242+
await logCleanup(name, container.stop({ timeout: 10_000 }), metadata);
241243
}
242244
}

package.json

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@
6262
"tsx": "^3.7.1",
6363
"turbo": "^1.10.3",
6464
"typescript": "5.5.4",
65-
"vite": "^5.4.21",
6665
"vite-tsconfig-paths": "^4.0.5",
6766
"vitest": "3.1.4"
6867
},
@@ -90,17 +89,35 @@
9089
"@types/node": "20.14.14",
9190
"express@^4>body-parser": "1.20.3",
9291
"@remix-run/dev@2.17.4>tar-fs": "2.1.4",
93-
"testcontainers@10.28.0>tar-fs": "3.1.1",
92+
"tar@>=7 <7.5.11": "^7.5.11",
9493
"form-data@^2": "2.5.4",
9594
"form-data@^3": "3.0.4",
9695
"form-data@^4": "4.0.4",
97-
"axios@1.9.0": ">=1.12.0",
96+
"axios@>=1.0.0 <1.15.0": "^1.15.0",
9897
"js-yaml@>=3.0.0 <3.14.2": "3.14.2",
9998
"js-yaml@>=4.0.0 <4.1.1": "4.1.1",
10099
"jws@<3.2.3": "3.2.3",
101100
"qs@>=6.0.0 <6.14.1": "6.14.1",
102-
"systeminformation@>=5.0.0 <5.27.14": "5.27.14",
103-
"lodash@>=4.0.0 <4.17.23": "4.17.23"
101+
"systeminformation@>=5.0.0 <5.31.0": "^5.31.0",
102+
"lodash@>=4.17 <4.18.0": "^4.18.0",
103+
"lodash-es@>=4.17 <4.18.0": "^4.18.0",
104+
"dompurify@>=3 <3.4.0": "^3.4.1",
105+
"vite@>=5.0.0 <6.4.2": "^6.4.2",
106+
"rollup@>=4 <4.59.0": "^4.59.0",
107+
"flatted@>=3 <3.4.2": "^3.4.2",
108+
"picomatch@>=2 <2.3.2": "^2.3.2",
109+
"picomatch@>=4 <4.0.4": "^4.0.4",
110+
"minimatch@>=3 <3.1.3": "^3.1.3",
111+
"protobufjs@>=7 <7.5.5": "^7.5.5",
112+
"fast-xml-parser@>=4 <4.5.5": "^4.5.5",
113+
"fast-xml-parser@>=5 <5.7.0": "^5.7.0",
114+
"path-to-regexp@>=0.1 <0.1.13": "^0.1.13",
115+
"ajv@>=8 <8.18.0": "^8.18.0",
116+
"socket.io-parser@>=4 <4.2.6": "^4.2.6",
117+
"postcss@>=8 <8.5.10": "^8.5.10",
118+
"yaml@>=2 <2.8.3": "^2.8.3",
119+
"semver@>=5 <5.7.2": "^5.7.2",
120+
"defu@>=6 <6.1.5": "^6.1.5"
104121
},
105122
"onlyBuiltDependencies": [
106123
"@depot/cli",

packages/cli-v3/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
"cpy-cli": "^5.0.0",
6565
"execa": "^8.0.1",
6666
"find-up": "^7.0.0",
67-
"rimraf": "^5.0.7",
67+
"rimraf": "^6.0.1",
6868
"ts-essentials": "10.0.1",
6969
"tshy": "^3.0.2",
7070
"tsx": "4.17.0"
@@ -140,7 +140,7 @@
140140
"std-env": "^3.7.0",
141141
"strip-ansi": "^7.1.0",
142142
"supports-color": "^10.0.0",
143-
"tar": "^7.5.4",
143+
"tar": "^7.5.13",
144144
"tiny-invariant": "^1.2.0",
145145
"tinyexec": "^0.3.1",
146146
"tinyglobby": "^0.2.10",

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@
215215
"ai": "^6.0.0",
216216
"defu": "^6.1.4",
217217
"esbuild": "^0.23.0",
218-
"rimraf": "^3.0.2",
218+
"rimraf": "^6.0.1",
219219
"superjson": "^2.2.1",
220220
"ts-essentials": "10.0.1",
221221
"tshy": "^3.0.2",

packages/react-hooks/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"@arethetypeswrong/cli": "^0.15.4",
4545
"@types/react": "*",
4646
"@types/react-dom": "*",
47-
"rimraf": "^3.0.2",
47+
"rimraf": "^6.0.1",
4848
"tshy": "^3.0.2",
4949
"tsx": "4.17.0"
5050
},

0 commit comments

Comments
 (0)