wtf( )unctionsystem design, drawn
← all problemsSupply ChainMedium

Three of these findings are real

This is last year's review of a workflow that comments on pull requests from forks. It uses the privileged trigger, and someone turned on the checkout opt-out so there was something to measure.

The review has five findings. Since it was written, the platform changed what happens by default under that trigger — the workflow now runs from the default branch, the checkout of a fork's code is refused unless you ask for it in a conspicuously named way, and the cache handed to an untrusted trigger is read-only. Three of these findings are still exactly right. Two are describing a world that no longer exists.

Tap the findings that the platform's own defaults have already closed.
!A five-item security review, reused every quarter, and nobody has re-checked which items still apply.

Boundaries, outermost first: The review checklist: Release is editable (by anything with write), Opt-out is enabled (so the tests run), Runner is reused (state survives the job), Cache is poisoned (restored by a later job), Their code runs (with the write token) Outside every boundary: Secrets (and write access), The build job (on a self-hosted runner; FAILED: holds the write token), Privileged trigger (runs from default branch), A fork's PR (anyone can open one) Connections: A fork's PR calls Privileged trigger — from a stranger (step 1) Privileged trigger calls The build job (step 2) Secrets controls The build job — in scope here

Tap every component that is wrong.