Skip to content
Software development
ASD ISMISM-2154

ASD ISM 2154 Pinning software artefact dependencies to approved versions in source code

What it says

Software artefact dependencies are pinned to approved versions in source code.

Quoted as published. Everything else on this page is written by Control Stack.

What it means

In plain English

Every third-party library or component a build pulls in is locked to an exact version your organisation has approved, and that lock is recorded in the source code itself.

When developers build software, they rarely write everything themselves. They pull in libraries, packages, container base images and other "software artefacts" from public or internal repositories. If the source code simply says "use the latest version of library X", the build will fetch whatever happens to be current on the day, which may be a version nobody has reviewed, or a version that has been tampered with or replaced by an attacker. This control requires two things. First, each dependency must be pinned, meaning the source code names a specific version rather than a range or "latest". Second, the pinned version must be one your organisation has approved, so the choice reflects a deliberate decision rather than whatever the package manager resolved. It matters because dependency confusion, malicious package updates and quietly introduced breaking changes are all real-world supply chain attacks. Pinning to approved versions in source code makes builds repeatable, makes every dependency change visible in version control, and stops an unreviewed upstream release from silently becoming part of your product.

Why it matters

If dependencies are not pinned to approved versions in source code, a build can pull in an unreviewed, vulnerable or maliciously modified version of a library without anyone noticing. A single compromised upstream package can then be shipped into production under your organisation's name. Builds also become non-repeatable, so a bug or breach cannot be reliably traced back to the exact components that were running, and the organisation cannot demonstrate to assessors which software artefacts its systems actually contain.

How to implement

  1. Development leads compile an approved-versions list for each software artefact the organisation depends on, record it in a location developers can reference (such as a shared repository or internal registry), and assign an owner to keep it current.

  2. Developers replace every version range, wildcard or floating tag (such as "latest") in package manifests, lock files, build scripts and container image references with the exact approved version, and commit that change to source control.

  3. DevOps engineers add a pipeline step that parses dependency manifests and fails the build when any dependency is unpinned or resolves to a version not on the approved list.

  4. Code reviewers check dependency changes in every pull request, confirming that any new or updated pin matches an approved version before the change is merged.

  5. Developers who need a newer version of a dependency raise it through the organisation's approval process first, then update the pin in source code only after the version is added to the approved list.

Keep it running

Day to day, this control lives in the repositories. Developers specify exact versions in manifests (for example package manifests, lock files, build scripts and container image references) rather than version ranges or floating tags, and they only choose versions that appear on the organisation's approved list.

Someone needs to own the approved-version list and keep it current as new releases are vetted. When a developer wants to move to a newer version, the change is made in source code, goes through normal code review and is merged like any other change, so the history of every dependency bump is visible in version control.

Automated checks in the build pipeline are the practical way to keep this honest: a build should fail if a manifest contains an unpinned dependency or a version that is not on the approved list. Periodic reviews of repositories catch drift, such as a developer temporarily loosening a pin to get something working and forgetting to restore it.

Evidence and audit

  1. Check 1 of 5What an auditor asks for

    Ask for

    Ask for the organisation's list of approved software artefact versions.

    Look at

    Look at whether the list names specific versions for each dependency, who owns it and when it was last updated.

    Good evidence

    A maintained list exists that names exact approved versions and shows evidence of regular updates by a named owner.

  2. Check 2 of 5What an auditor asks for

    Ask for

    Ask for the dependency manifests, lock files and build scripts from a sample of source code repositories.

    Look at

    Look at how each dependency is specified, checking for exact version numbers rather than ranges, wildcards or floating tags such as "latest".

    Good evidence

    Every dependency in the sampled files is pinned to an exact version and each pinned version appears on the approved list.

  3. Check 3 of 5What an auditor asks for

    Ask for

    Ask for the configuration of the build pipeline checks that enforce pinning and approved versions.

    Look at

    Look at what the check inspects and what happens when it finds an unpinned or unapproved dependency.

    Good evidence

    The pipeline automatically fails a build that contains an unpinned dependency or a version not on the approved list, and recent run history shows the check operating.

  4. Check 4 of 5What an auditor asks for

    Ask for

    Ask for version control history showing recent dependency version changes.

    Look at

    Look at whether each change to a pinned version was made in source code, reviewed, and tied to an approval of the new version.

    Good evidence

    Dependency bumps are visible as reviewed commits or pull requests, and each new version was approved before the pin was changed.

  5. Check 5 of 5What an auditor asks for

    Ask for

    Ask for the results of the most recent review of repositories for dependency pinning drift.

    Look at

    Look at whether any unpinned or unapproved dependencies were found and how they were resolved.

    Good evidence

    Reviews are performed periodically, findings are recorded, and any loosened or unapproved pins were corrected in source code.

Mappings

Closest match in ISO/IEC 27001: A.5.21, Managing information security in the ICT supply chain, which this control partially meets.

ISO 27001

ISO/IEC 27001: 3 mappings

  • A.8.25Secure development lifecyclePartially meets

Mappings show how controls relate across frameworks. They do not imply full equivalence or certification.