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
Headline: zizmor findings dropped sharply 538 → 229 (−309, −57%) — the template-injection (Informational) class fell from 503 to 194, almost certainly a direct effect of commit #39157 ("Reduce ambient-context payload in daily/PR workflows and shared prompt imports"), which trimmed ${{ }} template expansions in the auto-generated CLI-execution steps. All other categories are essentially flat.
Findings by Tool
Tool
Total
Critical
High
Medium
Low
Info
zizmor (security)
229
0
1
2
31
195
poutine (supply chain)
24
0
0
0
1
23
actionlint (linting)
1054
-
-
-
-
-
runner-guard (taint analysis)
331
0
317
14
0
-
Clustered Findings by Tool and Type
Zizmor Security Findings
Issue Type
Severity
Count
Affected Workflows
template-injection
Informational
194
~all .lock.yml (Execute Copilot/Claude CLI step)
obfuscation
Low
28
many .lock.yml (${{ '' }} placeholders)
template-injection
Low
3
a few .lock.yml
excessive-permissions
Medium
1
dependabot-repair.lock.yml:395
artipacked
Medium
1
daily-geo-optimizer.lock.yml:1573
superfluous-actions
Informational
1
1 .lock.yml
github-env
High
1
dev-hawk.lock.yml:1771(has zizmor:ignore — GITHUB_SERVER_URL is Actions-set, not user input)
expression-context warnings in generated lock files
The overwhelming majority of actionlint findings are noise from auto-generated .lock.yml files using gh-aw extensions (queue: max, copilot-requests:) that actionlint's schema doesn't know about. Real signal here is low.
Runner-Guard Taint Analysis Findings
Score/grade: not emitted by this scanner build.
Rule ID
Name
Severity
Count
Affected Files
RGS-004
Comment-Triggered Workflow Without Author Authorization Check
Issues created this run: none. Every High (RGS-004/012/018) rule+file combination maps to an already-closed static-analysis issue, re-verified via GitHub search:
Per the dedup policy (closed rule+file ⇒ skip; the recurring-recreation problem was tracked and resolved in #31043), no new issues or comments were created. The only delta this run — RGS-007 on publish-safe-outputs-node.yml — is medium severity, below the Critical/High issue-creation threshold.
Why it matters: workflows triggered by issue/PR comments that act on comment content without verifying the commenter's association can be driven by untrusted users. gh-aw mitigates this with its built-in detection_guard/membership checks; the high count is per-trigger lock-file expansion of the same underlying pattern.
Issue: code injection via template expansion — ${{ ... }} expressions interpolated directly into run: shell blocks. Severity: Informational (in gh-aw's case, on auto-generated lock files) Affected Workflows: ~all 246 .lock.yml files (the "Execute Copilot/Claude CLI" step)
Prompt to Copilot Agent:
You are reducing zizmor template-injection (Informational) findings in gh-aw generated lock files.
Vulnerability: template-injection — (docs.zizmor.sh/redacted)
Rule: GitHub Actions ${{ }} expressions expanded directly into shell `run:` blocks can
permit code injection when the expression resolves to attacker-controlled text.
Current Issue:
The gh-aw compiler emits the "Execute Copilot/Claude CLI" step (and similar) with
context expressions inlined into the run script. zizmor flags every such expansion.
Commit #39157 already cut these from 503 to 194 by reducing ambient-context payload.
Required Fix (apply in the gh-aw COMPILER / shared templates, not hand-edits to .lock.yml):
1. Identify remaining `${{ <expr> }}` uses inside `run:` blocks in the emitted step templates.
2. Move each into an `env:` mapping and reference the env var with proper quoting in shell.
3. Prefer `"$GH_AW_VALUE"` over inline expansion so the value is never parsed as shell.
Example:
Before:
run: |
echo "Processing ${{ github.event.issue.title }}"
After:
env:
GH_AW_ISSUE_TITLE: ${{ github.event.issue.title }}
run: |
echo "Processing $GH_AW_ISSUE_TITLE"
Apply by editing the compiler's step emitters so all generated lock files inherit the fix.
runner-guard +3: new RGS-007 hits on publish-safe-outputs-node.yml (medium). No new High combos.
poutine / actionlint: effectively flat.
New Issues
RGS-007 on publish-safe-outputs-node.yml (medium) — newly surfaced; monitor, no issue per policy.
Resolved / Reduced Issues
~309 zizmor template-injection findings eliminated by reduced template payload.
Recommendations
Immediate: None blocking — the single High zizmor finding is annotated/benign; all High runner-guard findings are reviewed-and-closed recurring lock-file patterns.
Short-term: Keep pushing the compiler-side template-injection fix (env-var indirection) to drive the remaining 194 toward zero; investigate the new RGS-007 pattern in publish-safe-outputs-node.yml.
Long-term: Teach the scan harness to suppress known actionlint false positives (queue: max, copilot-requests:) so real linting signal isn't buried under ~600 schema-mismatch warnings.
Counts derived from /tmp/gh-aw/agent/compile-output.txt by counting finding-header lines per tool section (zizmor 5851–7454, poutine 7455–7623, actionlint 580–5850, runner-guard 7624–end).
Per-type zizmor counts match the 2026-06-13 cache method exactly for every category except template-injection Informational (503→194), confirming the drop is a genuine reduction, not a counting change.
Runner-guard dedup verified live against GitHub closed issues this run.
🔍 Static Analysis Report - 2026-06-14
Analysis Summary
Findings by Tool
Clustered Findings by Tool and Type
Zizmor Security Findings
.lock.yml(Execute Copilot/Claude CLI step).lock.yml(${{ '' }}placeholders).lock.ymldependabot-repair.lock.yml:395daily-geo-optimizer.lock.yml:1573.lock.ymldev-hawk.lock.yml:1771(haszizmor:ignore—GITHUB_SERVER_URLis Actions-set, not user input)Poutine Supply Chain Findings
poutine:ignore)super-linter.lock.yml(super-linter@pinned)daily-byok-ollama-test(ollama install),copilot-setup-steps.ymlActionlint Linting Issues
run:blocksqueue: maxconcurrency key — a gh-aw extension actionlint doesn't recognise (false positive)copilot-requestsunknown-scope — false positive, valid gh-aw scopeRunner-Guard Taint Analysis Findings
Score/grade: not emitted by this scanner build.
q(122),dev-hawk(91),ai-moderator(88)daily-model-inventory(4),daily-byok-ollama-test(2),visual-regression-checker(2),daily-multi-device-docs-tester(1),docs-noob-tester(1)copilot-setup-steps.yml,daily-byok-ollama-test,daily-cli-performance,daily-sentrux-report,smoke-claude,smoke-codexai-moderator(4),q(3),commands.yml(1)publish-safe-outputs-node.yml(3 — NEW),aoai-endpoint-smoke-test.yml(1)error-message-lint.yml,windows-cli-integration.ymlIssues created this run: none. Every High (RGS-004/012/018) rule+file combination maps to an already-closed static-analysis issue, re-verified via GitHub search:
q/dev-hawk/ai-moderator→ closed [static-analysis] RGS-004: Comment-Triggered Workflow Without Author Authorization Check in 16 workflows #29694, [static-analysis] RGS-004: Comment-Triggered Workflow Without Author Authorization Check (16 workflows) #30284, [static-analysis] RGS-004: Comment-Triggered Workflow Without Author Authorization Check in 16 workflows #28156Per the dedup policy (closed rule+file ⇒ skip; the recurring-recreation problem was tracked and resolved in #31043), no new issues or comments were created. The only delta this run — RGS-007 on
publish-safe-outputs-node.yml— is medium severity, below the Critical/High issue-creation threshold.Top Priority Issues
1. RGS-004 — Comment-Triggered Workflow Without Author Authorization Check (runner-guard, High, ×301)
q.lock.yml,dev-hawk.lock.yml,ai-moderator.lock.ymldetection_guard/membership checks; the high count is per-trigger lock-file expansion of the same underlying pattern.2. github-env (zizmor, High, ×1) —
dev-hawk.lock.yml:1771zizmor:ignoreannotation: the value isGITHUB_SERVER_URL, set by the Actions runner, not user-controlled. Benign.Fix Suggestion: zizmor
template-injection(largest cluster, 194)Issue: code injection via template expansion —
${{ ... }}expressions interpolated directly intorun:shell blocks.Severity: Informational (in gh-aw's case, on auto-generated lock files)
Affected Workflows: ~all 246
.lock.ymlfiles (the "Execute Copilot/Claude CLI" step)Prompt to Copilot Agent:
Historical Trends
publish-safe-outputs-node.yml(medium). No new High combos.New Issues
publish-safe-outputs-node.yml(medium) — newly surfaced; monitor, no issue per policy.Resolved / Reduced Issues
Recommendations
publish-safe-outputs-node.yml.queue: max,copilot-requests:) so real linting signal isn't buried under ~600 schema-mismatch warnings.Next Steps
publish-safe-outputs-node.ymlqueue,copilot-requests) from the scanMethodology & notes
/tmp/gh-aw/agent/compile-output.txtby counting finding-header lines per tool section (zizmor 5851–7454, poutine 7455–7623, actionlint 580–5850, runner-guard 7624–end).References: §27490365128