Skip to content

[static-analysis] Report - 2026-04-28 #28973

@github-actions

Description

@github-actions

Analysis Summary

Static analysis scan completed on 2026-04-28 using four tools against all 202 agentic workflow files in this repository. All 202 workflows compiled successfully.

  • Tools Used: zizmor, poutine, actionlint, runner-guard
  • Total Findings: 1,817 (↓3 vs yesterday)
  • Workflows Scanned: 202 (↓3 from 205)
  • Workflows with Findings: ~115

Findings by Tool

Tool Total Critical High Medium Low/Info
runner-guard (taint analysis) 1,571 0 1,525 46 0
actionlint (linting) 114 114
zizmor (security) 109 0 1 1 107
poutine (supply chain) 23 0 8 1 14

Runner-Guard Taint Analysis

Rule ID Name Severity Count Δ vs Yesterday
RGS-004 Comment-Triggered Workflow Without Author Authorization Check High 1,397 +3
RGS-008 Secret Directly Interpolated in run Block High 86 0
RGS-018 Suspicious Payload Execution Pattern High 38 -2
RGS-005 Excessive Permissions on Untrusted Trigger Medium 46 0
RGS-012 Secret Exfiltration via Outbound HTTP Request High 3 0
RGS-006 Curl-Pipe-Bash Remote Code Execution High 1 -1

All runner-guard findings have existing tracking issues. No new Critical/High issues to create. Existing tracking issues: #28154 (RGS-018), #28155 (RGS-008), #28156 (RGS-004), #28488 (RGS-012).

Clustered Findings by Tool

Actionlint Linting Issues

Issue Type Count Δ
copilot-requests unknown permission scope 101 -2
Undefined expression properties (job.*, needs.*.outputs.*) 11 0
shellcheck style issues 2 +1

copilot-requests: write remains unrecognized by actionlint — GitHub-internal/preview permission scope not yet in actionlint's schema (false positives).

Zizmor Security Findings

Issue Type Severity Count Affected Workflows
template-injection Informational/Low 85 ~28 workflows
obfuscation (${{ '' }}) Low 22 22 workflows
github-env (dangerous env file) High 1 dev-hawk
secrets-inherit Medium 1 smoke-call-workflow

The dev-hawk github-env High finding continues to warrant review (carried over since 2026-04-24).

Poutine Supply Chain Findings

Issue Type Severity Count
untrusted_checkout_exec Error 8
github_action_from_unverified_creator_used Note 8
unverified_script_exec (curl|bash) Note 4
pr_runs_on_self_hosted Warning 1
default_permissions_on_risky_events Warning 1
other Note 1

Runner-Guard Taint Analysis Findings

Rule ID Name Severity Affected Workflows
RGS-004 Comment-Triggered Workflow Without Author Authorization Check High 16 workflows
RGS-008 Secret Directly Interpolated in run Block High ~85 workflows
RGS-018 Suspicious Payload Execution Pattern High 35 workflows
RGS-005 Excessive Permissions on Untrusted Trigger Medium 15 workflows
RGS-012 Secret Exfiltration via Outbound HTTP Request High 2 workflows
RGS-006 Curl-Pipe-Bash Remote Code Execution High 1 workflow

