Analysis Summary
Daily static analysis scan of all agentic workflow files in github/gh-aw.
- Tools Used: zizmor, poutine, actionlint, runner-guard
- Total Findings: ~242 (110 actionlint + 108 zizmor + 24 poutine + 0 runner-guard)
- Workflows Scanned: 196
- Workflows Affected: ~58
- Workflow Run: §24637453783
Findings by Tool
| Tool |
Total |
Critical |
High |
Medium |
Low |
Informational/Note |
| zizmor (security) |
108 |
0 |
1 |
1 |
21 |
85 |
| poutine (supply chain) |
24 |
0 |
0 |
0 |
0 |
24 (8 errors, 1 warn, 15 notes) |
| actionlint (linting) |
110 |
— |
— |
— |
— |
110 errors |
| runner-guard (taint analysis) |
0 |
0 |
0 |
0 |
0 |
0 |
Clustered Findings by Tool and Type
Zizmor Security Findings
| Issue Type |
Severity |
Count |
Affected Workflows |
github-env |
High |
1 |
dev-hawk |
secrets-inherit |
Medium |
1 |
smoke-call-workflow |
obfuscation |
Low |
21 |
agent-performance-analyzer, audit-workflows, copilot-agent-analysis, copilot-cli-deep-research, copilot-pr-nlp-analysis, copilot-pr-prompt-analysis, copilot-session-insights, copilot-token-audit, copilot-token-optimizer, daily-cli-performance, daily-code-metrics, daily-news, daily-testify-uber-super-expert, deep-report, delight, discussion-task-miner, firewall-escape, metrics-collector, pr-triage-agent, security-compliance, workflow-health-manager |
template-injection |
Informational |
85 |
~28 workflows (3 instances each — "Start MCP Gateway" step pattern) |
Poutine Supply Chain Findings
| Issue Type |
Severity |
Count |
Affected Workflows |
untrusted_checkout_exec |
error |
8 |
smoke-workflow-call, smoke-workflow-call-with-inputs |
pr_runs_on_self_hosted |
warning |
1 |
smoke-copilot-arm |
unverified_script_exec |
note |
4 |
copilot-setup-steps.yml, copilot-token-audit, copilot-token-optimizer |
github_action_from_unverified_creator_used |
note |
9 |
astral-sh/setup-uv, gaurav-nelson/github-action-markdown-link-check, super-linter/super-linter, actions-ecosystem/action-add-labels |
unpinnable_action |
note |
2 |
daily-perf-improver, daily-test-improver |
Actionlint Linting Issues
| Issue Type |
Count |
Affected Workflows |
permissions — unknown scope copilot-requests |
99 |
~50 workflows (2× each) |
expression — undefined output/context property |
11 |
ace-editor (activated), smoke-claude (artifact_prefix ×2), smoke-workflow-call (4×job.*), smoke-workflow-call-with-inputs (4×job.*) |
Runner-Guard Taint Analysis Findings
Runner-guard ran successfully and produced no findings in this scan (2nd consecutive clean scan).
Issues created: none (no Critical/High runner-guard findings)
Top Priority Issues
1. github-env — Dangerous Environment File Usage
- Tool: zizmor
- Count: 1
- Severity: High
- Affected:
dev-hawk.md (compiled line 1387, step id ghes-host-config)
- Description: A
run: step writes to $GITHUB_ENV, deriving GH_HOST from GITHUB_SERVER_URL. If attacker-controlled input can influence values written to $GITHUB_ENV, this enables environment variable injection persisting across all subsequent steps.
- Impact: Potential environment variable poisoning affecting all subsequent steps in the job
- Reference: (docs.zizmor.sh/redacted)
2. untrusted_checkout_exec — Arbitrary Code Execution (Poutine)
- Tool: poutine
- Count: 8 occurrences across 2 workflows
- Severity: error
- Affected:
smoke-workflow-call.md, smoke-workflow-call-with-inputs.md
- Description: Bash scripts executed after checkout of potentially untrusted code. Note: all instances have
# poutine:ignore untrusted_checkout_exec suppressions — risk is acknowledged.
3. permissions:copilot-requests — Unknown Permission Scope (Actionlint)
- Tool: actionlint
- Count: 99
- Severity: error
- Affected: ~50 workflows
- Description: actionlint 1.7.12 does not recognize
copilot-requests as a valid permission scope. Likely false positives — copilot-requests is a newer permission not yet in actionlint's schema.
Fix Suggestion for github-env (Highest Real Severity)
Issue: Dangerous use of $GITHUB_ENV in dev-hawk.md
Severity: High
Affected Workflows: 1
Prompt to Copilot Agent:
You are fixing a security vulnerability identified by zizmor in .github/workflows/dev-hawk.md.
**Vulnerability**: Dangerous use of GITHUB_ENV environment file
**Rule**: github-env — (docs.zizmor.sh/redacted)
**Severity**: High
**Current Issue**:
The step with id `ghes-host-config` (around compiled line 1387) writes to $GITHUB_ENV,
setting GH_HOST derived from GITHUB_SERVER_URL. Writing to $GITHUB_ENV can be exploited
if attacker-controlled input reaches the written value.
**Required Fix (Option A — preferred)**:
Replace $GITHUB_ENV writes with $GITHUB_OUTPUT and reference via step outputs.
Before:
- id: ghes-host-config
shell: bash
run: |
GH_HOST=$(echo "$GITHUB_SERVER_URL" | sed 's|https://||')
echo "GH_HOST=$GH_HOST" >> $GITHUB_ENV
After:
- id: ghes-host-config
shell: bash
run: |
GH_HOST=$(echo "$GITHUB_SERVER_URL" | sed 's|https://||')
echo "gh_host=$GH_HOST" >> $GITHUB_OUTPUT
Then update downstream steps to use:
env:
GH_HOST: $\{\{ steps.ghes-host-config.outputs.gh_host }}
**Alternative Fix (Option B)**:
Add a suppression if value is guaranteed to come only from trusted GITHUB_SERVER_URL:
# zizmor: ignore[github-env] — value derived exclusively from trusted GITHUB_SERVER_URL
Please apply Option A (preferred) to .github/workflows/dev-hawk.md.
All Findings Details
Actionlint Expression Errors (11 instances)
ace-editor.lock.yml
- Line 611:
needs.activation.outputs.activated — property activated not defined in activation output type
- Condition:
if: needs.activation.outputs.activated == 'true'
smoke-claude.lock.yml
- Lines 873, 2500:
needs.activation.outputs.artifact_prefix — property not defined
- Used as:
name: $\{\{ needs.activation.outputs.artifact_prefix }}apm
smoke-workflow-call-with-inputs.lock.yml
- Lines 122–125:
job.workflow_repository, job.workflow_sha, job.workflow_ref, job.workflow_file_path — not in actionlint's job context schema
smoke-workflow-call.lock.yml
- Lines 129–132: Same 4
job.* properties not in actionlint schema
Zizmor Findings Detail
dev-hawk.lock.yml — github-env (High)
- Line: 1387, step id:
ghes-host-config
- Description: Writes to
$GITHUB_ENV, setting GH_HOST derived from GITHUB_SERVER_URL
smoke-call-workflow.lock.yml — secrets-inherit (Medium)
- Line: 913
- Description: Calls
./.github/workflows/smoke-workflow-call.lock.yml — secrets unconditionally inherited by the called workflow
Obfuscation (Low) — GH_AW_WIKI_NOTE: $\{\{ '' }}
Pattern: empty string expression $\{\{ '' }} used in env var — flagged as obfuscated usage.
Affected 21 workflows (see table above).
Template-Injection (Informational)
Step name pattern "Start MCP Gateway" and "Execute GitHub Copilot CLI" in ~28 workflows triggers informational warnings. Likely false positives from step-name analysis rather than actual injection vectors.
Poutine Findings Detail
smoke-workflow-call.lock.yml — untrusted_checkout_exec (error, 4 instances)
Lines 203, 230, 331, 336 — bash scripts run after untrusted checkout (all have # poutine:ignore suppressions)
smoke-workflow-call-with-inputs.lock.yml — untrusted_checkout_exec (error, 4 instances)
Lines 196, 223, 332, 337 — same pattern
smoke-copilot-arm.lock.yml — pr_runs_on_self_hosted (warning)
Line 424: Job agent runs on ubuntu-24.04-arm self-hosted runner
Unverified Script Execution (notes)
curl -fsSL https://raw.githubusercontent.com/github/gh-aw/refs/heads/main/install-gh-aw.sh | bash
Affected: copilot-token-optimizer, copilot-token-audit (×2), copilot-setup-steps.yml
Unverified Creator Actions (notes)
astral-sh/setup-uv@eac588ad... — copilot-token-optimizer, copilot-token-audit, copilot-setup-steps.yml
astral-sh/setup-uv@08807647... — mcp-inspector
gaurav-nelson/github-action-markdown-link-check@5c5dfc0a... — link-check.yml (×2)
super-linter/super-linter@9e863354... — super-linter.lock.yml
actions-ecosystem/action-add-labels@c96b68fe... — smoke-codex.lock.yml
Unpinnable Actions (notes)
.github/actions/daily-perf-improver/build-steps/action.yml
.github/actions/daily-test-improver/coverage-steps/action.yml
Historical Trends
- Previous Scan: 2026-04-17 (§24583641830, issue #26933)
- Previous Total Findings: ~240 (194 workflows)
- Current Total Findings: ~242 (196 workflows, +2 new workflows)
- Change: +2 findings (+0.8%) — attributable to 2 new workflows added
Recurring Issues (seen in both scans)
github-env in dev-hawk (zizmor High) — not yet fixed (2nd consecutive scan)
untrusted_checkout_exec in smoke-workflow-call workflows (poutine error) — not yet fixed
permissions:copilot-requests across ~50 workflows (actionlint) — not yet fixed
secrets-inherit in smoke-call-workflow (zizmor Medium) — not yet fixed
New Issues
None identified beyond the 2 additional workflows added.
Resolved Issues
None since previous scan.
Recommendations
- Immediate: Fix
github-env High severity finding in dev-hawk.md — refactor to use $GITHUB_OUTPUT instead of $GITHUB_ENV
- Short-term: Add actionlint configuration to allowlist
copilot-requests permission scope — eliminates 99 false-positive errors
- Short-term: Fix
expression errors for undefined output properties in ace-editor, smoke-claude, and smoke-workflow-call workflows
- Medium-term: Address
secrets-inherit in smoke-call-workflow — consider explicit secret passing instead of unconditional inheritance
- Long-term: Replace
curl | bash install patterns with pinned releases to reduce poutine supply chain notes
- Prevention: Update workflow templates to avoid
$\{\{ '' }} obfuscation patterns (21 workflows affected)
Next Steps
References:
Generated by Static Analysis Report · ● 237K · ◷
Analysis Summary
Daily static analysis scan of all agentic workflow files in
github/gh-aw.Findings by Tool
Clustered Findings by Tool and Type
Zizmor Security Findings
github-envsecrets-inheritobfuscationtemplate-injectionPoutine Supply Chain Findings
untrusted_checkout_execpr_runs_on_self_hostedunverified_script_execgithub_action_from_unverified_creator_usedunpinnable_actionActionlint Linting Issues
permissions— unknown scopecopilot-requestsexpression— undefined output/context propertyactivated), smoke-claude (artifact_prefix×2), smoke-workflow-call (4×job.*), smoke-workflow-call-with-inputs (4×job.*)Runner-Guard Taint Analysis Findings
Runner-guard ran successfully and produced no findings in this scan (2nd consecutive clean scan).
Issues created: none (no Critical/High runner-guard findings)
Top Priority Issues
1.
github-env— Dangerous Environment File Usagedev-hawk.md(compiled line 1387, step idghes-host-config)run:step writes to$GITHUB_ENV, derivingGH_HOSTfromGITHUB_SERVER_URL. If attacker-controlled input can influence values written to$GITHUB_ENV, this enables environment variable injection persisting across all subsequent steps.2.
untrusted_checkout_exec— Arbitrary Code Execution (Poutine)smoke-workflow-call.md,smoke-workflow-call-with-inputs.md# poutine:ignore untrusted_checkout_execsuppressions — risk is acknowledged.3.
permissions:copilot-requests— Unknown Permission Scope (Actionlint)copilot-requestsas a valid permission scope. Likely false positives —copilot-requestsis a newer permission not yet in actionlint's schema.Fix Suggestion for
github-env(Highest Real Severity)Issue: Dangerous use of
$GITHUB_ENVindev-hawk.mdSeverity: High
Affected Workflows: 1
Prompt to Copilot Agent:
All Findings Details
Actionlint Expression Errors (11 instances)
ace-editor.lock.yml
needs.activation.outputs.activated— propertyactivatednot defined in activation output typeif: needs.activation.outputs.activated == 'true'smoke-claude.lock.yml
needs.activation.outputs.artifact_prefix— property not definedname: $\{\{ needs.activation.outputs.artifact_prefix }}apmsmoke-workflow-call-with-inputs.lock.yml
job.workflow_repository,job.workflow_sha,job.workflow_ref,job.workflow_file_path— not in actionlint's job context schemasmoke-workflow-call.lock.yml
job.*properties not in actionlint schemaZizmor Findings Detail
dev-hawk.lock.yml —
github-env(High)ghes-host-config$GITHUB_ENV, settingGH_HOSTderived fromGITHUB_SERVER_URLsmoke-call-workflow.lock.yml —
secrets-inherit(Medium)./.github/workflows/smoke-workflow-call.lock.yml— secrets unconditionally inherited by the called workflowObfuscation (Low) —
GH_AW_WIKI_NOTE: $\{\{ '' }}Pattern: empty string expression
$\{\{ '' }}used in env var — flagged as obfuscated usage.Affected 21 workflows (see table above).
Template-Injection (Informational)
Step name pattern "Start MCP Gateway" and "Execute GitHub Copilot CLI" in ~28 workflows triggers informational warnings. Likely false positives from step-name analysis rather than actual injection vectors.
Poutine Findings Detail
smoke-workflow-call.lock.yml —
untrusted_checkout_exec(error, 4 instances)Lines 203, 230, 331, 336 — bash scripts run after untrusted checkout (all have
# poutine:ignoresuppressions)smoke-workflow-call-with-inputs.lock.yml —
untrusted_checkout_exec(error, 4 instances)Lines 196, 223, 332, 337 — same pattern
smoke-copilot-arm.lock.yml —
pr_runs_on_self_hosted(warning)Line 424: Job
agentruns onubuntu-24.04-armself-hosted runnerUnverified Script Execution (notes)
curl -fsSL https://raw.githubusercontent.com/github/gh-aw/refs/heads/main/install-gh-aw.sh | bashAffected: copilot-token-optimizer, copilot-token-audit (×2), copilot-setup-steps.yml
Unverified Creator Actions (notes)
astral-sh/setup-uv@eac588ad...— copilot-token-optimizer, copilot-token-audit, copilot-setup-steps.ymlastral-sh/setup-uv@08807647...— mcp-inspectorgaurav-nelson/github-action-markdown-link-check@5c5dfc0a...— link-check.yml (×2)super-linter/super-linter@9e863354...— super-linter.lock.ymlactions-ecosystem/action-add-labels@c96b68fe...— smoke-codex.lock.ymlUnpinnable Actions (notes)
.github/actions/daily-perf-improver/build-steps/action.yml.github/actions/daily-test-improver/coverage-steps/action.ymlHistorical Trends
Recurring Issues (seen in both scans)
github-envin dev-hawk (zizmor High) — not yet fixed (2nd consecutive scan)untrusted_checkout_execin smoke-workflow-call workflows (poutine error) — not yet fixedpermissions:copilot-requestsacross ~50 workflows (actionlint) — not yet fixedsecrets-inheritin smoke-call-workflow (zizmor Medium) — not yet fixedNew Issues
None identified beyond the 2 additional workflows added.
Resolved Issues
None since previous scan.
Recommendations
github-envHigh severity finding indev-hawk.md— refactor to use$GITHUB_OUTPUTinstead of$GITHUB_ENVcopilot-requestspermission scope — eliminates 99 false-positive errorsexpressionerrors for undefined output properties in ace-editor, smoke-claude, and smoke-workflow-call workflowssecrets-inheritin smoke-call-workflow — consider explicit secret passing instead of unconditional inheritancecurl | bashinstall patterns with pinned releases to reduce poutine supply chain notes$\{\{ '' }}obfuscation patterns (21 workflows affected)Next Steps
github-envHigh severity indev-hawk.md(see fix prompt above)copilot-requestspermission scopeexpressionerrors for undefined output propertiessecrets-inheritinsmoke-call-workflow.mdastral-sh/setup-uvand other third-party actionsReferences: