step-security / secure-repo

Orchestrate GitHub Actions Security
https://app.stepsecurity.io
GNU Affero General Public License v3.0
256 stars 41 forks source link
actions github github-actions golang security security-tools supply-chain-security workflow

[![Maintained by stepsecurity.io](https://img.shields.io/badge/maintained%20by-stepsecurity.io-blueviolet)](https://stepsecurity.io/?utm_source=github&utm_medium=organic_oss&utm_campaign=secure-repo) [![Go Report Card](https://goreportcard.com/badge/github.com/step-security/secure-repo)](https://goreportcard.com/report/github.com/step-security/secure-repo) [![codecov](https://codecov.io/gh/step-security/secure-repo/branch/main/graph/badge.svg?token=02ONA6U92A)](https://codecov.io/gh/step-security/secure-repo) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/step-security/secure-repo/badge)](https://api.securityscorecards.dev/projects/github.com/step-security/secure-repo)

Automatically apply security best practices in your GitHub repository

Secure repo screenshot

Catalog of Fixes Quickstart Contributing

Catalog of Fixes

  1. Automatically set minimum GITHUB_TOKEN permissions
  2. Add Harden-Runner GitHub Action to each job
  3. Pin Actions to a full length commit SHA
  4. Pin image tags to digests in Dockerfiles
  5. Add or update Dependabot configuration
  6. Add CodeQL workflow (SAST)
  7. Add Dependency review workflow
  8. Add OpenSSF Scorecard workflow

1. Automatically set minimum GITHUB_TOKEN permissions

Why is this needed?

Before and After the fix

Pull request example: https://github.com/nginxinc/kubernetes-ingress/pull/3134

In this pull request, minimum permissions are set automatically for the GITHUB_TOKEN

Screenshot of token permissions set in a workflow

How does Secure-Repo fix this issue?

2. Add Harden-Runner GitHub Action to each job

Why is this needed?

Harden-Runner GitHub Action installs a security agent on the Github-hosted runner to prevent exfiltration of credentials, monitor the build process, and detect compromised dependencies.

Before and After the fix

Pull request example: https://github.com/python-attrs/attrs/pull/1034

This pull request adds the Harden Runner GitHub Action to the workflow file.

Screenshot of Harden-Runner GitHub Action added to a workflow

How does Secure-Repo fix this issue?

Secure-Repo updates the YAML file and adds Harden-Runner GitHub Action as the first step to each job.

3. Pin Actions to a full length commit SHA

Why is this needed?

Before and After the fix

Before the fix, your workflow may look like this (use of v1 and latest tags)

After the fix, Secure-Repo pins each Action and docker image to an immutable checksum.

Pull request example: https://github.com/electron/electron/pull/36343

In this pull request, the workflow file has the GitHub Actions tags pinned automatically to their full-length commit SHA.

Screenshot of Action pinned to commit SHA

How does Secure-Repo fix this issue?

4. Pin image tags to digests in Dockerfiles

Why is this needed?

Before and After the fix

Before the fix, your Dockerfile uses image:tag, e.g. rust:latest

After the fix, Secure-Repo pins each docker image to an immutable checksum, e.g. rust:latest@sha256:02a53e734724bef4a58d856c694f826aa9e7ea84353516b76d9a6d241e9da60e.

Pull request example: https://github.com/fleetdm/fleet/pull/10205

In this pull request, the Docker file has tags pinned automatically to their checksum.

Screenshot of docker image pinned to checksum

How does Secure-Repo fix this issue?

5. Add or update Dependabot configuration

Why is this needed?

Before and After the fix

Before the fix, you might not have a dependabot.yml file or it might not cover all ecosystems used in your project.

After the fix, the dependabot.yml file is added or updated with configuration for all package ecosystems used in your project.

Pull request example: https://github.com/muir/libschema/pull/31

This pull request updates the Dependabot configuration.

Screenshot of Dependabot config updated

How does Secure-Repo fix this issue?

Secure-Repo updates the dependabot.yml file to add missing ecosystems. For example, if the Dependabot configuration updates npm packages but not GitHub Actions, it is updated to add the GitHub Actions ecosystem.

6. Add CodeQL workflow (SAST)

Why is this needed?

Before and After the fix

Before the fix, you do not have a CodeQL workflow.

After the fix, a codeql.yml GitHub Actions workflow gets added to your project.

Pull request example: https://github.com/rubygems/rubygems.org/pull/3314

This pull request adds CodeQL to the list of workflows.

How does Secure-Repo fix this issue?

Secure-Repo has a workflow-templates folder. This folder has the default CodeQL workflow, which gets added as part of the pull request. The placeholder for languages in the template gets replaced with languages for your GitHub repository.

7. Add Dependency review workflow

Why is this needed?

Before and After the fix

Before the fix, you do not have a dependency review workflow.

After the fix, a depdendency-review.yml GitHub Actions workflow gets added to your project.

Pull request example: https://github.com/input-output-hk/catalyst-core/pull/286

This pull request adds GitHub's actions/dependency-review-action workflow to the list of workflows.

How does Secure-Repo fix this issue?

Secure-Repo has a workflow-templates folder. This folder has the default dependency review workflow, which gets added as part of the pull request.

8. Add OpenSSF Scorecard workflow

Why is this needed?

Before and After the fix

Before the fix, you do not have a OpenSSF Scorecard workflow.

After the fix, a scorecards.yml GitHub Actions workflow gets added to your project.

Pull request example: https://github.com/microsoft/CLRInstrumentationEngine/pull/527

This pull request adds OpenSSF Scorecard to the list of workflows.

How does Secure-Repo fix this issue?

Secure-Repo has a workflow-templates folder. This folder has the default Scorecard workflow, which gets added as part of the pull request.

Quickstart

Hosted Instance: app.stepsecurity.io/securerepo

To secure your GitHub repo using a pull request:

Integration with OpenSSF Scorecard

Secure repo Scorecard integration screenshot

Self Hosted

To create an instance of Secure Workflows, deploy cloudformation/ecr.yml and cloudformation/resources.yml CloudFormation templates in your AWS account. You can take a look at .github/workflows/release.yml for reference.

Contributing

Contributions are welcome!

If you are the owner of a GitHub Action, please contribute information about the use of GITHUB_TOKEN for your Action. This will enable the community to automatically calculate minimum token permissions for the GITHUB_TOKEN for their workflows. Check out the Contributing Guide