Static Analysis Report - 2026-03-27 #23267
Closed
Replies: 1 comment
-
|
This discussion was automatically closed because it expired on 2026-03-28T19:46:54.344Z.
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Daily static analysis scan of all agentic workflows (zizmor, poutine, actionlint). Today's scan found 8,346 total issues across 178 workflows. A minor regression of +6 zizmor findings (vs yesterday) was detected, including 5 new High-severity
unpinned-usesand 1 new High-severitygithub-envfinding. All poutine and actionlint counts are stable. Theuntrusted_checkout_execissue in smoke-workflow-call workflows remains unresolved for day 13.Analysis Summary
Findings by Tool
vs Yesterday (2026-03-26)
Clustered Findings by Tool and Type
Zizmor Security Findings
secrets-outside-envtemplate-injection(High)template-injection(Informational)unpinned-usesgithub-envobfuscationartipackedsecrets-inheritTotal High severity zizmor findings: 30 across 26 affected workflows.
Poutine Supply Chain Findings
untrusted_checkout_execgithub_action_from_unverified_creator_usedunverified_script_execunpinnable_actionpr_runs_on_self_hostedActionlint Linting Issues
shellcheck(SC2086)$RUNNER_TEMPvariable inrun:commandsshellcheck(SC2129)permissionscopilot-requestspermission scoperunner-labelexpressionTop Priority Issues
1. Secrets Referenced Outside Dedicated Environment (secrets-outside-env)
env:block. This can expose secret values in logs or to other steps.env:block may be accessible to other steps or logged in certain contexts.2. Template Injection via Template Expansion (High)
audit-workflows,copilot-pr-nlp-analysis,copilot-session-insights,daily-code-metrics,daily-copilot-token-report,daily-firewall-report,daily-integrity-analysis,daily-issues-report,daily-multi-device-docs-tester,daily-news,daily-performance-summary,daily-repo-chronicle,deep-report,dev-hawk,docs-noob-tester,github-mcp-structural-analysis,org-health-report,poem-bot,portfolio-analyst,python-data-charts,stale-repo-identifier,technical-doc-writer,unbloat-docs,weekly-editors-health-check,weekly-issue-summary$\{\{ ... }}) are expanded directly inrun:scripts, enabling potential code injection if the expression evaluates untrusted content.3. Untrusted Checkout Execution (Poutine - Unresolved Day 13)
smoke-workflow-call,smoke-workflow-call-with-inputs# poutine:ignore untrusted_checkout_execcomments, the findings persist. This issue has been open for 13 consecutive days.4. Unknown
copilot-requestsPermission Scope (Actionlint)copilot-requests: writepermission scope is not recognized by actionlint's known permission list. This is likely a new/custom scope for GitHub Copilot that actionlint doesn't yet know about.5. Unquoted
$RUNNER_TEMPVariable (SC2086)\$\{RUNNER_TEMP}is used without double-quoting in shell scripts, risking word splitting if the path contains spaces.RUNNER_TEMPis a GitHub-managed path unlikely to contain spaces, so this is low actual risk.Fix Suggestion for
template-injection(High Severity)Issue: Code injection via GitHub Actions template expansion
Severity: High
Affected Workflows: 25 workflows
Prompt to Copilot Agent:
Required Fix:
Never interpolate ${{ ... }} expressions directly in run: scripts.
Instead, assign the value to an environment variable in the
env:block,then reference it as a shell variable (prefixed with $) in the script.
Step-by-step:
run:steps in the workflow that contain$\{\{ ... }}expressionsenv:block on the same step$\{\{ ... }}in the script with the$VARIABLE_NAMEshell referenceExample Fix:
Before (vulnerable):
After (safe):
Please apply this fix to all affected workflow files:
After fixing the .md files, run
gh aw compileto regenerate the .lock.yml filesand verify that zizmor no longer reports template-injection findings.
Reference: (docs.zizmor.sh/redacted)
Actionlint Findings Detail
shellcheck SC2086 — Unquoted Variables (4,130 findings across all 178 workflows)
Pattern:
bash \$\{RUNNER_TEMP}/gh-aw/actions/...—$RUNNER_TEMPshould be"\$\{RUNNER_TEMP}"These are generated from the compiled lock files' action invocations.
shellcheck SC2129 — Consecutive Redirects (173 findings)
Pattern: Multiple
echo ... >> filestatements. Suggestion to use{ cmd1; cmd2; } >> file.permissions — Unknown
copilot-requestsscope (41 findings)41 Copilot workflows declare
copilot-requests: write. This is a Copilot-specific permission scope not recognized by actionlint's schema. Likely a false positive.expression — Output property not defined (11 findings)
Pattern:
needs.activation.outputs.activated— theactivatedproperty is not declared in the outputs type schema for theactivationjob. Seen in ace-editor and other workflows.runner-label — Unknown runner labels (12 findings)
Custom or self-hosted runner labels unknown to actionlint.
Historical Trends
untrusted_checkout_execunresolved for 13 daysRecommendations
template-injectionin 25 workflows — use the Copilot agent prompt abovegithub-envusage indev-hawk.mdand sanitize GITHUB_ENV writesuntrusted_checkout_execin smoke-workflow-call workflows — poutine:ignore comments are not suppressing the findingsunpinned-uses(5 High severity) — pin external action SHA referencessmoke-copilot-arm,dev) for supply chain risksecrets-outside-envpattern — affects all 178 workflowscopilot-requestspermission scope warning in actionlint (41 findings) should be reported upstream to rhysd/actionlint for schema updateNext Steps
References:
Beta Was this translation helpful? Give feedback.
All reactions