Hoppa till huvudinnehållet

Låsning av arbetsflöden

En tagg som @v4 är en pekare som actionens underhållare, eller en angripare som tar över deras konto, kan flytta. En commit-SHA på 40 tecken kan inte flyttas.

Vad som kontrolleras

En daglig skanning läser varje *.yml- och *.yaml-fil i .forgejo/workflows/, .gitea/workflows/ och .github/workflows/ i din organisations repon. Forgejo kör även .github/workflows/, så alla tre kontrolleras. Den listar:

  • varje uses:-referens till en action som pekar på en tagg eller en branch i stället för en commit-SHA på 40 tecken;
  • varje steg-image uses: docker://<image> som refereras med en tagg, eller helt utan tagg, vilket betyder latest, i stället för en digest. En image-tagg kan pushas igen med annat innehåll. En låst referens ser ut som docker://<image>@sha256:<64 hex characters>; en tagg före digesten är tillåten.

Listan finns under Säkerhet › Åtgärda › Låsning av arbetsflöden (/<org>/_admin/security/fix/workflow-pinning), grupperad per repo. Image-referenser visas med typen docker.

Kontrolleras inte: arbetsflödesfiler i underkataloger eller någon annanstans, och en image som anges med ett uttryck som docker://${{ env.IMAGE }}.

Lås dem med en pull request

För ett repo i listan öppnar ett klick en pull request som ersätter varje listad action-referens med commit-SHA:n från motsvarande repo under frem.sh/mirrors/ och behåller den ursprungliga taggen som en kommentar. Den öppnas på en ny branch, bot/sha-pin-actions-<time>. En referens som inte kan slås upp lämnas som den är.

Pull requesten låser inte docker://-images: det finns ingen spegel att hämta digesten från. Lås dem för hand, till exempel med den digest som docker buildx imagetools inspect <image>:<tag> skriver ut.

Samma sak finns som POST /_app/api/v1/orgs/{org}/security/sha-pin-rewrite med {"repo_full_name": "<org>/<repo>"} (scope findings:write).

Låsta referenser hålls ändå aktuella: Beroendeuppdateringar föreslår nya versioner och skriver om SHA:n och dess kommentar tillsammans.