You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Pass untrusted values into run: via env, not template splices
A ${{ }} expression is substituted into the script text before bash parses
it, so any attacker-controlled value spliced into a run: block is
executable. Three sources here qualify:
- VERSION, grep'd from the plugin's `Version:` header, which is part of
the PR diff. Assigned as VERSION="${{ ... }}" in both build steps, so a
version of `1.0"; <cmd>; #` executes.
- PRIMARY_ZIP_PATH / REF_ZIP_PATH in the summary, which embed that same
VERSION.
- github.head_ref, a branch name chosen by whoever opened the PR; git
permits " and ; in refs. This is the actionlint template-injection
warning the workflow has carried for a while - it now lints clean apart
from the pre-existing labels.*.name one.
Each was confirmed by rendering and executing both forms: spliced runs the
injected command, env: prints it as text.
Sync with equalizedigital/accessibility-new-window-warnings#39, where
CodeRabbit flagged the summary occurrence. Artifact naming is unchanged
for every event type.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LoLgW7oFjBPxGea9kiZJ2
0 commit comments