Markdown Editor

Software Supply Chain Security Assessment Template (SLSA)

Supply chain assessment: SLSA 1.2 Build/Source levels, SBOM (SPDX, CycloneDX), provenance, Sigstore, Scorecard, VEX, CI/CD

软件与工程完整SLSA 1.2supplychainsecurity

使用方法: Use for a yearly or customer-driven assessment of how software is sourced, built and published. Start with the artefact inventory and source-to-consumer diagram, then record current and target SLSA levels per artefact with evidence. The main pitfall is signing artefacts without anyone verifying the signatures.

预览

Software Supply Chain Security Assessment: [Product or organisation]

Assessment of how securely software is sourced, built, packaged and delivered, structured around SLSA specification version 1.2 (Build and Source tracks, slsa.dev), SBOMs in SPDX 3.0 and CycloneDX 1.7, Sigstore signing and provenance concepts, the OpenSSF Scorecard checks and VEX for vulnerability status. It records scope, current and target SLSA levels, SBOM policy, dependency management, provenance and signing, Scorecard results, vulnerability management, third-party intake, CI/CD hardening, findings and a roadmap. Replace every [bracketed] value and every row marked Example.

Document control

FieldValue
Document ID[SCS-PAYAPI-001]
Product / scope[Payments API service and its client SDKs]
Build platform assessed[GitHub Actions, hosted runners; container registry GHCR]
Assessment periodYYYY-MM-DD to YYYY-MM-DD
Version[0.1]
Status[Draft / In review / Approved]
Assessor[@security-engineer]
Engineering owner[@platform-lead]
SLSA version1.2
Classification[Internal / Confidential]
Next assessmentYYYY-MM-DD

Approvals

RoleNameDecisionDate
Assessor[@name][Approved]YYYY-MM-DD
Platform engineering lead[@name][Accepted findings and roadmap]YYYY-MM-DD
Head of security[@name][Accepted residual risk]YYYY-MM-DD

Revision history

VersionDateAuthorChange
0.1YYYY-MM-DD[@name]Scope, inventory and build diagram
0.2YYYY-MM-DD[@name]Example: SLSA gap analysis and Scorecard results
1.0YYYY-MM-DD[@name]Example: Approved; roadmap to Build L3 agreed

Contents

1. Introduction and scope

This section states the drivers, scope and method of the assessment.

1.1 Drivers

  • Example: Enterprise customers request SBOMs and signed artefacts in contracts from YYYY-MM-DD.
  • Example: Regulatory expectations for products with digital elements (for example the EU Cyber Resilience Act) on vulnerability handling and SBOMs.
  • [Driver]

1.2 Scope

In scopeOut of scope
Example: 6 repositories: payments-api, payments-worker, sdk-js, sdk-python, infra, shared-actionsExample: Internal tools without production deployment
Example: GitHub Actions workflows, GHCR, npm and PyPI publishingExample: Developer laptops (covered by endpoint policy)
[Item][Item]

1.3 Method

The assessment combined [workflow file review, repository settings export, OpenSSF Scorecard runs, interviews with the platform team and verification of a sample of published artefacts]. Each SLSA requirement was assessed as Met, Partial or Not met with evidence.

2. Supply chain overview

The inventory lists every artefact produced; the diagram shows the path from developer to consumer.

2.1 Artefact inventory

IDArtefactTypeBuilt byPublished toConsumers
ART-01payments-api imageOCI containerGitHub Actions, hosted runnerGHCRProduction Kubernetes
ART-02@example/payments-sdknpm packageGitHub ActionsnpmCustomers
ART-03example-paymentsPython wheelGitHub ActionsPyPICustomers
ART-04Helm chartOCI artefactGitHub ActionsGHCRProduction
[ART-nn][Artefact][Type][Builder][Registry][Consumers]

2.2 Source-to-consumer flow

The flow below marks where each control family applies.

2.3 Threats considered

IDThreatPoint in flowExample incident pattern
ST-01Unreviewed or malicious source changeDeveloper to repositoryCompromised maintainer account pushes to main
ST-02Build tamperingBuild platformMalicious step modifies output after tests
ST-03Compromised dependencyDependenciesTyposquatted package or hijacked maintainer release
ST-04Artefact substitutionRegistry to consumerAttacker uploads lookalike image with same tag
ST-05Secret exfiltration from CIBuild platformWorkflow on pull request from fork reads publishing token
[ST-nn][Threat][Point][Pattern]

3. SLSA assessment

SLSA 1.2 defines two tracks. Levels are cumulative within a track.

3.1 Level summary

TrackLevelName on slsa.devWhat it means in practice
BuildL0No guaranteesNo SLSA requirements met
BuildL1Provenance existsConsistent build process; provenance describing how the artefact was built is generated and distributed
BuildL2Hosted build platformBuild runs on a hosted platform that generates and signs provenance; consumers can check it is authentic
BuildL3Hardened buildsPlatform isolates build runs from each other and keeps signing secrets out of reach of user-defined build steps
SourceL1Version controlledSource kept in a modern version control system
SourceL2History and provenanceBranch history is continuous, immutable and retained; the platform issues provenance for each new revision
SourceL3Continuous technical controlsPlatform enforces the organisation's technical controls on named protected references
SourceL4Two-party reviewTwo trusted people review every change to protected branches

3.2 Current and target levels

ArtefactBuild currentBuild targetSource currentSource targetEvidence
ART-01Example: L2L3L3L4Provenance generated by platform attestation action; branch rulesets on main
ART-02L1L3L2L4Provenance generated by a script inside the build job (not platform-signed)
ART-03L0L2L2L3No provenance published
[ART-nn][Ln][Ln][Ln][Ln][Link]

3.3 Gap analysis

Requirement areaStatusGapFinding
Provenance generated by the build platform, not by user stepsPartialART-02 and ART-03 create provenance in user scriptsSC-002
Provenance signed and verifiable by consumersPartialConsumers have no documented verification commandSC-003
Build runs isolated from each otherMetHosted ephemeral runners
Signing material inaccessible to build stepsNot metPublishing token stored as repository secret readable by all jobsSC-005
Protected branches with enforced controlsMetRulesets on main
Two-party review of every changePartialAdministrators can bypass reviewSC-001
[Area][Status][Gap][SC-nnn]

4. SBOM policy

Software bills of materials are produced for every released artefact according to the policy below.

Policy itemDecision
FormatsExample: CycloneDX 1.7 JSON as primary; SPDX 3.0 JSON on customer request
Generation pointIn the release build, from the lockfile and the final image layers
Minimum contentComponent name, version, supplier, package URL (purl), hashes, licence, dependency relationships
DepthAll transitive dependencies; base image packages for containers
Binding to artefactSBOM attached to the image as a signed attestation referencing the image digest
DistributionPublished with each release; available to customers on request through the trust portal
RetentionFor the support life of the version plus [2 years]
Quality checkAutomated: every component has a version and purl; fail build if fewer than [95%] do
FormatMaintained byTypical strengths
SPDX 3.0Linux Foundation SPDX project (also ISO/IEC 5962 for version 2.2.1)Licence compliance detail; profiles for security, build and AI
CycloneDX 1.7OWASP CycloneDX, standardised by Ecma as ECMA-424Security use cases; built-in VEX, services and attestations

5. Dependency management

This section records how third-party code enters and stays in the product.

PracticeCurrent stateTargetFinding
Lockfiles committed for every package managerExample: Yes (npm, pip-tools)Yes
Install from lockfile only in CI (npm ci, pip install --require-hashes)Partial: Python installs without hashesHash-checked installsSC-006
Container base images pinned by digestNo: tags such as node:22Digest pins updated by botSC-007
CI actions pinned by commit SHAPartial: third-party actions pinned by tagAll by SHASC-004
Automated update botYes, weekly, grouped minor updatesSame, plus security updates daily
Private registry or proxyNoProxy with allow-list for new packagesSC-008
Unused dependency removalAd hocQuarterly report
[Practice][State][Target][SC-nnn]

