Static Analysis Report - 2026-03-16 #21184
Closed
Replies: 1 comment
-
|
This discussion has been marked as outdated by Static Analysis Report. A newer discussion is available at Discussion #21350. |
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.
-
Analysis Summary
Daily static analysis scan of 172 agentic workflows using three tools: zizmor (security), poutine (supply chain), and actionlint (linting). All 172 workflows compiled successfully with 0 errors. The most notable finding is the poutine
untrusted_checkout_execERROR persisting for a second consecutive day in smoke test workflows — this requires attention.Findings by Tool
Delta vs Yesterday (2026-03-15)
Clustered Findings by Tool and Type
Zizmor Security Findings (3,724 raw, 4 unique types)
secrets-outside-envartipackeddaily-copilot-token-reportobfuscationtemplate-injectioncontribution-checkPoutine Supply Chain Findings (18 raw, 5 rule types)
untrusted_checkout_execsmoke-workflow-call,smoke-workflow-call-with-inputspr_runs_on_self_hostedsmoke-copilot-armgithub_action_from_unverified_creator_usedcopilot-setup-steps,daily-copilot-token-report,mcp-inspector,link-check(×2),super-linter,vetunverified_script_execcopilot-setup-steps,daily-copilot-token-reportunpinnable_actiondaily-perf-improver/build-steps,daily-test-improver/coverage-stepsActionlint Linting Issues (42 errors)
permissionscopilot-requestsis a valid GitHub Copilot permission scopeexpressionace-editor(line 527)needs.activation.outputs.activatedproperty undefinedshellcheck(SC2129)release(line 1277){ cmd1; cmd2; } >> fileinstead of individual redirectsTop Priority Issues
1. 🔴 Poutine:
untrusted_checkout_exec(ERROR) — Day 2 Unresolvedsmoke-workflow-call.lock.yml(lines 173, 274, 278),smoke-workflow-call-with-inputs.lock.yml(lines 170, 274, 278)bashscripts. Poutine detects this as arbitrary code execution risk — a malicious PR author could inject code into the checked-out branch that executes during the workflow run.2. 🟡 Zizmor:
secrets-outside-env(Medium) — Systemic, All Workflowsrun:steps rather than being passed via a dedicatedenv:block. This pattern can expose secrets in logs, error messages, or to downstream steps that shouldn't access them.3. 🟡 Actionlint:
expressioninace-editor(Error)ace-editor.lock.yml:527:9needs.activation.outputs.activated— propertyactivatednot defined in the output type of theactivationjob.post_ace_linkjob to never run, or run unconditionally.Fix Suggestion for
untrusted_checkout_exec(Top Priority)Issue: Arbitrary code execution from untrusted PR code in smoke workflows
Severity: ERROR
Affected Workflows: 2 workflows (6 poutine findings)
Prompt to Copilot Agent:
Option B - Separate trusted and untrusted code execution:
Run the checkout and bash scripts in separate jobs where the bash job does NOT
have access to the checked-out untrusted code.
Option C - Use actions/checkout with persist-credentials: false and avoid
running scripts from the checkout directory on untrusted code.
Example pattern (Option A):
Before:
After (with trust gate):
Please review these two workflow files and apply the appropriate fix based on their
actual triggers and intended use case.
The
activationjob does not declareactivatedas an output. The output may be named differently in the lock file.release.lock.yml:1277:9— shellcheck SC2129permissionserrors (×40) — Known false positiveAll Copilot-engine workflows include
copilot-requests: writepermission. actionlint v1.7.11 does not recognize this as a valid permission scope, but it is a valid GitHub Copilot API permission. No action required.Zizmor: obfuscation findings (Low, ×20)
Pattern:
GH_AW_WIKI_NOTE: $\{\{ '' }}at column 32 — using$\{\{ '' }}as an empty string expression rather than a plain empty string. Affects 20 workflows:agent-performance-analyzer, audit-workflows, copilot-agent-analysis, copilot-cli-deep-research, copilot-pr-nlp-analysis, copilot-pr-prompt-analysis, copilot-session-insights, daily-cli-performance, daily-code-metrics, daily-copilot-token-report, 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
Fix: Replace
$\{\{ '' }}with an empty string""or omit the env var if unused.Historical Trends
Key Events:
secrets-outside-envaudit added (~3,541 new raw findings)untrusted_checkout_exec(ERROR) appeared in smoke workflowsuntrusted_checkout_execstill unresolved (day 2);workflow-callactionlint error resolvedRecommendations
untrusted_checkout_execinsmoke-workflow-call.mdandsmoke-workflow-call-with-inputs.md— these are ERROR-severity poutine findings now entering their second day unresolved.expressionerror inace-editor.lock.yml:527— theactivatedoutput property may be missing from the job definition.shellcheckSC2129 inrelease.lock.yml:1277— consolidate multiple>>redirects.safedep/vet-action@v1to a SHA for supply chain safety (currently the only non-SHA-pinned action among poutine findings).secrets-outside-envfindings are systemic to the gh-aw workflow pattern. Evaluate whether addingenvironment:blocks to agent jobs would reduce exposure.$\{\{ '' }}obfuscation patterns with plain empty strings across the 20 affected workflows.Next Steps
untrusted_checkout_execin smoke-workflow-call workflows (use fix suggestion prompt above with Copilot)ace-editorexpression error foractivatedoutputreleaseSC2129 shellcheck style issuesafedep/vet-actionto SHAcopilot-requestspermission false positives in actionlint configReferences:
Beta Was this translation helpful? Give feedback.
All reactions