Issues created: none (all existing — #28154, #28155, #28156, #28488)

Top Priority Issues

1. RGS-004: Comment-Triggered Workflow Without Author Authorization Check (tracked: #28156)

  • Tool: runner-guard
  • Count: 1,397 instances (↑3) across 16 workflows
  • Severity: High
  • Affected: unbloat-docs, ace-editor, ai-moderator, tidy, plan, q, scout, brave, cloclo, dev-hawk, grumpy-reviewer, pdf-summary, pr-nitpick-reviewer, security-review, archie, mergefest
  • Impact: Any GitHub user can trigger privileged operations by posting a comment on any open issue/PR
  • Reference: https://github.com/Vigilant-LLC/runner-guard

2. RGS-008: Secret Directly Interpolated in run Block (tracked: #28155)

3. RGS-018: Suspicious Payload Execution Pattern (tracked: #28154)

  • Tool: runner-guard
  • Count: 38 instances (↓2) across 35 workflows
  • Severity: High
  • Impact: Patterns matching jqschema.sh heredoc scripts or eval+decode chains — flagged by runner-guard IOC database
  • Reference: https://github.com/Vigilant-LLC/runner-guard

Fix Suggestion for RGS-008 (Most Actionable — ~85 Workflows Affected)

Issue: Secrets Directly Interpolated in run: Blocks
Severity: High
Affected Workflows: ~85 workflows (86 instances)

Prompt to Copilot Agent:

You are fixing a security vulnerability identified by runner-guard (RGS-008).

**Vulnerability**: Secret Directly Interpolated in run Block
**Rule**: RGS-008 — https://github.com/Vigilant-LLC/runner-guard

**Current Issue**:
In many workflows, secrets are interpolated directly into `run:` blocks using
`${{ secrets.SOME_SECRET }}` syntax. This embeds the secret as plain text in the
shell script source before execution, exposing it to:
- Error messages and debug output
- Shell history and /proc filesystem
- Log masking bypass via side channels
- Amplified impact of any expression injection vulnerability

**Required Fix**:
Move all `${{ secrets.* }}` expressions from inside `run:` blocks to the `env:`
mapping of that step. Reference them in the script via environment variable syntax.

**Example**:

Before (insecure):
```yaml
- name: Start MCP Gateway
  run: |
    start_gateway.sh --token ${{ secrets.API_TOKEN }}

After (secure):

- name: Start MCP Gateway
  env:
    API_TOKEN: ${{ secrets.API_TOKEN }}
  run: |
    start_gateway.sh --token $API_TOKEN

Steps:

  1. Search for ${{ secrets. patterns inside run: blocks in .github/workflows/*.md
  2. For each occurrence, add the secret to the step's env: block with a suitable name
  3. Replace ${{ secrets.NAME }} in the run script with $NAME
  4. Repeat for ${{ github.token }} and ${{ env.GITHUB_TOKEN }} used inside run blocks

Apply this fix to all affected workflows flagged by runner-guard RGS-008 in .github/workflows/.


<details>
<summary>View All Findings Details</summary>

#### Zizmor — github-env (High)

- `dev-hawk.lock.yml:1403`: A step derives `GH_HOST` from `GITHUB_SERVER_URL` and writes it to `$GITHUB_ENV`. In GHES environments this could be manipulated. The step has a comment indicating intentional GHES support behavior. [Carried over since 2026-04-24]

#### Zizmor — secrets-inherit (Medium)

- `smoke-call-workflow.lock.yml`: Calls smoke-workflow-call with `secrets: inherit`, propagating all secrets to the called workflow.

#### Zizmor — template-injection (Informational/Low, 85 instances)

Affecting ~28 workflows: `ai-moderator`, `auto-triage-issues`, `contribution-check`, `daily-doc-updater`, `daily-issues-report`, `daily-token-consumption-report`, `discussion-task-miner`, `grumpy-reviewer`, `issue-arborist`, `issue-monster`, `issue-triage-agent`, `org-health-report`, `plan`, `pr-triage-agent`, `q`, `refiner`, `scout`, `smoke-agent-*`, `smoke-copilot`, `smoke-service-ports`, `stale-repo-identifier`, `weekly-issue-summary`, and others.

#### Zizmor — obfuscation (Low, 22 instances)

All relate to the `GH_AW_WIKI_NOTE: ${{ '' }}` pattern — an intentional empty-string placeholder for wiki note configuration. By design.

#### Actionlint — Unknown Permission Scopes (101 errors)

`copilot-requests: write` appears in 50+ workflows. GitHub-internal/preview permission scope not yet in actionlint's schema. False positives.

#### Actionlint — Undefined Expression Properties (11 errors)

- `ace-editor`: `needs.activation.outputs.activated`
- `smoke-claude`: `needs.activation.outputs.artifact_prefix` (×2)
- `smoke-workflow-call` / `smoke-workflow-call-with-inputs`: `job.workflow_repository`, `job.workflow_sha`, `job.workflow_ref`, `job.workflow_file_path` — GitHub-internal `job` context properties not yet in actionlint's schema

#### Poutine — Unverified Actions (8 notes)

- `astral-sh/setup-uv@...` in `mcp-inspector`, `copilot-token-audit`, `copilot-setup-steps`
- `gaurav-nelson/github-action-markdown-link-check@...` in `link-check.yml` (×2)
- `super-linter/super-linter@...` in `super-linter`
- `actions-ecosystem/action-add-labels@...` in `smoke-codex`

#### Poutine — Unverified Script Execution (4 notes)

`curl -fsSL .../install-gh-aw.sh | bash` in `copilot-setup-steps.yml`, `copilot-token-optimizer`, `copilot-token-audit` — downloading and executing unverified scripts from main branch without SHA pinning.

#### Runner-Guard — RGS-004 (High, 1,397 instances, 16 workflows)

Workflows triggered by `issue_comment` / `pull_request_review_comment` without verifying `author_association`. Tracked in #28156.

**Affected workflows**: `unbloat-docs`, `ace-editor`, `ai-moderator`, `tidy`, `plan`, `q`, `scout`, `brave`, `cloclo`, `dev-hawk`, `grumpy-reviewer`, `pdf-summary`, `pr-nitpick-reviewer`, `security-review`, `archie`, `mergefest`

#### Runner-Guard — RGS-008 (High, 86 instances, ~85 workflows)

Widespread across most agentic workflows using the MCP Gateway `start-mcp-gateway` step pattern. Tracked in #28155.

#### Runner-Guard — RGS-018 (High, 38 instances, 35 workflows)

Primarily the `jqschema.sh` heredoc setup script flagged as a suspicious payload pattern. Affected: `cli-version-checker`, `copilot-session-insights`, `deep-report`, `org-health-report`, `issue-arborist`, `smoke-copilot-arm`, `smoke-crush`, and ~28 others. Tracked in #28154.

#### Runner-Guard — RGS-005 (Medium, 46 instances, 15 workflows)

Write permissions on comment/PR-triggered workflows without sufficient isolation. Primarily `unbloat-docs.lock.yml` and `tidy.lock.yml`.

#### Runner-Guard — RGS-006 (High, 1 instance)

- `copilot-token-audit.lock.yml:472`: `curl -fsSL .../install-gh-aw.sh | bash` — downloading and executing remote scripts without integrity verification.

#### Runner-Guard — RGS-012 (High, 3 instances)

- `visual-regression-checker.lock.yml`: outbound HTTP requests in job with secrets access (tracked #28488)
- `docs-noob-tester.lock.yml`: `curl localhost:4321` in job with secrets access (tracked #28488)

</details>

### Historical Trends

| Metric | 2026-04-24 | 2026-04-25 | 2026-04-26 | 2026-04-27 | 2026-04-28 | Δ |
|--------|-----------|-----------|-----------|-----------|-----------|---|
| Workflows Scanned | 201 | 202 | 205 | 205 | 202 | -3 |
| Total Findings | ~1,817 | ~1,818 | ~1,821 | 1,820 | 1,817 | -3 |
| Runner-guard Total | 1,569 | 1,569 | 1,571 | 1,571 | 1,571 | 0 |
| Actionlint Issues | 116 | 115 | 115 | 115 | 114 | -1 |
| Zizmor Total | 110 | 110 | 110 | 110 | 109 | -1 |
| Poutine Total | 24 | 24 | 24 | 24 | 23 | -1 |

Small reductions across actionlint, zizmor, and poutine consistent with 3 fewer workflows being scanned today (202 vs 205). Runner-guard total remains stable at 1,571 with minor shifts: RGS-004 +3, RGS-018 -2, RGS-006 -1.

#### New Issues
None — all finding types were present in previous scans.

#### Resolved Issues
None — small count reductions are due to 3 fewer workflows, not fixed vulnerabilities.

### Recommendations

1. **Ongoing**: Apply RGS-008 fix pattern (move secrets to `env:` block) across ~85 affected workflows (#28155)
2. **Ongoing**: Continue work on RGS-004 (#28156) — 1,397 instances across 16 workflows
3. **Ongoing**: Continue work on RGS-018 (#28154) — 38 instances across 35 workflows
4. **Short-term**: Review `dev-hawk` github-env High zizmor finding — consider alternative to `$GITHUB_ENV` for `GH_HOST`
5. **Short-term**: Fix RGS-006 `curl|bash` pattern in `copilot-token-audit`
6. **Long-term**: Establish automated pre-merge static analysis checks in CI/CD

### Next Steps

- [ ] Continue RGS-008 remediation (#28155) — 86 instances across ~85 workflows
- [ ] Continue RGS-004 remediation (#28156) — 1,397 instances across 16 workflows
- [ ] Continue RGS-018 remediation (#28154) — 38 instances across 35 workflows
- [ ] Fix RGS-006 `curl|bash` pattern in `copilot-token-audit`
- [ ] Review `dev-hawk` github-env High zizmor finding
- [ ] Investigate 3 missing workflows vs yesterday (205→202)

**References:**
- [§25074607105](https://github.com/github/gh-aw/actions/runs/25074607105)
- Previous report: #28791 (2026-04-27)




> Generated by [Static Analysis Report](https://github.com/github/gh-aw/actions/runs/25074607105/agentic_workflow) · ● 472.6K · [◷](https://github.com/search?q=repo%3Agithub%2Fgh-aw+is%3Aissue+%22gh-aw-workflow-call-id%3A+github%2Fgh-aw%2Fstatic-analysis-report%22&type=issues)
> - [x] expires <!-- gh-aw-expires: 2026-05-05T20:08:50.269Z --> on May 5, 2026, 8:08 PM UTC

<!-- gh-aw-agentic-workflow: Static Analysis Report, engine: claude, model: auto, id: 25074607105, workflow_id: static-analysis-report, run: https://github.com/github/gh-aw/actions/runs/25074607105 -->

<!-- gh-aw-workflow-id: static-analysis-report -->
<!-- gh-aw-workflow-call-id: github/gh-aw/static-analysis-report -->

Metadata

Metadata

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