6. Provenance and signing

Artefacts are signed and carry provenance so that consumers can check who built them, from which source, on which platform.

6.1 Signing approach

ItemDecision
Signing modelExample: Keyless signing with Sigstore: short-lived certificate bound to the CI workload identity (OIDC), issued by a certificate authority (Fulcio)
TransparencySignatures recorded in a public transparency log (Rekor)
Tooling[Cosign for containers; npm provenance; PyPI trusted publishing with attestations]
Provenance formatSLSA provenance predicate in an in-toto attestation
Identity expected by verifiershttps://github.com/[org]/[repo]/.github/workflows/release.yml@refs/tags/v*

6.2 Verification points

WhereWhat is verifiedEnforcementStatus
Kubernetes admissionImage signature and provenance from the expected workflow identityPolicy controller blocks unsigned imagesExample: Audit mode only
Customer documentationCommand to verify image and package signaturesPublished guideMissing (SC-003)
Internal consumers of SDKsnpm provenance checknpm audit signatures in CI[Status]

7. OpenSSF Scorecard results

Scorecard results for [repository] on YYYY-MM-DD (aggregate score [6.8]/10).

CheckScoreNotesFinding
Binary-Artifacts10No binaries in repository
Branch-Protection8Admins can bypassSC-001
CI-Tests10Tests run on all PRs
CII-Best-Practices0No OpenSSF Best Practices badge[Accept]
Code-Review92 unreviewed commits in sampleSC-001
Contributors[n/a]Internal project
Dangerous-Workflow10No untrusted checkout in privileged triggers
Dependency-Update-Tool10Update bot configured
Fuzzing0No fuzzing of parsersSC-009
License10Licence file present
Maintained10Active
Packaging10Publishing workflow detected
Pinned-Dependencies4Actions and base images not pinnedSC-004, SC-007
SAST7CodeQL on default branch only
SBOM0SBOM not published with releasesSC-010
Security-Policy10SECURITY.md present
Signed-Releases3Some releases unsignedSC-002
Token-Permissions5Default workflow token has write accessSC-005
Vulnerabilities82 open advisories in dependencies
Webhooks[n/a]Not evaluated

8. Vulnerability management and VEX

This section covers detection, triage, remediation targets and vulnerability exploitability exchange (VEX) statements.

8.1 Process

StepPractice
DetectionExample: SBOM-based scanning daily against OSV and the GitHub Advisory Database
TriageWithin 2 business days: reachable? exploitable in our configuration?
PrioritisationSeverity adjusted by exploit availability (for example CISA KEV listing) and exposure
Remediation targetsCritical 7 days, High 30 days, Medium 90 days
CommunicationVEX document published with each release and on change of status

8.2 VEX statements

Each statement uses one of the standard statuses: not affected, affected, fixed or under investigation. "Not affected" requires a justification.

VulnerabilityComponentProduct versionStatusJustification or actionPublished
Example: CVE-YYYY-NNNNNxml-parser 2.3.1payments-api 4.2.0Not affectedVulnerable code not present in the build (feature compiled out)YYYY-MM-DD
CVE-YYYY-NNNNNhttp-client 1.8.0payments-api 4.2.0FixedUpgraded to 1.8.2 in 4.2.1YYYY-MM-DD
[ID][Component][Version][Status][Justification]YYYY-MM-DD
VEX formatNotes
CycloneDX VEXEmbedded in or alongside the CycloneDX BOM
CSAF VEX profileOASIS Common Security Advisory Framework
OpenVEXMinimal JSON format from the OpenSSF community

9. Third-party and open source intake

New third-party components pass the intake checks below before first use.

