Fix open Dependabot/Aikido dependency alerts + workflow permissions - #75
Conversation
Root workspace (pnpm-workspace.yaml overrides): - Cap 'js-yaml@3' at <4: the uncapped >=3.15.0 override was resolving to js-yaml 5.2.1, itself vulnerable (GHSA-pm4m-ph32-ghv5, HIGH); 3.15.0 patches the 3.x advisories and keeps the API dependents expect. - zod forced to >=4.4.0 <5 (AIKIDO-2026-10706/-10707); zod only enters via abitype's optional peer (^3 || ^4), nothing imports it here. - ws@8 floor raised to >=8.21.1, the patched version for CVE-2026-62389 (lock already resolved 8.21.1; makes the posture explicit). .deepsec scanning workspace: deepsec ^2.0.8 -> ^2.2.9 plus overrides for fast-uri >=3.1.4 (CVE-2026-16221/-13676), hono >=4.12.27 (11 CVEs), @hono/node-server >=2.0.5, undici >=7.28.0 <8 (7 CVEs), tar >=7.5.21 (incl. critical CVE-2026-59873), qs >=6.15.2, body-parser >=2.3.0, brace-expansion >=5.0.8. .github/workflows/release.yml: deny-all permissions at workflow level, grants moved to the publish job (Aikido SAST finding). Verified: jest 300/300, tsc, bob build (module/cjs/types), eslint clean; peer-dep report identical to main. All pins are 7+ days old. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 525cf31ccc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| # zod 3.x: AIKIDO-2026-10706/-10707 (prototype pollution + missing input | ||
| # validation, fixed in 4.4.0). zod only enters via abitype's optional peer | ||
| # (nothing here imports it); abitype 1.2.3 accepts ^3 || ^4. | ||
| 'zod': '>=4.4.0 <5' |
There was a problem hiding this comment.
Scope the Zod override to abitype
When Expo CLI is invoked, this unqualified override also replaces @expo/cli@57.0.9's direct Zod 3.25.76 dependency with 4.4.3 (see the @expo/cli snapshot in pnpm-lock.yaml), contrary to the comment that Zod enters only through abitype. Because Zod 4 is a breaking major and the reported build/tests do not exercise Expo CLI commands, this can break Expo development tooling even though abitype accepts either major; scope the override to abitype or otherwise preserve Zod 3 for the unrelated Expo consumer.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Addressed in c4d9c4f — kept global deliberately, comment rewritten to be accurate. Scoping to abitype>zod would leave the Aikido-flagged zod 3.25.76 resolution alive under @expo/cli, which defeats the finding this PR closes (Aikido flags 3.25.76 itself). Compensating evidence: expo CLI 57.0.9 starts and runs subcommands on zod 4.4.3 (its zod schemas are constructed at import time, so an incompatible API use would throw on startup); expo here is dev tooling for the jest expo mocks — the runnable example app lives in the separate examples repo; jest 300/300 re-run after the override.
| "overrides": { | ||
| "fast-uri": ">=3.1.4 <4", | ||
| "hono": ">=4.12.27", | ||
| "@hono/node-server": ">=2.0.5", |
There was a problem hiding this comment.
Avoid forcing the MCP SDK onto Hono Node Server 2
When DeepSec exercises the MCP SDK's Node HTTP transport, this global override replaces @modelcontextprotocol/sdk@1.29.0's previously resolved @hono/node-server@1.19.14 with 2.0.12 even though the MCP SDK itself remains at exactly the same version. This bypasses the SDK's dependency range and forces a breaking server-adapter major underneath already-built SDK code, so peer/install checks cannot establish compatibility; use an MCP SDK release that declares support for v2 or scope a patched compatible version instead.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Acknowledged in c4d9c4f but kept, with the risk contained: there is no patched @hono/node-server 1.x (first patched version is 2.0.5 per the advisory), and no @modelcontextprotocol/sdk release pairs with it under the old major, so a scoped 1.x pin would leave the alert open. This workspace is scanner-only tooling (never shipped); the override is now capped at <3 and deepsec 2.2.9 verified booting with node-server 2.0.12 in the tree. Will revisit when deepsec ships an MCP SDK that declares v2 support.
| }, | ||
| "dependencies": { | ||
| "deepsec": "^2.0.8" | ||
| "deepsec": "^2.2.9" |
There was a problem hiding this comment.
Declare the new DeepSec Node requirement
On Node 18 or Node 20—the versions still accepted by the declared pnpm 9 toolchain—the documented .deepsec install can complete with engine warnings and then leave the scanner unusable: DeepSec 2.2.9 now installs the @earendil-works/pi-* 0.81.1 packages, all of which require Node >=22.19.0, while this workspace declares no Node engine or setup version. Add an engines.node constraint/documented setup version or retain a DeepSec version compatible with the previously usable runtimes so users fail before attempting scans.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in c4d9c4f: .deepsec/package.json now declares engines.node: >=22.19.0, matching what the @earendil-works/pi-* 0.81.1 packages require, so installs on Node 18/20 fail before anyone attempts a scan.
- .deepsec declares engines.node >=22.19.0 (deepsec 2.2.9 pulls @earendil-works/pi-* packages requiring it). - Cap every .deepsec override at its patched major (hono <5, @hono/node-server <3, tar <8, qs <7, body-parser <3, brace-expansion <6); duplicate the overrides into .deepsec/pnpm-workspace.yaml (pnpm >=10 reads the workspace file, pinned pnpm 9 reads package.json#pnpm — keep in sync). - Force zod >=4.4.0 <5 in .deepsec as well: @vercel/sandbox pinned the Aikido-flagged zod 3.24.4 exactly; only zod 4.4.3 resolves now. - Rewrite the root zod override comment: zod also resolves under @expo/cli (dev tooling for the jest expo mocks), and the override is deliberately global — scoping to abitype>zod would leave the flagged zod 3.25.76 alive under @expo/cli. expo CLI 57.0.9 smoke-tested on zod 4.4.3; jest 300/300 re-run. - @hono/node-server 1.19.14 -> 2.0.12 under @modelcontextprotocol/sdk stays: no patched 1.x exists (first patched is 2.0.5) and the SDK is scanner-only tooling; deepsec CLI verified booting with it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Summary
Clears the open Dependabot alerts (33) and the Aikido findings for this repo.
Root workspace (
pnpm-workspace.yamloverrides):'js-yaml@3': '>=3.15.0'rewrote a^3.xrequest to "anything ≥3.15.0", which pnpm resolved to the vulnerable 5.2.1. Capped at<4so it resolves to patched 3.15.0 with the API the dependents expect.^3 || ^4..deepsecscanning workspace (scanner tooling, not shipped): deepsec → ^2.2.9 + overrides for fast-uri ≥3.1.4, hono ≥4.12.27, @hono/node-server ≥2.0.5, undici ≥7.28.0 <8, tar ≥7.5.21 (incl. critical CVE-2026-59873), qs ≥6.15.2, body-parser ≥2.3.0, brace-expansion ≥5.0.8.Workflow permissions (Aikido SAST):
release.ymlnow setspermissions: {}at workflow level withid-token: write/contents: writegranted only to thepublishjob.Verification
tsc --noEmit,bob build(module/cjs/types), eslint — all cleanpnpm peers checkreport identical to main (3 pre-existing, unrelated to these changes)minimumReleaseAgerespected)🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.