supply-chain — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited supply-chain (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill covers both producer and consumer sides of the software supply chain: what you build, how you prove that you built it, how you sign it, and how you verify what you consume. It complements cve-triage (triage of what is in your SBOM) and is invoked by cicd-hardening for the build-provenance side.
Triggers on:
iso27001, nis2, dora, or soc2 about provenance or SBOM delivery.cve-triage. This skill produces the SBOM; that one weighs it.secrets-scanner.cicd-hardening. Overlap on SLSA provenance is intentionally cross-referenced there.container-hardening. Image signing is here (sigstore/cosign), image content is there.secure-coding phase 6.Six phases. Phases 1 and 2 are producer-side (what you build and declare), phase 3 is the signing layer, phases 4 and 5 are consumer-side (what you bring in), phase 6 is verification.
A Software Bill of Materials is the ingredient list of your artifact. Two common formats, both machine-readable:
Generation tools:
cyclonedx-bom for Node, cyclonedx-python-lib for Python, cyclonedx-maven-plugin for Maven).Generate at build time, not after the fact. A post-hoc SBOM on an already-deployed artifact misses transitive resolution moments and is by definition an approximation.
# syft — container-image SBOM in CycloneDX
syft <image>:<tag> -o cyclonedx-json > sbom.cdx.json
# syft — filesystem (e.g. git clone)
syft dir:. -o spdx-json > sbom.spdx.json
# cdxgen — Node project, CycloneDX
cdxgen -t js -o bom.jsonCommit the SBOM or not? For open-source projects: publish with the release artifact (GitHub release asset, sigstore bundle). For closed-source: in an artifact registry next to the artifact. Not in git history; the lockfile is the source of truth.
SLSA (Supply-chain Levels for Software Artifacts) is a framework that defines four levels of build provenance. Provenance is a signed attestation about how an artifact was built.
Practical route to Level 3:
slsa-framework/slsa-github-generator suite delivers L3 provenance out of the box for Go, Node, Python, Docker images. Build job runs in a reusable workflow isolated by GitHub; attestation is signed by the GitHub attestor identity.Provenance is an in-toto statement with predicate type https://slsa.dev/provenance/v1. Contents: artifact hash, builder identity, source-repo commit, build parameters. Signing is done via sigstore (phase 3).
Sigstore is the de facto open-source signing stack since 2021. Three components:
gitsign), SBOMs, attestations.Keyless signing (recommended default):
# sign image with OIDC-bound cert, entry in rekor
cosign sign --yes <image>@sha256:<digest>
# sign attestation (SBOM)
cosign attest --yes --predicate sbom.cdx.json --type cyclonedx <image>@sha256:<digest>
# verify signer identity (GitHub Actions example)
cosign verify <image> \
--certificate-identity-regexp "https://github.com/<org>/<repo>/.github/workflows/.+" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com"Key-based signing (when you do not want or cannot use traceable identity): cosign generate-key-pair plus a KMS-backed key (AWS KMS, GCP KMS, Vault). Less operationally fun but fits where OIDC integration is missing.
Gitsign for commit signing: short-lived certs instead of GPG keys that linger for years. No key management, verification against rekor.
Dependency confusion: an attacker publishes a package under the same name as your internal private package on a public registry with a higher version number. Your build tool resolves the public one and runs attacker code. Known since Alex Birsan's 2021 Medium publication (primary source).
Defenses:
@org/pkg, Maven groupId. Scoped packages on a public registry are by definition your namespace if you own the scope..npmrc with @org:registry=https://internal. pip index-url on internal PyPI, extra-index-url only as fallback.package-lock.json with SHA-512 integrity, poetry.lock with content hashes, Go go.sum. Stops the same version with different contents from being accepted.Typosquat:
npm-typo-check, socket.dev, Snyk Advisor.npm install --ignore-scripts). Many supply-chain attacks trigger on install.Verify what you bring in before you use it.
k8s-security.policy with allowlist of permitted signers and attestation predicates. Match on builder identity (GitHub Actions workflow path), not on branch name (which is changeable).Layer 1: scope (do all artifacts published by the org have an SBOM and an attestation? are all consumption paths verifying?), assumptions ("we use keyless signing" only if OIDC is actually wired up), gaps (test artifacts and internal tools are often forgotten — are they intentionally excluded or just missed?), consistency (SBOM format consistent across all artifacts?).
Layer 2: SLSA-level claims backed by a concrete build setup, no hand-waving toward "we are at L3", CVEs or incidents you mention (XZ, event-stream, SolarWinds) verified for factual detail, cosign command examples checked for syntax against the current version.
Two modes depending on the trigger.
Setup mode (new or missing supply-chain discipline):
Supply-chain setup — <project/org>
Current state: <SBOM: yes/no | Signing: yes/no | SLSA level: L0–L3>
Delivered:
- SBOM generation: <tool + format + build step>
- Provenance: <SLSA-level target + toolchain>
- Signing: <cosign keyless via OIDC | KMS-backed | gitsign for commits>
- Dep-confusion defense: <scoped packages | registry config | mirror>
- Consumer verification: <policy-controller | cosign verify in CI>
To test:
1. Build artifact → SBOM exists and is populated
2. Build artifact → attestation findable in rekor
3. Verify command returns success on signed, fails on unsigned
Verification-loop: ...Incident/audit mode (audit existing pipeline):
Supply-chain audit — <scope>
Findings:
- SBOM: <present for all artifacts | missing for X>
- Provenance: <effective SLSA level | claim vs. reality>
- Signing: <coverage%, unsigned artifacts listed>
- Dep-confusion: <namespace registration, registry config, mirror>
- Consumer verify: <enforcement points and gaps>
Per gap:
- What is missing
- Concrete remediation
- Priority (blocker for compliance | standard sprint item)
Verification-loop: ...No report that says "we are at SLSA L3" without having seen the actual build setup. Phase 2 demands evidence.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.