CheckCriterionWho
NeedNo existing approved component covers the useRequesting engineer
HealthExample: Scorecard at least 5; release in the last 12 months; more than one maintainerReviewer
LicenceCompatible with product licence policyLicence tool, legal on exceptions
Security historyNo unpatched critical advisories; responsive to past reportsReviewer
Name checkNot a lookalike of a popular package; publisher verifiedAutomated check
Install scriptsNo install-time scripts, or reviewed if presentReviewer
Approval recordTicket with decision and review date[@security-champion]

10. CI/CD hardening

ControlCurrentTargetFinding
Default workflow token permissions read-only; elevate per jobExample: Write by defaultRead-only defaultSC-005
Publishing via OIDC trusted publishing, no long-lived tokensLong-lived npm tokenOIDCSC-005
Workflows triggered by forks have no secrets and no write tokenMetMet
Protected environments with required reviewers for releasePartialRequired for production and package publishingSC-011
Self-hosted runners ephemeral and isolatedn/a (hosted only)n/a
Changes to workflow files need code owner reviewNot metCODEOWNERS on .github/SC-001
Audit log of CI configuration changes retained90 days1 year
[Control][Current][Target][SC-nnn]

11. Findings

IDTitleAreaSeverityEvidenceRecommendationOwnerStatus
SC-001Administrators can bypass review on mainSourceHighRuleset bypass list includes org adminsRemove bypass; break-glass procedure with alert[@name][Open]
SC-002Provenance not platform-generated for SDKsBuildMediumProvenance created by script in build jobUse platform attestation / trusted publishing[@name][Open]
SC-003No consumer verification guideProvenanceMediumDocs lack verification stepsPublish verification commands[@name][Open]
SC-004Third-party actions pinned by tagDependenciesHigh14 of 22 actions pinned by mutable tagPin by commit SHA; update bot[@name][Open]
SC-005Long-lived publishing token readable by all jobsCI/CDCriticalnpm token in repository secretsOIDC trusted publishing; scoped environment[@name][In progress]
SC-010No SBOM publishedSBOMMediumReleases lack SBOMGenerate CycloneDX in release job[@name][Open]
[SC-nnn][Title][Area][Severity][Evidence][Recommendation][@name][Status]

12. Roadmap

The roadmap moves all in-scope artefacts to Build L3 and Source L3 within [two quarters].

MilestoneOutcomeTarget dateOwner
M1No long-lived publishing secrets; all actions pinnedYYYY-MM-DD[@name]
M2All artefacts at Build L3 with consumer verification guideYYYY-MM-DD[@name]
M3SBOM and VEX published with every releaseYYYY-MM-DD[@name]
[Mn][Outcome]YYYY-MM-DD[@name]

13. Appendices

The appendices hold the glossary and references.

13.1 Glossary

TermMeaning
SLSASupply-chain Levels for Software Artifacts, an OpenSSF specification
ProvenanceVerifiable record of how, where and from what an artefact was built
SBOMSoftware bill of materials: list of components in an artefact
VEXVulnerability exploitability exchange: statement of whether a product is affected by a vulnerability
purlPackage URL, a standard identifier for packages
AttestationSigned statement about an artefact, such as provenance or an SBOM

13.2 References

ReferenceUse
SLSA specification v1.2, slsa.devTracks and levels in section 3
SPDX specification 3.0, spdx.devSBOM format
CycloneDX specification 1.7, cyclonedx.orgSBOM and VEX format
Sigstore project documentation, sigstore.devSigning model in section 6
OpenSSF Scorecard, github.com/ossf/scorecardChecks in section 7
[Internal secure development policy]Remediation targets

Standard and licence note

Based on the SLSA specification version 1.2 (slsa.dev, published by the OpenSSF under the Community Specification License 1.0) for the Build track levels L0 to L3 and Source track levels L1 to L4, together with the SPDX 3.0 and CycloneDX 1.7 SBOM specifications, Sigstore signing concepts, the OpenSSF Scorecard check names (Apache License 2.0) and common practice for VEX. Level names are given as published; all descriptions and requirements summaries are original paraphrases and no specification text is reproduced. Consult each specification for its normative requirements. Template licence: MIT.

相关模板