Skip to content

Fix open Dependabot/Aikido dependency alerts + workflow permissions - #75

Merged
yosriady merged 2 commits into
mainfrom
security/dependabot-aikido-2026-08
Aug 3, 2026
Merged

Fix open Dependabot/Aikido dependency alerts + workflow permissions#75
yosriady merged 2 commits into
mainfrom
security/dependabot-aikido-2026-08

Conversation

@yosriady

@yosriady yosriady commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Clears the open Dependabot alerts (33) and the Aikido findings for this repo.

Root workspace (pnpm-workspace.yaml overrides):

  • js-yaml (HIGH, GHSA-pm4m-ph32-ghv5) — root cause was our own override: the uncapped 'js-yaml@3': '>=3.15.0' rewrote a ^3.x request to "anything ≥3.15.0", which pnpm resolved to the vulnerable 5.2.1. Capped at <4 so it resolves to patched 3.15.0 with the API the dependents expect.
  • zod → 4.4.3 (AIKIDO-2026-10706/-10707, prototype pollution + missing input validation, fixed in 4.4.0). zod is never imported here — it only enters as abitype's optional peer, and abitype 1.2.3 accepts ^3 || ^4.
  • ws@8 floor → ≥8.21.1, the patched version for CVE-2026-62389. The lock already resolved 8.21.1, so the Aikido ws finding was stale — this just makes the floor explicit. (Close the Aikido ws issue as already-resolved.)

.deepsec scanning 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.yml now sets permissions: {} at workflow level with id-token: write / contents: write granted only to the publish job.

Verification

  • ✅ jest 300/300, tsc --noEmit, bob build (module/cjs/types), eslint — all clean
  • pnpm peers check report identical to main (3 pre-existing, unrelated to these changes)
  • ✅ Lockfiles grep-verified: js-yaml 3.15.0/4.3.0 only, zod 4.4.3, ws 8.21.1; .deepsec fast-uri 3.1.5, hono 4.12.34, undici 7.29.0, tar 7.5.22, qs 6.15.3, body-parser 2.3.0, @hono/node-server 2.0.12, brace-expansion 5.0.9
  • ✅ All resolved versions ≥7 days old (minimumReleaseAge respected)

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

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>
@socket-security

socket-security Bot commented Aug 3, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addeddeepsec@​2.2.9811001009680

View full report

@socket-security

socket-security Bot commented Aug 3, 2026

Copy link
Copy Markdown

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.

Action Severity Alert  (click "▶" to expand/collapse)
Warn High
Obfuscated code: npm @protobufjs/float is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: .deepsec/pnpm-lock.yamlnpm/deepsec@2.2.9npm/@protobufjs/float@1.0.2

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@protobufjs/float@1.0.2. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm highlight.js is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: .deepsec/pnpm-lock.yamlnpm/deepsec@2.2.9npm/highlight.js@10.7.3

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/highlight.js@10.7.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm typebox is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: .deepsec/pnpm-lock.yamlnpm/deepsec@2.2.9npm/typebox@1.1.38

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/typebox@1.1.38. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

View full report

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread pnpm-workspace.yaml
# 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'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread .deepsec/package.json Outdated
"overrides": {
"fast-uri": ">=3.1.4 <4",
"hono": ">=4.12.27",
"@hono/node-server": ">=2.0.5",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread .deepsec/package.json
},
"dependencies": {
"deepsec": "^2.0.8"
"deepsec": "^2.2.9"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
@yosriady
yosriady merged commit 233b99b into main Aug 3, 2026
11 checks passed
@yosriady
yosriady deleted the security/dependabot-aikido-2026-08 branch August 3, 2026 10:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant