Workflow-Pinning
Ein Tag wie @v4 ist ein Zeiger, den der Maintainer der Action verschieben kann, ebenso ein Angreifer, der dessen Konto übernimmt. Ein 40-stelliger Commit-SHA lässt sich nicht verschieben.
Was geprüft wird
Ein täglicher Scan liest jede *.yml- und *.yaml-Datei in .forgejo/workflows/, .gitea/workflows/ und .github/workflows/ in den Repositorys deiner Organisation. Forgejo führt auch .github/workflows/ aus, deshalb werden alle drei geprüft. Er listet:
- jede
uses:-Referenz auf eine Action, die auf einen Tag oder Branch statt auf einen 40-stelligen Commit-SHA zeigt; - jedes
uses: docker://<image>-Step-Image, das über einen Tag oder ganz ohne Tag (alsolatest) statt über einen Digest referenziert wird. Ein Image-Tag kann mit anderem Inhalt erneut gepusht werden. Gepinnt sieht so aus:docker://<image>@sha256:<64 hex characters>; ein Tag vor dem Digest ist erlaubt.
Die Liste steht unter Sicherheit › Beheben › Workflow-Pinning (/<org>/_admin/security/fix/workflow-pinning), gruppiert nach Repository. Image-Referenzen zeigen die Art docker.
Nicht geprüft werden: Workflow-Dateien in Unterverzeichnissen oder an anderen Stellen sowie ein Image, das über einen Ausdruck wie docker://${{ env.IMAGE }} benannt ist.
Mit einem Pull Request pinnen
Für ein Repository auf der Liste öffnet ein Klick einen Pull Request, der jede gelistete Action-Referenz durch den Commit-SHA aus dem passenden Repository unter frem.sh/mirrors/ ersetzt und den ursprünglichen Tag als Kommentar behält. Er wird auf einem neuen Branch bot/sha-pin-actions-<time> geöffnet. Eine Referenz, die sich nicht auflösen lässt, bleibt unverändert.
Der Pull Request pinnt keine docker://-Images: Es gibt keinen Mirror, aus dem der Digest stammen könnte. Pinne diese von Hand, zum Beispiel mit dem Digest, den docker buildx imagetools inspect <image>:<tag> ausgibt.
Dasselbe steht als POST /_app/api/v1/orgs/{org}/security/sha-pin-rewrite mit {"repo_full_name": "<org>/<repo>"} zur Verfügung (Scope findings:write).
Gepinnte Referenzen werden trotzdem aktuell gehalten: Abhängigkeits-Updates schlägt neue Versionen vor und schreibt den SHA und seinen Kommentar zusammen um.