Skip to content

[static-analysis] Report - 2026-07-07 #43937

Description

@github-actions

🔍 Static Analysis Report - 2026-07-07

Analysis Summary

  • Tools Used: zizmor, poutine, actionlint, runner-guard
  • Total Findings: 942 (zizmor 548 · poutine 22 · actionlint 39 · runner-guard 333)
  • Workflows Scanned: 258
  • Workflows Affected: 197 (zizmor) · 11 (poutine) · 30 (actionlint) · 17 (runner-guard)

Findings by Tool

Tool Total Critical High Medium Low/Info
zizmor (security) 548 0 0 0 548
poutine (supply chain) 22 0 10 (error) 1 (warn) 11 (note)
actionlint (linting) 39 - - - 39
runner-guard (taint) 333 0 322 11 0

Posture is stable vs. yesterday (07-06). Every High-severity runner-guard finding is a known, already-triaged class whose per-file issues are closed. No new security regressions.

Clustered Findings by Tool and Type

Zizmor Security Findings

Issue Type Severity Count Affected Workflows
template-injection Informational/Low 262 197 files (generated .lock.yml)
adhoc-packages Low 255 broad (apt/pip installs in setup steps)
obfuscation Low 30 agent-performance-analyzer, agentic-token-audit/optimizer, audit-workflows, copilot-* ...
superfluous-actions Informational 1 1 file

Poutine Supply Chain Findings

Issue Type Severity Count Affected Workflows
untrusted_checkout_exec error (High) 10 copilot-setup-steps, smoke-codex, smoke-workflow-call(-with-inputs) ... (all # poutine:ignore annotated)
github_action_from_unverified_creator_used note 8 mixed
unverified_script_exec note 3 mixed
pr_runs_on_self_hosted warning 1 1 file

Actionlint Linting Issues

Issue Type Count Notes
SC2016 (expr won't expand in single quotes) 21 intentional literal ${{...}} in single quotes
SC2086 (missing quotes) 7 word-splitting risk
SC2038 (find/xargs) 6 prefer -print0 | xargs -0
SC2034 (unused var) 2 dead assignment
SC2188 / SC2129 / SC2005 1 each redirect / grouped redirect / useless echo

Total 39 shellcheck errors across 30 files (all generated .lock.yml).

Runner-Guard Taint Analysis Findings

Runner-Guard score/grade: not emitted in this run's output.

Rule ID Name Severity Count Affected Workflows
RGS-004 Comment-Triggered Workflow Without Author Authorization Check high 305 q, dev-hawk, ai-moderator (.lock.yml)
RGS-012 Secret Exfiltration via Outbound HTTP Request high 11 daily-model-inventory, daily-byok-ollama-test, visual-regression-checker, docs-noob-tester, daily-multi-device-docs-tester
RGS-018 Suspicious Payload Execution Pattern high 6 smoke-codex, smoke-claude, daily-sentrux-report, daily-cli-performance, daily-byok-ollama-test, copilot-setup-steps
RGS-005 Excessive Permissions on Untrusted Trigger medium 8 ai-moderator, q, agentic_commands
RGS-019 Step Output Interpolated in run Block medium 2 windows-cli-integration, error-message-lint
RGS-007 Unpinned Third-Party Action medium 1 publish-safe-outputs-node

Issues created this run: none. All Critical/High runner-guard findings map to rule+file combinations that were previously filed and closed — recreating them is the duplicate anti-pattern documented in closed policy issue #31043. Verified closed coverage this run:

Dedup verification (rule + file → closed issue)

Top Priority Issues

1. RGS-004 — Comment-Triggered Workflow Without Author Authorization Check

2. RGS-012 — Secret Exfiltration via Outbound HTTP Request

  • Tool: runner-guard · Count: 11 · Severity: high
  • Impact: outbound HTTP to non-GitHub domains in secret-bearing jobs is the canonical exfil pattern; these are legitimate model/API calls, reviewed and closed.

3. Poutine untrusted_checkout_exec (10, High/error)

  • Fork-checkout-then-execute in smoke/setup workflows — already suppressed with # poutine:ignore untrusted_checkout_exec after review.

Fix Suggestion for actionlint SC2086 (quote-your-variables)

Issue: 7 occurrences of unquoted shell variable expansions — the only cluster here that is a genuine, low-risk, mechanically-fixable defect (RGS/zizmor findings are triaged/generated).
Severity: shellcheck warning
Affected: 7 across generated .lock.yml (durable fix belongs in the gh-aw compiler shell templates)

Prompt to Copilot Agent:

You are fixing shellcheck SC2086 findings reported by actionlint.

Vulnerability class: word-splitting / glob-expansion on unquoted variable
expansions inside run: blocks. An unquoted $VAR splits on whitespace and
expands globs, which can break on values containing spaces/*/? and, when the
value is externally influenced, change the executed command.

Rule: SC2086 — (www.shellcheck.net/redacted)

Required fix:
1. Locate each unquoted variable expansion flagged by shellcheck ($VAR, ${VAR},
   $1, $GITHUB_OUTPUT, etc.) in a run: block.
2. Wrap the expansion in double quotes: "$VAR" / "${VAR}".
3. Leave deliberately-split cases alone only with an explicit
   `# shellcheck disable=SC2086` and a one-line justification.
4. Because the flagged files are generated .lock.yml, apply the durable fix in
   the gh-aw compiler's shell-emission templates and recompile, rather than
   editing lock files by hand.

Example —
Before:
  run: echo $GITHUB_OUTPUT && cp $SRC $DEST
After:
  run: echo "$GITHUB_OUTPUT" && cp "$SRC" "$DEST"

Verify with: actionlint on the affected .lock.yml files reports 0 SC2086.

All Findings Details

Counts by tool/rule (this scan)
  • zizmor: template-injection 262, adhoc-packages 255, obfuscation 30, superfluous-actions 1 (total 548; 197 files)
  • poutine: untrusted_checkout_exec 10, github_action_from_unverified_creator_used 8, unverified_script_exec 3, pr_runs_on_self_hosted 1 (total 22; 11 files)
  • actionlint: SC2016 21, SC2086 7, SC2038 6, SC2034 2, SC2188 1, SC2129 1, SC2005 1 (total 39; 30 files)
  • runner-guard: RGS-004 305, RGS-012 11, RGS-005 8, RGS-018 6, RGS-019 2, RGS-007 1 (total 333; 17 files)

Historical Trends

Date zizmor poutine actionlint runner-guard
2026-07-04 553 22 40 333
2026-07-05 552 22 40 333
2026-07-06 548 22 37 333
2026-07-07 548 22 39 333
  • Change vs 07-06: zizmor 0 · poutine 0 · actionlint +2 · runner-guard 0.
  • New issue types: none.
  • Resolved issue types: none.
  • actionlint ticked +2 (SC2086 6→7, SC2016 unchanged) — minor, within normal generation churn.

Recommendations

  1. Immediate: nothing new — all High/Critical runner-guard classes are already triaged and closed; do not refile (policy [deep-report] Static-analysis RGS-* security issues recreated daily after closure (no dedup-by-rule) #31043).
  2. Short-term: fix the 7 SC2086 + 6 SC2038 shellcheck warnings at the compiler-template level so they clear across all generated lock files at once.
  3. Long-term: emit a runner-guard score/grade line in compile output so trend tracking can include the composite grade.
  4. Prevention: keep zizmor template-injection and adhoc-packages addressed in the gh-aw shell-emission templates (env-var indirection, pinned installs) rather than per-workflow.

Next Steps

  • Apply SC2086/SC2038 fixes in the gh-aw compiler shell templates and recompile.
  • No new runner-guard issues to open (all closed) — re-evaluate only if a new rule+file combo appears.
  • Consider surfacing the runner-guard composite score in compile output.

References:

Generated by 📊 Static Analysis Report · 168.6 AIC · ⌖ 34.3 AIC · ⊞ 6.7K ·

  • expires on Jul 13, 2026, 10:12 PM UTC-08:00

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions