Skip to content

fix: credit no-token exec (FG-001) and author-association guards (FG-016)#24

Merged
north-echo merged 1 commit into
mainfrom
fix/pwn-nocred-authorguard-tuning
Jul 17, 2026
Merged

fix: credit no-token exec (FG-001) and author-association guards (FG-016)#24
north-echo merged 1 commit into
mainfrom
fix/pwn-nocred-authorguard-tuning

Conversation

@north-echo

Copy link
Copy Markdown
Owner

Summary

Two mitigation-aware downgrades surfaced by triaging the targeted pull_request_target hunt — both cases where a real defensive control existed that the rules didn't credit.

  • FG-001 (Pwn Request) — when the job executing fork code has permissions: {} (no GITHUB_TOKEN) and references no secrets, fork code runs but there's nothing to steal, so it isn't a secret-exfil pwn request → info. Jobs with a scoped token (e.g. pull-requests: write) are unaffected. Self-hosted host risk, if any, remains covered by FG-009.
  • FG-016 (Local Action After Untrusted Checkout) — when the job's if: restricts execution to trusted authors (MEMBER/OWNER/COLLABORATOR) or excludes forks, an external fork can't reach the local action → info. Also taught hasAuthorAssociationGuard the contains(fromJSON('["MEMBER",...]'), author_association) allowlist idiom.

Verified on source repos

  • ionos-cloud/cluster-api-provider-proxmox FG-001 (permissions:{} + pre-screen): critical → info
  • redwoodjs/agent-ci FG-016 (author-association gate): critical → info
  • Real findings unchanged: Dev-Card (scoped-token pwn), Letta (self-hosted), msviderok (compromised action) all stay critical.

Not changed

FG-022 was left alone — it correctly flags actions-cool/issues-helper (a real May-2026 supply-chain compromise) even when SHA-pinned, because that campaign retargeted every ref. Verifying the catalog before "fixing" a correct rule caught this.

Fixtures + tests added for both downgrades; full suite, gofmt, vet, self-scan clean.

🤖 Generated with Claude Code

…016)

Two more mitigation-aware downgrades, from prt-hunt triage false positives:

- FG-001 Pwn Request: when the job executing fork code has empty
  permissions (`permissions: {}` — no GITHUB_TOKEN) AND references no
  secrets, fork code runs but there's nothing to exfiltrate, so it isn't
  a secret-stealing pwn request. Downgrade to info. (Self-hosted host
  risk, if any, is still covered by FG-009.) Jobs with a scoped token
  (e.g. pull-requests: write) are unaffected and stay elevated.

- FG-016 Local Action After Untrusted Checkout: when the job's `if:`
  restricts execution to trusted authors (MEMBER/OWNER/COLLABORATOR) or
  excludes forks, an external fork can't reach the local action.
  Downgrade to info. Also teach hasAuthorAssociationGuard the
  `contains(fromJSON('["MEMBER",...]'), author_association)` allowlist idiom.

Verified on the source repos: ionos-cloud/cluster-api-provider-proxmox
FG-001 (permissions:{} + pre-screen) and redwoodjs/agent-ci FG-016
(author-association gate) drop critical -> info, while real findings
(Dev-Card scoped-token pwn, Letta self-hosted, msviderok compromised
action) stay critical.

FG-022 was left unchanged: it correctly flags a real compromised action
(actions-cool/issues-helper, May 2026 campaign) even when SHA-pinned.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@north-echo
north-echo merged commit 6527057 into main Jul 17, 2026
1 check passed
@north-echo
north-echo deleted the fix/pwn-nocred-authorguard-tuning branch July 17, 2026 14:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant