Lock Your GitHub Actions

(hugovk.dev)

23 points | by gslin 32 minutes ago

4 comments

  • woodruffw 3 minutes ago
    The advice here is really great (as I'd expect from Hugo), but as the maintainer of zizmor I want to note some caveats with the current iteration of workflow lockfiles:

    - They only lock normal action calls. If your workflows invoke other reusable workflows, you need to keep those hash-pinned manually for now.

    - Composite actions are not themselves locked. Instead, they get locked transitively through their callsites i.e. the workflows that call them. This makes any individual caller that uses lockfiles safe, but it also makes the current `gh actions-lock` default unsafe (since it removes hash-pins from the composite action itself, meaning that any external caller that invokes the action loses their transitive pinning).

    - Other forms of `uses:` clauses, like Docker images, are also not currently locked via the lockfile. And the same for forms of interior mutability (like an action running `npx ...` under the hood, although the latter is fully outside of GitHub's control to prevent. But these mean that you can't assume that a fully locked Actions setup is in fact 100% immutable.

    I hope they address these gaps soon, because it's otherwise an excellent (and long-awaited) feature.

  • Already__Taken 25 minutes ago
    Quoting someone else's blog I've forgotten but you're trading the trust in the repo owner not moving a tag for trusting whoever merges the commit hash to have checked that's a release in the repo you want and not _some_ forks commit. All forks on github are the same repo you can pin any commit, merged upstream or not.

    IMO Github should make Immutable tags mandatory to publish on https://github.com/marketplace

    • woodruffw 2 minutes ago
      Actions lockfiles prevent this. They won't allow you to lock an impostor commit, which is the right default.

      (The previous way to provide general actions immutability, i.e. hash-pinning, had this issue and thus required additional checks.)

  • SchemaLoad 19 minutes ago
    Are people finding a real need for importing and updating git actions? Aren't they usually just running a one line bash command? I'd just copy paste the action in to your config so it's fully locked and under your control rather than importing some opaque script from a no name github user.
  • ezekg 18 minutes ago
    Does this prevent one of the locked dependencies not locking their own dependencies and pulling in a malicious and replaced tag?
    • eddythompson80 9 minutes ago
      It does not. Obviously if you lock a “foo/setup-latest-go” action, it’s still going to (and you’d probably expect it to) pull in the latest go. Actions are expected to start running though. Like GitHub isn’t gonna do an `npm install` for you, it’ll just run the entry point of the action, and the entry point can do whatever it was written to do.