Software supply chain · DEP · v1.0.0 · draft

Third-party package dependencies

How an organization consumes open source and third-party packages from language ecosystems: where packages come from, how long a new release waits before use, how installs are locked and verified, how new dependencies are vetted, and how vulnerable or malicious packages are found and handled. Tool-neutral: each control describes the expected state, not a product.

Language package ecosystems javascript, python, rust, go, java, dotnet, php, ruby36 controlsCB-DEP-…

Current state of the main branch, drafts included. Not released yet.

01

Controls

36 controls
IDControlSeverityAssessmentProfiles
CB-DEP-AGE-001Wait a minimum age before installing a new package version draftPackage versions can be installed minutes after they are publishedhighpartialbaseline
CB-DEP-AGE-002Wait a minimum age before adopting a new package draftPackages that appeared on the registry days ago can be added as dependenciesmediumpartialhardened
CB-DEP-AGE-003Grant release-age exceptions explicitly and for a limited time draftThe release-age rule is bypassed without trace or without end datelowmanualbaseline
CB-DEP-CI-001Install dependencies in a step without secrets draftDependencies are installed in an environment that holds secretshighpartialbaseline
CB-DEP-CI-002Use read-only registry credentials in pipelines draftPipelines hold registry credentials that can publish packageshighpartialbaseline
CB-DEP-CI-003Limit network access of builds to approved registries draftBuild environments can reach any host on the internetmediumpartialhardened
CB-DEP-CI-004Separate dependency caches by trust level draftUntrusted builds can write to caches used by trusted buildsmediumpartialbaseline
CB-DEP-EXEC-001Block install-time scripts except for an allowlist draftAny dependency can run code when it is installedhighpartialbaseline
CB-DEP-EXEC-002Prefer prebuilt packages over packages built from source at install draftInstalling a dependency runs its build code on the machinemediumpartialhardened
CB-DEP-EXEC-003Do not run on-demand packages without a pinned version draftScripts and pipelines download and run the latest version of a packagemediumpartialbaseline
CB-DEP-INV-001Produce and keep an SBOM for every release draftReleases have no record of the components they containmediumpartialbaseline
CB-DEP-INV-002Know where any package version is used within a set time draftThe organization cannot quickly tell which systems use a given packagemediummanualbaseline
CB-DEP-INV-003Verify provenance and signatures when the ecosystem provides them draftPublished provenance and signatures of packages are ignoredmediumpartialhardened
CB-DEP-IR-001Have a response procedure for compromised dependencies draftThere is no plan for when a malicious dependency has been installedhighmanualbaseline
CB-DEP-LOCK-001Commit a lockfile for every deployable application draftApplications are built without a lockfilehighpartialbaseline
CB-DEP-LOCK-002Install from the lockfile without modifying it in builds draftBuilds may resolve versions different from the lockfilehighpartialbaseline
CB-DEP-LOCK-003Verify package integrity against recorded hashes draftDownloaded packages are not checked against a known hashhighpartialbaseline
CB-DEP-LOCK-004Allow only approved sources in lockfiles draftA lockfile change can introduce packages from an unexpected sourcemediumpartialbaseline
CB-DEP-LOCK-005Pin direct dependencies of applications to exact versions draftApplication manifests use version rangeslowpartialhardened
CB-DEP-SRC-001Resolve all packages through an organization-controlled registry draftPackages are downloaded directly from public registriesmediumpartialbaseline
CB-DEP-SRC-002Bind internal package namespaces to the private registry draftInternal package names can be resolved from a public registryhighpartialbaseline
CB-DEP-SRC-003Reserve internal package names on public registries draftInternal package names are free to register on public registriesmediummanualhardened
CB-DEP-SRC-004Declare dependencies only from a registry draftDependencies are pulled from direct URLs, source repositories or local pathsmediumpartialbaseline
CB-DEP-SRC-005Use authenticated, encrypted transport to registries draftPackages are downloaded without TLS or without certificate verificationhighpartialbaseline
CB-DEP-SRC-006Keep package manager configuration in the repository draftPackage manager behaviour depends on each machine's local settingslowpartialbaseline
CB-DEP-UPD-001Propose dependency updates automatically draftDependencies are only updated by hand, when someone remembersmediumpartialbaseline
CB-DEP-UPD-002Require human review for risky updates draftRisky dependency updates are merged automaticallymediumpartialbaseline
CB-DEP-UPD-003Do not fall more than a set number of major versions behind draftDependencies are several major versions behind their current releaselowpartialbaseline
CB-DEP-VET-001Review every new direct dependency before merge draftNew dependencies can be added without reviewmediumpartialbaseline
CB-DEP-VET-002Evaluate new dependencies against written criteria draftDependencies are chosen without any trust evaluationmediummanualbaseline
CB-DEP-VET-003Remove unused dependencies draftThe project declares dependencies it does not uselowpartialbaseline
CB-DEP-VET-004Ship only production dependencies draftDevelopment and test dependencies are installed in production artifactslowpartialbaseline
CB-DEP-VULN-001Scan dependencies for known vulnerabilities continuously draftKnown vulnerabilities in dependencies are not detectedhighpartialbaseline
CB-DEP-VULN-002Block packages known to be malicious draftPackages flagged as malicious can still be installedcriticalpartialbaseline
CB-DEP-VULN-003Fix vulnerable dependencies within set deadlines draftVulnerable dependencies stay in production indefinitelyhighmanualbaseline
CB-DEP-VULN-004Track unmaintained, deprecated and end-of-life components draftThe product depends on components that no longer receive fixesmediumpartialbaseline
02

Profiles

Baseline baseline
What every team consuming third-party packages should do. Low friction. 30 controls.
Hardened hardened
For critical or exposed software, and teams that publish software others depend on. Adds review and isolation overhead. Extends baseline: applies every one of its controls too. 36 controls.
03

Domains

Sources & registries CB-DEP-SRC-NNN
6 controls.
Release age & quarantine CB-DEP-AGE-NNN
3 controls.
Locking & integrity CB-DEP-LOCK-NNN
5 controls.
Install-time execution CB-DEP-EXEC-NNN
3 controls.
Dependency vetting CB-DEP-VET-NNN
4 controls.
Vulnerabilities & malicious packages CB-DEP-VULN-NNN
4 controls.
Updates CB-DEP-UPD-NNN
3 controls.
Inventory & provenance CB-DEP-INV-NNN
3 controls.
Build environment CB-DEP-CI-NNN
4 controls.
Incident response CB-DEP-IR-NNN
1 controls.
04

Versions

0 released
VersionReleasedControlsFiles
mainunreleased, v1.0.0 in progress36source

A release is the git tag dependencies/v<version>: a zip with the controls, their translations, bundle.json and index.json.

05

Written from