Repository navigation
Float first-party actions, advance the OSV pin, scope the token - #28
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Five defects in the reusable
security.yml, found by comparing it against the org's own action-pinning and CI rules. Each is cited to the rule it breaks.actions/checkoutSHA-pinned at 3 call sitesactions/*,docker/*,github/*— float on the major tag"shivammathur/setup-phpcomment reads# v2(2 sites)# v2names a mutable tag, which is the thing the pin exists to escape; the comment must name the release"google/osv-scanner-actionpinned to v2.7.0permissions:blockMeasurements
Every pin re-resolved 2026-11-13 by dereferencing the tag object, because every one of these upstreams uses annotated tags and a naive read of
git/ref/tags/<tag>returns a tag object thatuses:cannot resolve:actions/checkout@v7(first-party)shivammathur/setup-phpeb7c497e…— already correct, comment fixedgoogle/osv-scanner-action32d3cd48…GitGuardian/ggshield-action1password/load-secrets-actionWhy
permissionsmatters here specificallyA reusable workflow with no
permissions:block runs under the calling repository's default token scope. On a repository created before GitHub changed that default, it is read/write across the board — so the most privileged token in the estate was being handed to the job whose entire purpose is to look for leaked credentials. Every job here only reads the tree, and the ggshield step authenticates with its own key rather thanGITHUB_TOKEN.Verified
composer-audit,osv-scan,secret-scan) intact,permissions: {contents: read},OP_SERVICE_ACCOUNT_TOKENstill declared optional.Context
Of 88 laranail packages that call a reusable
laranail/.githubworkflow, this one has 1 caller againsttests.yml's 39 — while 23 packages ship their own standalonesecurity.ymlthat runscomposer auditand nothing else. So the estate is not unscanned, it is unshared, and 20 packages get no OSV scan and no secret scan. Fixing the shared workflow first is the prerequisite for that adoption, not a substitute for it.