Skip to content

fix(chat-plugins): pin AES-GCM auth tag to 16 bytes when unsealing plugin tokens - #324

Merged
ralyodio merged 1 commit into
masterfrom
fix/plugin-store-gcm-tag
Nov 11, 2026
Merged

ralyodio merged 1 commit into
masterfrom
fix/plugin-store-gcm-tag

Conversation

@ralyodio

Copy link
Copy Markdown
Collaborator

semgrep gcm-no-tag-length (blocking) on apps/web/src/lib/chat/plugin-store.ts (from #315): createDecipheriv without authTagLength accepts a truncated GCM tag, which makes forging a sealed plugin token far cheaper. Now any tag that is not 16 bytes is refused and authTagLength: 16 is passed.

This finding fails semgrep on every open PR (e.g. #318). Tests: plugin-store 13/13 on vienna, including a new truncated-tag case.

🤖 Generated with Claude Code

…g plugin tokens

semgrep gcm-no-tag-length (blocking): createDecipheriv without authTagLength accepts a
truncated tag, which makes forging a sealed token far cheaper. Refuse any tag that is not
16 bytes and pass authTagLength: 16. This finding fails semgrep on every open PR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

14 finding(s)

HIGH/CRITICAL: 1 | MEDIUM: 9 | LOW: 4

Severity Rule Location
HIGH js-ssrf-outbound-request apps/web/public/sw.js:24
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:53
MEDIUM js-unescaped-html-sink apps/web/src/app/layout.tsx:109
MEDIUM sql-template-interpolation apps/web/src/lib/chat/push.ts:476
MEDIUM sh-remote-script-execution scripts/dev-setup.sh:25
MEDIUM sh-eval-expansion scripts/dev-setup.sh:35
MEDIUM sh-remote-script-execution scripts/install.sh:185
MEDIUM sh-remote-script-execution scripts/install.sh:210
MEDIUM sh-remote-script-execution scripts/install.sh:408
MEDIUM sh-remote-script-execution scripts/install.sh:450
LOW py-ssrf-outbound-request examples/business-strategist-agent/chat.py:37
LOW py-ssrf-outbound-request examples/business-strategist-agent/train.py:54
LOW secret-generic-credential node/crates/c0mpute-core/src/webhook.rs:1171
LOW py-path-traversal node/crates/c0mpute-core/tests/fixtures/fake-infernet-text:29

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit eac9e8c into master Nov 11, 2026
12 of 13 checks passed
sh1pt-actions-fleet Bot pushed a commit that referenced this pull request Nov 11, 2026
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