| name | supply-chain-security |
| description | Secure the software supply chain — SBOM generation, dependency provenance verification, package integrity (Sigstore/npm provenance), lockfile auditing, typosquatting detection, CI artifact signing, and dependency update policy. Use when asked about "SBOM", "software bill of materials", "supply chain attack", "dependency provenance", "Sigstore", "npm provenance", "package integrity", "typosquatting", "dependency confusion", "artifact signing", "SLSA", "slsa framework", "lockfile security", or "third-party package risk". Do NOT use for: secret scanning in code — see secret-management. Do NOT use for: runtime vulnerability scanning — see security-pipeline.
|
| origin | adapted:MIT © VoltAgent/awesome-agent-skills (Trail of Bits supply chain module) |
| license | MIT © 2026 Vũ Văn Tâm |
| version | 1.0.0 |
| compatibility | npm/pnpm/yarn, Python pip. GitHub Actions. Syft for SBOM. |
When to Use
- Use when: preparing a compliance report or audit requiring SBOM
- Use when: a dependency was flagged in a CVE after a recent update
- Use when: setting up a new service and locking down its dependency policy
- Use when: responding to a supply chain incident (e.g., compromised npm package)
- Do NOT use for: SAST / code vulnerability scanning — see security-pipeline
- Do NOT use for: secrets in CI — see secret-management
SBOM Generation
syft dir:. -o spdx-json > sbom.spdx.json
syft dir:. -o cyclonedx-json > sbom.cyclonedx.json
syft myrepo/api:latest -o spdx-json > image-sbom.spdx.json
gh release upload v1.2.3 sbom.spdx.json
- name: Generate SBOM
uses: anchore/sbom-action@v0
with:
artifact-name: sbom.spdx.json
output-file: sbom.spdx.json
- name: Attest SBOM (Sigstore)
uses: actions/attest-sbom@v1
with:
subject-path: dist/
sbom-path: sbom.spdx.json
Dependency Provenance (npm)
npm install --dry-run 2>&1
npm audit signatures
npm view react dist-tags
npm view react@18.3.0 _id dist.integrity dist.signatures
{
"scripts": {
"install:verified": "npm ci --audit-level=high"
}
}
Lockfile Integrity
npm ci
pnpm install --frozen-lockfile
git diff HEAD package-lock.json
Typosquatting Detection
pip install safety
npx package-name-check axios
npm info <package> | grep -E "maintainers|author|homepage"
Dependency Confusion Attack Prevention
Attack: attacker publishes a public package with same name as your
internal private package — CI picks up the public version.
Fix: scope all internal packages (@myorg/utils, not just utils)
Pin private registry in .npmrc:
@myorg:registry=https://npm.myorg.com
//npm.myorg.com/:_authToken=${NPM_PRIVATE_TOKEN}
registry=https://registry.npmjs.org
Artifact Signing (SLSA Level 2+)
- name: Sign artifact
uses: sigstore/cosign-action@v3
with:
sign: ./dist/myapp-linux-amd64
- name: Verify artifact
run: |
cosign verify-blob \
--certificate-identity-regexp "https://github.com/myorg/myrepo/.github/workflows/release.yml" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
--bundle dist/myapp-linux-amd64.bundle \
dist/myapp-linux-amd64
Dependency Update Policy
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule: { interval: weekly }
groups:
dev-deps:
patterns: ["eslint*", "typescript", "vitest"]
ignore:
- dependency-name: "some-frozen-dep"
versions: [">= 3.0.0"]
open-pull-requests-limit: 10
Anti-Fake-Pass Rules
Before claiming supply chain security is in place, you MUST show:
Reference: gates/anti-fake-pass-gate.md