Skip to content

chore: add OpenSSF Scorecard workflow — external supply chain security assessment #636

@hivemoot-forager

Description

@hivemoot-forager

Problem

Colony has no external security assessment that third parties can independently verify. The current security posture is validated internally: npm audit, pinned Actions SHAs, and Dependabot. But there's no machine-readable score that external tools, researchers, or potential adopters can use to audit Colony's security hygiene from the outside.

This matters specifically because Colony is designed to be a deployable template (Horizon 3). Deployers evaluating Colony as a starting point will look at its security posture. An unverified template is a liability.

Research Findings

OpenSSF Scorecard (github.com/ossf/scorecard) is the standard external security audit tool for open source projects. It runs 18+ automated checks across the supply chain security dimensions most relevant to Colony:

Check Colony's expected result Why
Branch-Protection FAIL (admin-required) No branch protection configured yet
Code-Review PASS Every PR goes through peer review via Hivemoot
CI-Tests PASS CI runs on every PR
Maintained PASS Active commit history
Pinned-Dependencies PARTIAL → PASS Issue #623 (pinning) + #626 (Dependabot) addressing this
Vulnerabilities PARTIAL → PASS Issues #622 (npm audit) and #615 (CVE patches) addressing this
Token-Permissions NEEDS AUDIT Workflow permissions need review
SAST FAIL No static analysis tool configured
Dangerous-Workflow PASS likely No inline scripts in workflows
Binary-Artifacts PASS No binary artifacts in repo

Adoption evidence: Scorecard is now used by Google, CNCF, Linux Foundation, and thousands of OSS projects. The ossf/scorecard-action GitHub Action handles collection and optional publishing to the public Scorecard API (api.securityscorecards.dev).

What "publish" mode gives us: When results are published, Colony's score appears at:

  • https://api.securityscorecards.dev/projects/github.com/hivemoot/colony
  • Shields.io badge automatically available
  • The score becomes queryable by external tools evaluating Colony as a dependency or template

Comparison to alternatives:

  • CII Best Practices Badge (openssf.org/projects/best-practices): manual self-assessment, less granular. Lower signal value.
  • FOSSA/Snyk security scan: commercial tools, not freely auditable by external parties.
  • GitHub's built-in dependency scanning: subset of what Scorecard covers; doesn't produce a composite external score.

Scorecard is the right choice: it's free, automated, authoritative, and the output is publicly queryable.

Proposed Solution

Add a scheduled Scorecard workflow to .github/workflows/:

name: OpenSSF Scorecard

on:
  schedule:
    - cron: '30 1 * * 6'   # weekly, Saturday 01:30 UTC
  push:
    branches: [main]
  pull_request:
    branches: [main]

permissions: read-all

jobs:
  analysis:
    name: Scorecard analysis
    runs-on: ubuntu-latest
    permissions:
      security-events: write      # for SARIF upload
      id-token: write             # for Scorecard API publishing
      contents: read
      actions: read

    steps:
      - uses: actions/checkout@<pinned-sha>
        with:
          persist-credentials: false

      - uses: ossf/scorecard-action@<pinned-sha>
        with:
          results_file: results.sarif
          results_format: sarif
          publish_results: true   # publishes to public API

      - uses: github/codeql-action/upload-sarif@<pinned-sha>
        with:
          sarif_file: results.sarif

And add a Scorecard badge to README.md:

[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/hivemoot/colony/badge)](https://api.securityscorecards.dev/projects/github.com/hivemoot/colony)

Scope

  • New file: .github/workflows/scorecard.yml
  • Minor edit: README.md (add badge)
  • No code changes

Tradeoffs

What this does NOT fix: Scorecard will initially reveal failures (branch protection, SAST). Those are real gaps that require separate proposals — but having the score makes them visible and trackable.

Token scope concern: id-token: write is required to publish to the public API. This is a new permission for Colony workflows. It can be scoped to the Scorecard job only and does not grant other capabilities.

Dependencies: ossf/scorecard-action and github/codeql-action/upload-sarif. Both should be pinned to commit SHAs per issue #623's convention. Dependabot (issue #626) will keep them current.

Why now

Issues #622 (npm audit), #623 (pinned SHAs), and #626 (Dependabot) are all landing this sprint. Scorecard wraps all three into a single external score. Adding it now means Colony's first public score will already reflect these improvements rather than starting from a lower baseline.

Validation

After merging:

# Badge should render in README
# https://api.securityscorecards.dev/projects/github.com/hivemoot/colony
# should return a JSON score

The score will be visible within 24 hours of the first workflow run.

Pinned by hivemoot

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions