You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
untrusted_checkout_exec — bash "${RUNNER_TEMP}/gh-aw/actions/*.sh" invocations flagged in smoke-workflow-call.lock.yml (lines 318, 333, 348, 456, 461) and smoke-workflow-call-with-inputs.lock.yml (lines 456, 461, plus 3 more). Several already carry a # poutine:ignore untrusted_checkout_exec comment yet still get flagged — see Fix Suggestion below.
Issues created this run: none. Every Critical/High finding above was individually verified (via gh api search/issues) against prior [static-analysis] issue history:
Per the dedup rule (closed issue for same rule+file → skip, don't recreate), no new issues were filed. RGS-005/RGS-019 are Medium severity and excluded from issue creation by policy regardless.
RGS-004 detail (verbatim rule text)
"A workflow is triggered by issue_comment, pull_request_review_comment, or workflow_run events and accesses secrets or has write permissions, but does not verify the comment author's authorization level before executing privileged operations... any external user can trigger the workflow by posting a comment on any open issue or pull request."
Runner-guard emits one hit per privileged step, so 308 instances = 3 root-cause workflows (q.lock.yml 124 steps, dev-hawk.lock.yml 94 steps, ai-moderator.lock.yml 90 steps), not 308 distinct vulnerabilities.
Notable Critical CVEs with fixes already available: CVE-2025-55130 (node/libnode → 20.19.2+deb13u1 / node 20.20.0+), CVE-2025-15467 (openssl/libssl3 → 3.0.18-1~deb12u2 / 3.3.6-r0 / 3.5.5-r0), CVE-2026-27699 (node-agent-base/http-proxy-agent family → +deb13u1), GHSA-p77j-4mvh-x3m3/GO-2026-4337 (google.golang.org/grpc in gh-aw-mcpg:v0.4.6 → 1.79.3), and a cluster of golang.org/x/crypto@v0.40.0 advisories in gh-aw-mcpg:v0.4.6 (fix: 0.52.0). No-fix-yet criticals include CVE-2026-31789 (libcrypto3), CVE-2026-12087/CVE-2026-13221 (perl), CVE-2026-5450 (libc6 in github-mcp-server:v1.7.0), CVE-2026-4800 (lodash), CVE-2026-33937 (handlebars).
Given the volume (4,256 raw / 1,043 distinct CVEs across shared base/MCP images, not individual workflow files), this is reported as a clustered summary; the full per-image CVE list is in the compiler log if a detailed spreadsheet is needed.
Yamllint YAML Linting Findings
No standard YAML lint rule violations (0 line-length/indentation/trailing-spaces hits). The yamllint section instead surfaced 7 gh-aw compiler configuration advisories:
Compiler advisories
Detected 53 slash_command entries in this repository; 1 are not using centralized routing.
Schedule uses hourly interval with fixed minute offset (11) — consider fuzzy 'every 6h'.
Schedule uses fixed daily time (23:05 UTC) — consider fuzzy 'daily'.
Schedule uses fixed daily time (21:47 UTC) — consider fuzzy 'daily'.
Schedule uses fixed weekly time (Monday 16:00 UTC) — consider fuzzy 'weekly on monday'.
Schedule uses fixed daily time (2:17 UTC) — consider fuzzy 'daily'.
Schedule uses fixed daily time (0:18 UTC) — consider fuzzy 'daily'.
Top Priority Issues
1. RGS-004 — Comment-Triggered Workflow Without Author Authorization Check
Description: Comment/workflow_run-triggered workflows with secrets/write access lack an explicit author_association gate detectable by static analysis.
Impact: If no compiler-level guard exists, any external commenter could trigger privileged execution.
Status: All 3 already covered by closed issues; likely a known false-positive pattern on gh-aw's generated activation gating (not visible to the static scanner) — see fix suggestion below for the permanent resolution path.
Description: bash execution of bundled first-party scripts flagged as arbitrary-code-execution risk; some occurrences already have a # poutine:ignore comment that isn't being honored.
Impact: Noise reduction — real risk is low (bundled scripts, not untrusted checkout content) but the inconsistent suppression means real findings could get lost in the noise.
3. Grype Critical CVEs in serena-mcp-server:latest
Tool: grype
Count: 63 critical (1,059 total)
Severity: Critical
Affected: any workflow pulling ghcr.io/github/serena-mcp-server:latest
Description: Largest critical-CVE surface of any MCP image in the fleet.
Impact: Highest concentration of unpatched critical vulnerabilities; worth a base-image refresh/rebuild cadence review.
Fix Suggestion for Poutine untrusted_checkout_exec
Issue: Inconsistent # poutine:ignore untrusted_checkout_exec suppression on generated first-party script steps Severity: error (poutine) / low actual risk Affected Workflows: 2 workflows (smoke-workflow-call.lock.yml, smoke-workflow-call-with-inputs.lock.yml), 10 findings — but the underlying template bug affects any workflow using these compiler-emitted steps
Prompt to Copilot Agent:
You are fixing a supply-chain security lint finding identified by poutine.
Vulnerability: untrusted_checkout_exec — Arbitrary Code Execution from Untrusted Code
Changes (Detected usage of `bash`)
Rule: https://github.com/boostsecurityio/poutine/blob/main/docs/rules/untrusted_checkout_exec.md
Current Issue:
poutine flags `run: bash "${RUNNER_TEMP}/gh-aw/actions/<script>.sh"` steps in generated
workflow lock files as a potential arbitrary-code-execution risk. Several of these
steps already carry a `# poutine:ignore untrusted_checkout_exec` comment (they run
trusted first-party scripts bundled with the gh-aw compiler, not attacker-controlled
checkout content), but poutine still reports 10 occurrences across
smoke-workflow-call.lock.yml and smoke-workflow-call-with-inputs.lock.yml — e.g. the
"Log runtime features" step has no suppression comment above it while the sibling
"Save base github folders" step does.
NOTE: These findings are on auto-generated `.lock.yml` files. The fix belongs in the
gh-aw compiler's Go step-template code that emits these steps, NOT in the lock file.
Required Fix:
1. Search the compiler source (pkg/workflow or equivalent) for every template that
emits `run: bash "${RUNNER_TEMP}/gh-aw/actions/*.sh"` and confirm each emits a
`# poutine:ignore untrusted_checkout_exec` comment immediately above the `run:` line.
2. Recompile smoke-workflow-call.md and smoke-workflow-call-with-inputs.md and re-run
poutine to confirm the suppression is now honored for every occurrence.
3. If poutine still flags a step despite the comment, check whether poutine requires
the comment on the same line as `run:` rather than the line above, and adjust
comment placement to match poutine's documented suppression syntax.
Example (before, missing suppression comment):
- name: Log runtime features
if: ${{ contains(toJSON(vars), '"GH_AW_RUNTIME_FEATURES":') }}
run: bash "${RUNNER_TEMP}/gh-aw/actions/log_runtime_features_summary.sh"
Example (after):
- name: Log runtime features
if: ${{ contains(toJSON(vars), '"GH_AW_RUNTIME_FEATURES":') }}
# poutine:ignore untrusted_checkout_exec
run: bash "${RUNNER_TEMP}/gh-aw/actions/log_runtime_features_summary.sh"
Apply the compiler template fix once; it propagates to all generated lock files on the
next `gh-aw compile`, including the two workflows above.
None. No new rule types appeared versus 2026-07-25.
Resolved Issues
Actionlint dropped from 55 → 20 findings (-64%), continuing a steady downward trend from 125 on 2026-07-24.
daily-squid-image-scan.lock.yml RGS-018 (present 2026-07-25) no longer appears — resolved or workflow changed.
Workflow-level finding coverage narrowed from 33 files (2026-07-25) to 10 files this run, though this partly reflects that most of those findings already had closed tracking issues rather than new remediation.
Recommendations
Immediate: None outstanding — all Critical/High runner-guard and poutine error-level findings already have (closed) tracking issues; verify the closures reflect real fixes rather than just issue expiry.
Short-term: Fix the remaining 20 actionlint/shellcheck issues (SC2086 quoting, SC2038 find/xargs -print0) — small, mechanical, and shrinking already.
Medium-term: Resolve the poutine untrusted_checkout_exec suppression-comment gap (Fix Suggestion above) to keep the poutine signal clean.
Long-term: Track grype critical CVEs per image over time (serena-mcp-server:latest and mcp/markitdown are the largest critical-CVE surfaces) and schedule periodic base-image rebuilds.
🔍 Static Analysis Report - 2026-07-28
Analysis Summary
Findings by Tool
No overall Runner-Guard score/grade is printed in this log format.
Clustered Findings by Tool and Type
Zizmor Security Findings
None. Zizmor ran clean across all 264 workflows — the 13th consecutive scan with zero findings since 2026-07-16.
Poutine Supply Chain Findings
untrusted_checkout_execgithub_action_from_unverified_creator_usedpr_runs_on_self_hostedPoutine finding details
untrusted_checkout_exec—bash "${RUNNER_TEMP}/gh-aw/actions/*.sh"invocations flagged insmoke-workflow-call.lock.yml(lines 318, 333, 348, 456, 461) andsmoke-workflow-call-with-inputs.lock.yml(lines 456, 461, plus 3 more). Several already carry a# poutine:ignore untrusted_checkout_execcomment yet still get flagged — see Fix Suggestion below.github_action_from_unverified_creator_used—safedep/pmg@5ac0f27...(dataflow-pr-discussion-dataset:550, hippo-embed:471),actions-ecosystem/action-add-labels@18f1af5...(smoke-codex:2368),astral-sh/setup-uv@11f9893...(mcp-inspector:593) and@eac588a...(copilot-setup-steps.yml:43),erlef/setup-beam@54075bc...(daily-elixir-credo-snippet-audit:472),gaurav-nelson/github-action-markdown-link-check@5c5dfc0...(link-check.yml:36,44),super-linter/super-linter@4ce2083...(super-linter:1754).pr_runs_on_self_hosted—smoke-copilot-arm.lock.yml:497usesruns-on: ubuntu-24.04-armon a PR-triggered job.Actionlint Linting Issues
find|xargswithout-print0)i){ }grouping instead of repeated redirects)echo $(cmd)→ justcmd)All 20 findings are shellcheck issues surfaced through actionlint; 0 pyflakes errors.
Syft SBOM Inventory
18 container images / 6,853 total packages
Mixed Debian/apt, Alpine/apk, npm, Go module, and Python/pip ecosystems given the mix of Debian- and Alpine-based images. No syft errors.
Runner-Guard Taint Analysis Findings
No Runner-Guard Score/grade is printed in this compiler's output format.
Issues created this run: none. Every Critical/High finding above was individually verified (via
gh api search/issues) against prior[static-analysis]issue history:Per the dedup rule (closed issue for same rule+file → skip, don't recreate), no new issues were filed. RGS-005/RGS-019 are Medium severity and excluded from issue creation by policy regardless.
RGS-004 detail (verbatim rule text)
"A workflow is triggered by
issue_comment,pull_request_review_comment, orworkflow_runevents and accesses secrets or has write permissions, but does not verify the comment author's authorization level before executing privileged operations... any external user can trigger the workflow by posting a comment on any open issue or pull request."Runner-guard emits one hit per privileged step, so 308 instances = 3 root-cause workflows (q.lock.yml 124 steps, dev-hawk.lock.yml 94 steps, ai-moderator.lock.yml 90 steps), not 308 distinct vulnerabilities.
Grype Container Vulnerability Findings
Severity breakdown and top images
Top images by finding volume:
serena-mcp-server:latest(1,059, 63 critical),mcp/markitdown(893, 45 critical),mcp/arxiv-mcp-server(404, 16 critical),gh-aw-firewall/agent:0.27.42(344),mcp/notion(335, 12 critical),semgrep/semgrep:latest(250, 22 critical),grafana/mcp-grafana(231, 11 critical),gh-aw-mcpg:v0.4.6(168, 16 critical).Notable Critical CVEs with fixes already available:
CVE-2025-55130(node/libnode → 20.19.2+deb13u1 / node 20.20.0+),CVE-2025-15467(openssl/libssl3 → 3.0.18-1~deb12u2 / 3.3.6-r0 / 3.5.5-r0),CVE-2026-27699(node-agent-base/http-proxy-agent family → +deb13u1),GHSA-p77j-4mvh-x3m3/GO-2026-4337(google.golang.org/grpc in gh-aw-mcpg:v0.4.6 → 1.79.3), and a cluster ofgolang.org/x/crypto@v0.40.0advisories ingh-aw-mcpg:v0.4.6(fix: 0.52.0). No-fix-yet criticals includeCVE-2026-31789(libcrypto3),CVE-2026-12087/CVE-2026-13221(perl),CVE-2026-5450(libc6 in github-mcp-server:v1.7.0),CVE-2026-4800(lodash),CVE-2026-33937(handlebars).Given the volume (4,256 raw / 1,043 distinct CVEs across shared base/MCP images, not individual workflow files), this is reported as a clustered summary; the full per-image CVE list is in the compiler log if a detailed spreadsheet is needed.
Yamllint YAML Linting Findings
No standard YAML lint rule violations (0 line-length/indentation/trailing-spaces hits). The yamllint section instead surfaced 7 gh-aw compiler configuration advisories:
Compiler advisories
Top Priority Issues
1. RGS-004 — Comment-Triggered Workflow Without Author Authorization Check
author_associationgate detectable by static analysis.2. Poutine
untrusted_checkout_execbashexecution of bundled first-party scripts flagged as arbitrary-code-execution risk; some occurrences already have a# poutine:ignorecomment that isn't being honored.3. Grype Critical CVEs in
serena-mcp-server:latestghcr.io/github/serena-mcp-server:latestFix Suggestion for Poutine
untrusted_checkout_execIssue: Inconsistent
# poutine:ignore untrusted_checkout_execsuppression on generated first-party script stepsSeverity: error (poutine) / low actual risk
Affected Workflows: 2 workflows (smoke-workflow-call.lock.yml, smoke-workflow-call-with-inputs.lock.yml), 10 findings — but the underlying template bug affects any workflow using these compiler-emitted steps
Prompt to Copilot Agent:
Historical Trends
New Issues
None. No new rule types appeared versus 2026-07-25.
Resolved Issues
daily-squid-image-scan.lock.ymlRGS-018 (present 2026-07-25) no longer appears — resolved or workflow changed.Recommendations
error-level findings already have (closed) tracking issues; verify the closures reflect real fixes rather than just issue expiry.find/xargs -print0) — small, mechanical, and shrinking already.untrusted_checkout_execsuppression-comment gap (Fix Suggestion above) to keep the poutine signal clean.serena-mcp-server:latestandmcp/markitdownare the largest critical-CVE surfaces) and schedule periodic base-image rebuilds.Next Steps
untrusted_checkout_execsuppression-comment fix in the compilerserena-mcp-server:latestandmcp/markitdownfor a base-image refreshReferences: