githubnext / githubnext/gh-aw-cao

[aw-doctor:compiler-security] Compiler security scan findings for githubnext/gh-aw-cao (grant strict-mode failure, 39 critical/high CVEs, 49 High zizmor findi

Closed
#10,157 0 comments 0 reactions 0 assignees View on GitHub
aw-doctor aw-doctor:compiler-security security
Dominant language
JavaScript
Stars
3
Forks
1
Avg merge
49m
Merged PRs (30d)
837

Description

The gh-aw compiler failed strict validation on `githubnext/gh-aw-cao` (exit code 1). Of 51 workflow sources and 51 compiled lock files, the scanner suite reported: 2 actionlint expression errors, 819 zizmor findings (49 High, 447 Medium, 323 Low/Info), 1 poutine/runner-guard medium finding, 39 unique Critical/High CVEs across container images (grype), and 1250 license policy violations across container images (grant, strict mode — the run-terminating failure). No poutine/zizmor errors blocked compilation itself; the hard failures were actionlint's 2 expression errors and grant's strict-mode license policy check. **Recommended next action:** assign the linked issue to Copilot to fix the two actionlint expression bugs and the High-severity github-app/zizmor findings first, then re-evaluate whether container base images can be pinned to lower-CVE/license-compliant tags.

**Action:** Assign this issue to Copilot using **Agent prompt** below; review its pull request and merge only after the full compiler and security scan passes.

Failure details

- **Target repository**: `githubnext/gh-aw-cao`
- **Compiler exit code**: `1`
- **Workflow sources checked**: `51`
- **Generated lock files checked**: `51`
- **Result**: `findings`

| Tool | Workflow/Image | Severity | Finding | Remediation |
|---|---|---|---|---|
| actionlint | self-care-dashboard-performance.lock.yml, self-care-pages-health.lock.yml | error | `safe-outputs-app-token` step-output property not defined in referenced object type at `GIT_TOKEN: ${{ steps.safe-outputs-app-token.outputs.token || ... }}` | Fix the source `.md` template so the step id/output referenced exists in the generated job, or gate the expression correctly; recompile until actionlint is clean |
| zizmor | aw-doctor.lock.yml, aw-failures-investigator.lock.yml, and 20+ other lock files | High | `github-app`: dangerous use of `actions/create-github-app-token` (49 occurrences) | Review each use for scope/least-privilege; ensure token is short-lived, minimally scoped, and not persisted beyond the job; suppress only if a documented false positive |
| zizmor | aw-doctor.lock.yml and most other lock files | Medium | `secrets-outside-env`: secrets referenced without a dedicated `environment:` (418 occurrences) | Move secret-consuming jobs to use a GitHub Environment, or document why not applicable |
| zizmor | dashboard-authoring-corpus.lock.yml, dependabot-release-train-updater.lock.yml, and others | Medium | `artipacked`: credential persistence through Actions artifacts near checkout/upload steps (29 occurrences) | Ensure `persist-credentials: false` on checkout steps preceding artifact upload |
| zizmor | many lock files | Low | `undocumented-permissions`: job `permissions:` blocks lack explanatory comments (294 occurrences) | Add short comments justifying each permission scope in workflow source templates |
| zizmor | aw-doctor.lock.yml and others | Low | `adhoc-packages`: ad-hoc package installs (e.g. `npm install -g @earendil-works/pi-coding-agent`) (26 occurrences) | Pin/vendor installs or document why ad-hoc install is required |
| zizmor | optimization-ai-credit-auditor.lock.yml, optimization-ai-credit-optimizer.lock.yml | Low | `obfuscation`: obfuscated Actions feature usage (e.g. `${{ '' }}`) (3 occurrences) | Replace with a direct literal value where the expression adds no value |
| runner-guard | agentic_commands.yml | Medium | `RGS-005`: job declares write-level permissions while triggered by `pull_request_target`/`issue_comment`-style event | Confirm command-trigger jobs use minimal read-only default permissions and elevate only in trusted, gated steps |
| grype | `ghcr.io/github/gh-aw-firewall/api-proxy:0.28.15`, `cli-proxy:0.28.15` | Critical | `CVE-2026-19931`, `CVE-2026-18924`: Alpine `curl`/`libcurl` 8.21.0-r0 (fix 8.22.0-r0) | Bump base image / package versions to pull patched curl |
| grype | `ghcr.io/github/gh-aw-firewall/agent:0.28.15` | High | `GHSA-rgw5-rvv9-x895`, `GHSA-mh99-v99m-4gvg` (brace-expansion), `GHSA-r292-9mhp-454m` (tar), `GHSA-mwp4-54f8-5fhr` (ip-address) | Update npm dependencies to advised fixed versions in the image build |
| grype | 9 scanned images overall | Critical/High/Medium/Low | 34 Critical, 172 High, 341 Medium, 54 Low findings (39 unique CVE/GHSA IDs) across firewall/agent/proxy/mcp/node/alpine images | Track upstream base-image and dependency updates for each `ghcr.io/github/gh-aw-*` image |
| grant | `node:lts-alpine` and other images | error (strict mode) | 1250 license policy violations (dominant licenses: ISC 365, MIT 285, Apache-2.0 69, GPL-2.0-only 62, BlueOak-1.0.0 55, plus GPL-3.0 variants) | Review grant's license allow-list; either broaden the policy to accept common permissive/GPL licenses already vetted for these images, or exclude affected base images from strict license scanning |

Agent prompt

1. Assign this issue to Copilot.
2. Configure its MCP client to launch `gh aw mcp-server` over stdio from the target repository, then give it the prompt below. Require the server's `fix` and `compile` tools; never allow direct edits to generated `.lock.yml` files.
3. Review the resulting pull request and require the same full compiler and security scan to pass before merge. If a finding needs human action, require the agent to stop and explain it.

**Agent prompt**

Fix the reported gh-aw compiler and security findings in this repository. Change only `.github/workflows/*.md` sources and directly related files; never edit generated `.lock.yml` files. Use the gh-aw MCP server's `fix` and `compile` tools, rerunning compilation with strict validation, model checks, actionlint, shellcheck, yamllint, zizmor, poutine, runner-guard, grant, grype, and syft until clean. Review generated lock-file diffs, preserve existing behavior, and stop with a concise explanation if a finding cannot be fixed safely.

Raw evidence

Compiler run summary:
```
Target: githubnext/gh-aw-cao
Exit code: 1
Workflow sources: 51
Compiled locks: 51
```

Actionlint summary:
```
✓ Checked 51 workflow(s)
⚠ Found 2 issue(s) (2 error(s))
Issues by type:
• expression: 2
```

Sample actionlint error:
```
.github/workflows/self-care-dashboard-performance.lock.yml:2314:26: error: [expression] property "safe-outputs-app-token" is not defined in object type {download-agent-output: ...}
2314 | GIT_TOKEN: ${{ steps.safe-outputs-app-token.outputs.token || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
```

zizmor rule counts (819 total findings):
```
418 [Medium] secrets-outside-env
294 [Low] undocumented-permissions
49 [High] github-app
29 [Medium] artipacked
26 [Low] adhoc-packages
3 [Low] obfuscation
```

runner-guard finding:
```
agentic_commands.yml:1:1: warning: [medium] RGS-005: Excessive Permissions on Untrusted Trigger
```

grype severity counts across 9 scanned images:
```
Critical: 34 High: 172 Medium: 341 Low: 54
```
(39 unique CVE/GHSA identifiers; sample: CVE-2026-19931, CVE-2026-18924 in api-proxy/cli-proxy `curl`/`libcurl`; GHSA-rgw5-rvv9-x895, GHSA-mh99-v99m-4gvg, GHSA-r292-9mhp-454m, GHSA-mwp4-54f8-5fhr in `agent` image npm deps)

grant (license policy, strict mode — run-terminating):
```
✗ grant failed
strict mode: grant found 1250 license policy finding(s) in container images
```
License distribution (top): ISC 365, MIT 285, Apache-2.0 69, GPL-2.0-only 62, BlueOak-1.0.0 55, BSD-2-Clause 32, BSD-3-Clause 22, GPL-3.0-or-later 18.

Uncommitted workflow diff from this compile run (git status): 3 workflow `.md`/`.json` sources and 51 `.lock.yml` files modified, 1 new `.poutine.yml` untracked (448 insertions, 438 deletions across 55 files) — these were compiler-produced local artifacts from this deterministic run and were not committed by this worker.

Control plane context

- Correlation ID: `34655505203-1183`
- Central repository: `githubnext/gh-aw-cao`
- Control plane run URL: `https://github.com/githubnext/gh-aw-cao/actions/runs/34655505203`

> Generated by [:shield: AW Doctor / Compiler Security](https://github.com/githubnext/gh-aw-cao/actions/runs/34655505203) · copilot · auto · 64.5 AIC · ⌖ 8.58 AIC · ⊞ 14.3K · [◷](https://github.com/search?q=repo%3Agithubnext%2Fgh-aw-cao+is%3Aissue+%22gh-aw-workflow-call-id%3A+githubnext%2Fgh-aw-cao%2Faw-maintenance-compiler-security%22&type=issues)
> - [x] expires on Sep 25, 2026, 11:06 PM UTC

Contributor guide

Open the contributing guide

Research direction

Start with the workflow sources that generate self-care-dashboard-performance.lock.yml and self-care-pages-health.lock.yml, plus agentic_commands.yml, and review the gh-aw MCP server's fix and compile entry points. Recompile with strict validation and the listed security scanners; done means the two actionlint errors and blocking security findings are resolved without editing generated .lock.yml files.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, github-actions, javascript
Domain
ci-cd, devops, security, tooling
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.