This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Phase 1: Code and Prebuild

Security Compliance for Code and Prebuild

Phase 1 - Code and Prebuild

Integrating security into every stage of the Software Development Life Cycle (SDLC) is more critical than ever. The code and prebuild stage is foundational to creating secure, reliable, and high-performing applications. Failing to address vulnerabilities early can lead to costly fixes, data breaches, and reputational damage down the line.

This section provides a comprehensive guide to the essential security tools that developers and DevOps teams should use during the code and prebuild phase to ensure vulnerabilities are identified and mitigated before they can cause harm. From Static Application Security Testing (SAST) to dependency scanning and secure CI/CD pipelines, the right tools can help you adopt a proactive approach to software security while maintaining development velocity. Following are guidelines from industry frameworks with suggested open source tooling needed to achieve the compliance goals. For example:

– Ensure source code integrity and provenance

– Prevent unauthorized access to repositories and pipelines

– Detect insecure code patterns early - shift left

– Identify vulnerable open-source dependencies

– Generate SBOMs as early as possible

– Establish traceability from commit → artifact → deployment

Key Phase 1 Security Activities

Compliance for Code and Prebuild steps include:

ACTIVITY PURPOSE
Repository Access Control Prevent unauthorized code change
Commit Signing Establish software provenance
Branch Protection Enforce peer review and policy
SAST Detect insecure code patterns
Dependency Scanning Identify vulnerable libraries
SBOM Generation Create early component visibility

Following are guidelines from industry frameworks with suggested open source tooling needed to achieve the compliance goals.

1 - 1.0 Secure Software Development Framework Phase 1 Tasks

Phase 1 Secure Software Development Framework Tasks related to Code and Prebuild

1.0 Achieving Code and Prebuild Tasks of the Secure Software Development Framework

This chapter focuses specifically on DevSecOps tooling and practices related to Code and Prebuild actions of the CI/CD pipeline to achieve tasks defined by the Secure Software Development Framework.

The Secure Software Development Framework, developed by the National Institute of Standards and Technology (NIST), provides a comprehensive approach to ensuring security across the software development process, from initial design through deployment and maintenance. The framework outlines key practices and guidelines that organizations can implement to secure their software development lifecycle (SDLC), with a particular emphasis on integrating security into automated processes.

1.1 Prepare the Organization (PO) Organizations should ensure that their people, processes, and technology are prepared to perform secure software development at the organization level. Many organizations will find some PO practices to also be applicable to subsets of their software development, like individual development groups or projects.
1.2 Protect the Software (PS) Organizations should protect all components of their software from tampering and unauthorized access.
1.3 Produce Well-Secured Software (PW) Organizations should produce well-secured software with minimal security vulnerabilities in its releases.
1.4 Respond to Vulnerabilities (RV) Organizations should identify residual vulnerabilities in their software releases and respond appropriately to address those vulnerabilities and prevent similar ones from occurring in the future.

1.1 - 1.1 Prepare the Organization (PO)

1.1 Prepare the Organization (PO) Phase 1 Tasks

1.1 Prepare the Organization (PO) for Code and Prebuild Tasks

Organizations should ensure that their people, processes, and technology are prepared to perform secure software development at the organization level. Many organizations will find some PO practices to also be applicable to subsets of their software development, like individual development groups or projects.


PO.2 Implement Roles and Responsibilities

Ensure that everyone inside and outside of the organization involved in the SDLC is prepared to perform their SDLC-related roles and responsibilities throughout the SDLC.


Tasks Tools
PO.2.1:

Create new roles and alter responsibilities for existing roles as needed to encompass all parts of the SDLC. Periodically review and maintain the defined roles and responsibilities, updating them as needed.

Designate a group of individuals as the code owners for each project, and review the list annually.

GitHub CODEOWNERS

GitHub CODEOWNERS is a repository feature that lets teams formally define who owns which parts of the codebase and who must review changes before they’re merged.

GitLab CODEOWNERS

GitLab CODEOWNERS is a repository feature that lets teams formally define who owns which parts of the codebase and who must review changes before they’re merged.


PO.3 Implement Supporting Toolchains

Use automation to reduce human effort and improve the accuracy, reproducibility, usability, and comprehensiveness of security practices throughout the SDLC, as well as provide a way to document and demonstrate the use of these practices. Toolchains and tools may be used at different levels of the organization, such as organization-wide or project-specific, and may address a particular part of the SDLC, like a build pipeline.


Tasks Tools
PO.3.1:

Specify which tools or tool types must or should be included in each toolchain to mitigate identified risks, as well as how the toolchain components are to be integrated with each other.

Use software factories and/or software templates to standardize the toolchain.

Backstage Software Templates

Backstage Software Templates are a scaffolding and standardization mechanism that help teams create new services, pipelines, and infrastructure in a consistent, compliant way. Backstage Software Templates let platform teams define golden paths for creating software components. A template captures best practices, required tooling, and organizational standards, then generates repositories, configs, and documentation automatically.

Konflux-ci software factory for Tekton

The Konflux software factory for Tekton is a secure, standardized CI build system that sits on top of Tekton to turn raw pipelines into a trusted software supply-chain factory. Konflux is Tekton with guardrails. Tekton provides the pipeline engine (tasks, pipelines, Kubernetes execution). Konflux adds the factory layer that enforces how those pipelines are allowed to run so the outputs can be trusted. Implements the in-toto framework.

CDF CDEvents

CDEvents is a common specification for Continuous Delivery events, enabling interoperability in the complete software production ecosystem.

PO.3.2:

Follow recommended security practices to deploy, operate, and maintain tools and toolchains.

Use code-based configuration for toolchains (e.g., pipelines-as-code, toolchains-as-code).

Jenkins Jenkinsfile

A Jenkins Jenkinsfile is a declarative or scripted definition of a CI/CD pipeline, written as code and stored directly in a source repository. A Jenkinsfile describes how software is built, tested, scanned, packaged, and deployed. Because it lives alongside the application code, it enables pipeline-as-code—versioned, reviewable, and auditable automation.

GitHub Actions (.github/workflows)

The GitHub Actions .github/workflows directory is the central location where CI/CD automation is defined as code for a GitHub repository. The directory contains YAML files that define workflows. Each workflow describes when automation should run and what jobs and steps are executed in response to repository events.

GitLab CI/CD (.gitlab-ci.yml)

The GitLab CI/CD .gitlab-ci.yml file is the single, authoritative pipeline definition that tells GitLab how to build, test, secure, and deploy an application. .gitlab-ci.yml is a YAML-based, pipeline-as-code configuration file stored at the root of a repository. It defines what jobs run, in what order, and under which conditions whenever code changes occur.

Spinnaker Dinghy

Spinnaker Dinghy is a configuration-as-code service that lets teams define and manage Spinnaker deployment pipelines using Git, instead of clicking through the UI. Dinghy allows Spinnaker pipelines to be written as JSON or YAML files and stored in a source repository. When changes are committed, Dinghy automatically syncs those pipeline definitions into Spinnaker, keeping deployments consistent and versioned.

Argo CD

Argo CD is a GitOps-based continuous delivery tool for Kubernetes that automatically deploys and keeps applications in sync with what’s declared in Git. Argo CD treats Git as the single source of truth for Kubernetes applications. Instead of pushing deployments from a CI pipeline, Argo CD pulls desired state from Git and continuously reconciles running clusters to match it.

Tekton Pipelines-as-Code

Tekton Pipelines-as-Code is a Git-driven way to define and run Tekton CI/CD pipelines directly from pull requests—treating pipelines as first-class code artifacts.

OpenTofu

OpenTofu is an open-source Infrastructure as Code (IaC) tool used to define, provision, and manage cloud and on-prem infrastructure using declarative configuration files.

Konflux-ci

Konflux is an open-source, cloud-native CI platform designed to produce trusted, reproducible, and verifiable software artifacts for modern software supply chains. It prioritizes build integrity, provenance, and repeatability, making it well-suited for regulated, enterprise, and critical-infrastructure environments.

Python: pylock.toml (preferred, newest standard)

JavaScript:

Java / Kotlin / Groovy: Maven, Gradle

C# / .NET: NuGet lock files , DotNet.ReproducibleBuilds

C++: Bazel

Rust: Cargo

Golang: Go reproducible builds

PHP Composer

Composer is the standard dependency manager for PHP, used to declare, install, and manage third-party libraries required by a PHP application. Composer lets developers define which PHP packages their project depends on and automatically resolves, downloads, and installs the correct versions. It ensures that every environment—developer laptops, CI systems, and production—uses the same dependency set.

SLSA Framework

The SLSA Framework (Supply-chain Levels for Software Artifacts) is a security framework that defines how to build software in a way that is verifiable, tamper-resistant, and trustworthy.

PO.3.3:

Configure tools to generate artifacts of their support of secure software development practices as defined by the organization.

Use existing tooling (e.g., workflow tracking, issue tracking, value stream mapping) to create an audit trail of the secure development-related actions that are performed for continuous improvement purposes. Record security check approvals, rejections, and exception requests as part of the workflow and tracking system.

GitHub Issues

GitHub Issues is a built-in tracking system used to manage work, bugs, feature requests, and discussions directly within a GitHub repository.

GitLab work tracking

GitLab Work Tracking is GitLab’s integrated system for planning, tracking, and managing work—from ideas and requirements to code, security fixes, and delivery.

Bugzilla

Bugzilla is an open-source bug tracking and issue management system used to report, track, and manage software defects and enhancement requests throughout the development lifecycle.

Redmine

Redmine is an open-source project management and issue-tracking tool used by software teams to plan work, track bugs and tasks, and manage projects over time.

Mantis Bug Tracker

Mantis Bug Tracker (often called MantisBT) is an open-source, web-based bug and issue tracking system designed to be simple, fast, and lightweight.

Trac

Trac is an open-source, web-based project management and issue-tracking system that tightly integrates tickets, a wiki, and source-code browsing. It’s known for being lightweight, text-centric, and developer-friendly.

in-toto framework

in-toto is an open-source framework for securing the software supply chain by cryptographically recording and verifying every step of how software is built, tested, and released.


PO.4 Define and Use Criteria for Software Security Checks

Help ensure that the software resulting from the SDLC meets the organization’s expectations by defining and using criteria for checking the software’s security during development.


Tasks Tools
PO.4.1:

Define criteria for software security checks and track throughout the SDLC.

Add software security criteria to existing checks (e.g., the Definition of Done in agile SDLC methodologies).

GitHub Issue Templates

GitHub Issue Templates are predefined forms and guidelines that appear when someone opens a new issue in a repository. They help teams collect consistent, high-quality information for bugs, feature requests, security issues, or questions.

GitLab Description Templates

GitLab Description Templates are predefined Markdown templates that automatically populate the description field when someone creates a GitLab Issue, Merge Request (MR), or Epics.

PO.4.2:

Implement processes, mechanisms, etc. to gather and safeguard the necessary information in support of the criteria.

Collect audit logs for code repositories.

GitHub

GitLab

Audit Logs

PO.4.3:

Implement processes, mechanisms, etc. to gather and safeguard the necessary information in support of the criteria.

Only allow authorized personnel to access the gathered information, and prevent any alteration or deletion of the information. Carefully manage the list of repository owners and organization owners who have the ability to view audit logs, delete organizations, and delete code repositories, and review the list annually.

GitHub

GitLab


PO.5 Implement and Maintain Secure Environments for Software Development

Ensure that all components of the environments for software development are strongly protected from internal and external threats to prevent compromises of the environments or the software being developed or maintained within them. Examples of environments for software development include development, build, test, and distribution environments.


Tasks Tools
PO.5.1:

Separate and protect each environment involved in software development.

Require multifactor authentication, SSH keys, signed commits, and code change approvals for code repositories at the organization level.

GitHub Organization Settings

GitLab


Note: Securely configure code repository and CI/CD servers - this is a complex topic, beyond the scope of this document. Securely configure development endpoints (i.e., developer laptops) - this is a complex topic, beyond the scope of this document.

1.2 - 1.2 Protect the Software (PS)

1.2 Protect the Software (PS) Phase 1 Tasks

1.2 Protect the Software (PS) Tasks for Code and Prebuild

Organizations should protect all components of their software from tampering and unauthorized access.


PS.1: Protect All Forms of Code from Unauthorized Access and Tampering

Help prevent unauthorized changes to code, both inadvertent and intentional, which could circumvent or negate the intended security characteristics of the software. For code that is not intended to be publicly accessible, this helps prevent theft of the software and may make it more difficult or time-consuming for attackers to find vulnerabilities in the software.


Tasks Tools
PS.1.1:

Store all forms of code – including source code, executable code, and configuration-as-code – based on the principle of least privilege so that only authorized personnel, tools, services, etc. have access.

Store all source code and configuration-as-code in a code repository, and restrict access to it based on the nature of the code. For example, open source code intended for public access may need its integrity and availability protected; other code may also need its confidentiality protected.

GitHub

Provides a centralized source code repository with access control, auditability, and workflow enforcement supporting SSDF practices for secure code management and change control.

GitLab

Delivers integrated source control, CI/CD, and security workflows that enable SSDF-aligned governance, traceability, and secure development processes.

Bitbucket

Supports SSDF by managing source code with role-based access, commit integrity options, and mandatory review workflows.

SourceForge

Hosts and distributes open-source projects with version control and release management supporting SSDF requirements for code provenance and transparency.

Subversion

Provides centralized version control enabling SSDF practices for change tracking, audit trails, and controlled access to source code.

Git

Enables immutable history, traceability, and distributed development workflows foundational to SSDF source integrity and accountability.

GitBucket

Offers Git-based repository hosting with access control and collaboration features supporting SSDF secure development governance.

Gitea

Provides lightweight, self-hosted Git repositories that support SSDF requirements for controlled source management and auditability.

gittuf

Strengthens SSDF compliance by enforcing cryptographic policies and verifiable trust metadata over Git repositories and workflows.

GitHub Signing Commits

Ensures SSDF-aligned source integrity by cryptographically verifying the identity of commit authors.

Sigstore

Enables SSDF-aligned artifact and commit verification through keyless, auditable cryptographic signing and transparency logs.

Github CODEOWNERS

Enforces SSDF role separation and accountability by requiring designated owners to review and approve code changes.

GitHub Code Review

Supports SSDF secure development by enforcing peer review, policy checks, and approval gates before code integration.

Gitlab CODEOWNERS

Implements SSDF responsibility assignment by automatically routing changes to accountable reviewers.

Gitlab Code Review Guidelines

Establishes SSDF-aligned review standards that reduce defects and security risks prior to merging code.


PS.2 Provide a Mechanism for Verifying Software Release Integrity

Help software acquirers ensure that the software they acquire is legitimate and has not been tampered with.


Tasks Tools
PS.2.1:

Make software integrity verification information available to software acquirers.

Post cryptographic hashes for release files on a well-secured website.

Apache Infrastructure Signing Releases

Supports SSDF by ensuring that Apache software releases are cryptographically signed and verifiable, establishing trusted provenance and protecting against tampered distribution artifacts.

OpenPGP

Provides SSDF-aligned cryptographic mechanisms for signing and verifying code and artifacts to ensure authenticity, integrity, and non-repudiation.

The GNU Privacy Guard

Implements OpenPGP standards to enable SSDF practices for signing source code, commits, and releases with verifiable developer identity.

Let's Encrypt

Supports SSDF secure delivery by issuing free, automated TLS certificates that protect software distribution channels and developer services from interception and tampering.

EJBCA Community

Enables SSDF compliance by providing an open-source PKI for managing certificates used to authenticate developers, systems, and software artifacts.

Dogtag Certificate System

Supports SSDF trust and identity requirements by issuing and managing digital certificates for secure software signing and infrastructure authentication.

OpenXPKI

Provides SSDF-aligned certificate lifecycle management to establish, audit, and enforce trust across software development and release pipelines.

Step-CA

Enables SSDF automation of cryptographic identity by issuing short-lived certificates for developers, CI/CD systems, and software signing workflows.


PS.3 Archive and Protect Each Software Release

Preserve software releases in order to help identify, analyze, and eliminate vulnerabilities discovered in the software after release.


Tasks Tools
PS.3.1:

Securely archive the necessary files and supporting data (e.g., integrity verification information, provenance data) to be retained for each software release.

Store the release files, associated images, etc. in repositories following the organization’s established policy. Allow read-only access to them by necessary personnel and no access by anyone else.

Access Permissions on GitHub

Enforces SSDF role-based access control by restricting who can view, modify, or administer source code repositories.

GitLab Roles and Permissions

Supports SSDF governance by defining granular roles that enforce least privilege and separation of duties across the SDLC.

GitHub Repository Roles for an Organization

Implements SSDF organizational controls by standardizing permission levels across teams and repositories.

GitLab Roles and Permissions

Implements SSDF organizational controls by standardizing permission levels across teams and repositories.

Ortelius

Extends SSDF controls beyond source code by enforcing access, traceability, and accountability over deployed software, SBOMs, and live environment metadata through a deployment-centric digital twin.

PS.3.2:

Collect, safeguard, maintain, and share provenance data for all components of each software release (e.g., in a Software Bill of Materials (SBOM)).

Make the provenance data available to software acquirers in accordance with the organization’s policies, preferably using standards-based formats.

AI SBOM Generator

Supports SSDF by automatically generating and maintaining accurate software bills of materials that improve component visibility and vulnerability traceability across the SDLC.

CycloneDX

Enables SSDF-aligned component transparency by providing a standardized SBOM format optimized for security, integrity, and risk analysis.

Software Identification (SWID) Tagging Tools and Utilities

Support SSDF practices by uniquely identifying installed software components to enable asset inventory, provenance tracking, and vulnerability correlation.

SPDX

Provides an SSDF-compliant standard for documenting software components, licenses, and relationships to support supply-chain transparency and compliance.

bomctl

Supports SSDF SBOM consumption by validating, querying, and managing SBOMs throughout build and release workflows.

OWASP Dependency-Check

Enables SSDF vulnerability detection by identifying known CVEs in third-party dependencies during development and build phases.

Dependency-Track

Supports SSDF risk management by continuously analyzing SBOMs to monitor component vulnerabilities and policy compliance.

Clair

Contributes to SSDF by scanning container images for known vulnerabilities prior to deployment.

Grype

Supports SSDF secure build practices by detecting known vulnerabilities in container images and file systems using SBOM data.

Ortelius

Extends SSDF beyond build time by correlating and aggregating SBOMs, vulnerabilities, and deployment metadata to identify which live environments are actually at risk.

Protobom

Supports SSDF interoperability by providing reusable libraries and tools for generating and transforming SBOMs across formats.

Syft

Enables SSDF component discovery by generating SBOMs from source code, containers, and runtime artifacts.

Hoppr

Supports SSDF SBOM sharing and discovery by enabling secure distribution and retrieval of SBOM artifacts.

Tern

Contributes to SSDF transparency by analyzing container images to produce detailed component inventories and SBOMs.

Trivy

Supports SSDF secure development by scanning for vulnerabilities, misconfigurations, and exposed secrets across code and artifacts.

aoss-verifier

Enables SSDF compliance validation by verifying the integrity and authenticity of open-source artifacts.

Sigstore

Supports SSDF provenance by enabling cryptographically verifiable signing of artifacts and SBOMs with transparency logs.

TLSNotary Protocol

Contributes to SSDF trust by providing cryptographic proof of data integrity for externally retrieved security and dependency metadata.

GitHub Actions

Enables SSDF automation by embedding security checks, SBOM generation, and policy enforcement directly into CI workflows.

GitLab CI/CDSupports SSDF secure pipelines by integrating build, test, scan, and release controls within a governed CI/CD system.

Jenkins

Jenkins is a fully open-source automation server, released under the MIT License, with an extensible plugin ecosystem governed by the Jenkins community and widely used to implement SSDF-aligned CI/CD security controls.

Updatecli

Supports SSDF remediation by automating dependency, configuration, and policy updates in a controlled and auditable manner.

Renovate

Enables SSDF secure maintenance by automatically updating vulnerable dependencies while preserving review and approval controls.


1.3 - 1.3 Produce Well-Secured Software (PW)

1.3 Produce Well-Secured Software (PW) during the code and pre-build Tasks

1.3 Produce Well-Secured Software (PW) Tasks for Code and Prebuild

Organizations should produce well-secured software with minimal security vulnerabilities in its releases.


PW.1

Design Software to Meet Security Requirements and Mitigate Security Risks: Identify and evaluate the security requirements for the software; determine what security risks the software is likely to face during operation and how the software’s design and architecture should mitigate those risks; and justify any cases where risk-based analysis indicates that security requirements should be relaxed or waived. Addressing security requirements and risks during software design (secure by design) is key for improving software security and also helps improve development efficiency.


Tasks Tools

PW.1.1: Use forms of risk modeling – such as threat modeling, attack modeling, or attack surface mapping – to help assess the security risk for the software.


PW.1.2: Track and maintain the software’s security requirements, risks, and design decisions.


PW.1.3: Where appropriate, build in support for using standardized security features and services (e.g., enabling software to integrate with existing log management, identity management, access control, and vulnerability management systems) instead of creating proprietary implementations of security features and services.

OWASP Threat Dragon

Used before coding to document system components, data flows, and trust boundaries, then enumerate threats and requirements.

OWASP Amass

Helps define security requirements by identifying known external dependencies, APIs, or services that code will interact with, which informs threat modeling and secure design.

CAIRIS

Helps security teams and developers capture, manage, and trace security requirements from initial design through development, ensuring prebuild security alignment.

Threagile

Enables “threat modeling as code” in prebuild, so security requirements can be automated and version-controlled alongside application code.

Open-Needs

Centralizes and structures security requirements so they are available for threat modeling, design reviews, and early validation.

rmtoo

Useful at the design and planning phase to maintain a structured list of security requirements and link them to test cases, threat models, or code modules, ensuring security is addressed before coding.

OpenRMF® OSS

In prebuild, it can define the exact RMF-derived security requirements the codebase must meet, including control baselines, and link them to design elements or development tasks.


PW.2

Review the Software Design to Verify Compliance with Security Requirements and Risk Information: Help ensure that the software will meet the security requirements and satisfactorily address the identified risk information.


Tasks Tools

PW.2.1: Have 1) a qualified person (or people) who were not involved with the design and/or 2) automated processes instantiated in the toolchain review the software design to confirm and enforce that it meets all of the security requirements and satisfactorily addresses the identified risk information.

OWASP Dependency-Check

Scans project dependencies (direct and transitive) against the National Vulnerability Database (NVD) and other sources to detect known vulnerabilities (CVEs). Helps confirm if a component meets security requirements before inclusion.

Dependabot

Automated dependency monitoring and update tool integrated with GitHub. Detects vulnerable dependencies and creates pull requests to update them, ensuring only secure versions are used.

OpenRMF

Manages Risk Management Framework (RMF) compliance artifacts, including NIST 800-53 controls. Can be used to confirm that selected software components meet mandated security control baselines before approval.

ESLint

JavaScript/TypeScript linter that enforces secure coding standards and flags insecure coding patterns before they reach production. Helps validate that custom code components align with secure coding requirements.

LGTM

Automated code analysis platform for identifying vulnerabilities and code quality issues in multiple languages. Confirms code components meet security policies before integration.

Grype

Open-source vulnerability scanner for container images and file systems. Ensures that containerized components meet vulnerability and compliance requirements before deployment.

Clair

Static vulnerability analysis for container images. Integrates into CI/CD to detect vulnerabilities in base images and layered components before they’re promoted.

Trivy

Comprehensive vulnerability scanner for container images, file systems, and Git repositories. Validates that selected components have no known vulnerabilities or misconfigurations.

Checkov

Static analysis for Infrastructure as Code (IaC) to detect security misconfigurations (Terraform, Kubernetes, CloudFormation). Ensures that IaC components meet defined security baselines before use.

Terrascan

Policy-as-code scanner for Terraform, Kubernetes, Docker, and other IaC frameworks. Confirms that infrastructure components comply with security and compliance requirements.

Gerrit

Web-based code review tool. While not a vulnerability scanner, it enforces human review and approval workflows that can include security requirement validation checklists before component approval.


PW.4

Reuse Existing, Well-Secured Software When Feasible Instead of Duplicating FunctionalityLower the costs of software development, expedite software development, and decrease the likelihood of introducing additional security vulnerabilities into the software by reusing software modules and services that have already had their security posture checked. This is particularly important for software that implements security functionality, such as cryptographic modules and protocols.


Tasks Tools

PW.4.1: Acquire and maintain well-secured software components (e.g., software libraries, modules, middleware, frameworks) from commercial, opensource, and other third-party developers for use by the organization’s software.


PW.4.2: Create and maintain well-secured software components in-house following SDLC processes to meet common internal software development needs that cannot be better met by third-party software components.


PW.4.3: Moved to PW.4.4


PW.4.4: Verify that acquired commercial, open-source, and all other third-party software components comply with the requirements, as defined by the organization, throughout their life cycles.

CycloneDX

Generated during build/prebuild to validate component data against defined acceptance criteria.

SPDX

Used to verify that all components meet licensing and security requirements before integration.

ArtifactHub

Ensures only vetted, signed, and policy-compliant packages are sourced for builds.

JFrog Artifactory OSS

Acts as a controlled source for components meeting defined security standards.

Sonatype Nexus OSS

Prevents use of components that fail security requirements or policy checks.

Harbor

Enforces rules that only scanned, signed, and policy-compliant images are stored and used in builds.

GitLab Signing

nforces signed commit policy in merge requests before code is accepted.

GitHub CodeQL

Runs in CI to check code against predefined security queries before integration.

AquaSec Trivy

Enforces security acceptance criteria (e.g., no critical CVEs) before promoting components.

Dependabot

Creates PRs to meet policy-defined security versions.

Allstar

Ensures repositories meet defined configuration criteria before allowing merges.

OWASP SAMM

Provides a framework to define security assurance practices and maturity targets. Helps establish criteria for secure development processes, including prebuild checks.

OWASP ASVS

Defines detailed security verification requirements for applications. Can be used as a benchmark for automated and manual prebuild security tests.

OWASP Defectdojo

Vulnerability management and security test orchestration platform. Centralizes results from scanners and ensures issues are tracked against acceptance criteria.

OWASP Dependency-Check

Scans project dependencies for known vulnerabilities (CVEs) and fails builds if they don’t meet criteria.

Git

VCS that supports commit signing and hooks to enforce prebuild checks (linting, security scans).

Gitea

Lightweight, self-hosted Git service with repository policy enforcement (e.g., signed commits, review requirements).

GitLab (Community Edition)

Git platform with CI/CD integration for running security checks before merging.

Visual Studio Code

Supports extensions for linting, vulnerability scanning, and code signing enforcement pre-commit.

Eclipse

Java IDE with plugins for static analysis, dependency scanning, and secure coding rule enforcement.

IntelliJ IDEA (Community Edition)

Java IDE with plugins for static analysis, secure coding, and SBOM generation.

JUnit

Java unit testing framework; can integrate with security test suites.

NUnit

NET testing framework; supports integration with security validation tests.

Pytest

Python testing framework; can run security rule-based tests as part of CI.

Selenium

Automated browser testing tool; can validate secure behavior (e.g., auth flows).

Playwright

End-to-end browser testing with support for security-focused scenarios.

OWASP ZAP

Dynamic Application Security Testing (DAST) tool for finding security issues in running apps during testing stages.

TestNG

Testing framework for Java; integrates with security automation.

Cucumber

BDD testing framework; can define security acceptance tests in plain language.

Aqua Trivy

Scans containers, file systems, and repos for vulnerabilities and misconfigurations.

Clair

Static vulnerability scanning for container images before deployment.

Grype

Vulnerability scanner for containers and filesystems.

Bandit for Python

Python-specific static analyzer for common security issues.

Semgrep

Multi-language static analysis using custom or predefined security rules.

Brakeman

Rails-specific static analyzer for security vulnerabilities.

Gitleaks

Detects hardcoded secrets in Git repositories pre-commit or in CI.

TruffleHog

Detects secrets and sensitive information in code history and commits.

Sigstore

Open-source framework for signing software artifacts (commits, containers) using cryptographic proofs.

OWASP Dependency-Check

Scans project dependencies (direct and transitive) for known CVEs using NVD and other sources. Can enforce “no critical/high vulnerabilities” criteria before the build passes.

OSS Review Toolkit (ORT)

Ensures that selected components meet license and security criteria before merging into mainline.

FOSSA (Community Edition)

Can block merges or builds that violate licensing rules or contain known vulnerabilities.

ScanCode Toolkit

Ensures licensing criteria are met before components are accepted into the build.

Tern

Provides component inventory to validate against predefined acceptance criteria.

Open Policy Agent (OPA)

Enforces security, compliance, and configuration policies during CI/CD gates before release.

PW.5 Create Source Code by Adhering to Secure Coding Practices: Decrease the number of security vulnerabilities in the software, and reduce costs by minimizing vulnerabilities introduced during source code creation that meet or exceed organization-defined vulnerability severity criteria.


Tasks Tools
PW.5.1:

PW.5.1 Follow all secure coding practices that are appropriate to the development languages and environment to meet the organization’s requirements.

Semgrep

egrated into CI to scan changed code and block merges if rules fail; can also run locally for pre-commit checks.

Bandit for Python

Runs in prebuild to fail pipelines when high-severity issues are found in Python code.

FindBugs

Scans Java code before packaging to find vulnerabilities and bad coding practices.

SpotBugs

Integrated into CI to detect Java vulnerabilities pre-release.

SonarQube

Runs in CI to flag security issues before merges; supports quality gates for enforcement.

OWASP ZAP

Can run in test environments before production release to catch runtime security issues.

Arachni

Runs against staging/test instances before deployment to catch exploitable issues.

OWASP Dependency-Check

Blocks builds that include components with vulnerabilities exceeding severity thresholds.


PW.6 Configure the Compilation, Interpreter, and Build Processes to Improve Executable Security: Decrease the number of security vulnerabilities in the software and reduce costs by eliminating vulnerabilities before testing occurs.


Tasks Tools

PW.6.1: Use compiler, interpreter, and build tools that offer features to improve executable security


PW.6.2: Determine which compiler, interpreter, and build tool features should be used and how each should be configured, then implement and use the approved configurations.

Sigstore Cosign

Signs and verifies the integrity/authenticity of source code and pre-built dependencies before compiling.

GnuPG (GPG)

Verifies cryptographic signatures of source tarballs and dependencies before build.

OSS Review Toolkit (ORT)

Scans and audits dependencies for licensing and security issues before they are included in a build.

Meson

Integrated into CI to detect Java vulnerabilities pre-release.

Tern

Analyzes container image layers to identify open-source components and licensing before using as a base for builds.

ScanCode Toolkit

Detects licenses, copyrights, and packages in source code before build to ensure compliance and security.

Grype

Scans source code and container base images for known vulnerabilities before they are included in builds.

Syft

Generates SBOMs from source code and dependencies before build to document and verify components.

PW.7

Review and/or Analyze Human-Readable Code to Identify Vulnerabilities and Verify Compliance with Security Requirements: Help identify vulnerabilities so that they can be corrected before the software is released to prevent exploitation. Using automated methods lowers the effort and resources needed to detect vulnerabilities. Human-readable code includes source code, scripts, and any other form of code that an organization deems humanreadable.


Tasks Tools

PW.7.1 Determine whether code review (a person looks directly at the code to find issues) and/or code analysis (tools are used to find issues in code, either in a fully automated way or in conjunction with a person) should be used, as defined by the organization.


PW.7.2: Perform the code review and/or code analysis based on the organization’s secure coding standards, and record and triage all discovered issues and recommended remediations in the development team’s workflow or issue tracking system.

OWASP Dependency-Check

Scans project dependencies (e.g., Maven, npm, Python) against the NVD for known CVEs before build, enabling early remediation of vulnerable libraries.

OWASP ZAP

Primarily a dynamic application security testing (DAST) tool, but in a pre-build sense, it’s not generally used — can be run against local development builds for early runtime flaw detection. Limited PW.7 pre-build applicability.

SonarQube

Performs SAST and code quality checks for many languages, detecting vulnerabilities, bugs, and code smells before compilation or integration.

Retire.js

Scans JavaScript code and package manifests for known vulnerable libraries before packaging.

Fossa Community Edition

Performs dependency scanning for license and vulnerability issues before build. Commercial SaaS version is proprietary.

Semgrep

Lightweight, customizable SAST tool. Uses rules to detect security issues and anti-patterns in source code before build.

Bandit for Python

Scans Python source for common security issues before build (e.g., insecure function usage, hardcoded passwords).

Checkmarx KICS

Static analysis tool for IaC (Terraform, Kubernetes YAML, etc.) to find misconfigurations before deployment.

Cppcheck for C++

Static analysis for C/C++ source to catch undefined behavior, memory issues, and common security flaws before compilation.

FindSecBugs

A plugin for SpotBugs to detect Java-specific security vulnerabilities before build.

GitHub CodeQL

Performs deep semantic code analysis using a query language to detect vulnerabilities before build. Excellent for automated SAST in CI pipelines.

PMD

Scans Java, Apex, JavaScript, XML, and other code for bugs, unused code, and potential security issues before compilation.

SpotBugs

Static analysis for Java bytecode; detects bug patterns and potential vulnerabilities pre-build (when run on compiled class files in CI before packaging).

Danger JC

Automates pull request checks — enforces security/contribution guidelines, prevents insecure patterns from merging into code before build.


PW.8

Test Executable Code to Identify Vulnerabilities and Verify Compliance with Security Requirements: Help identify vulnerabilities so that they can be corrected before the software is released in order to prevent exploitation. Using automated methods lowers the effort and resources needed to detect vulnerabilities and improves traceability and repeatability. Executable code includes binaries, directly executed bytecode and source code, and any other form of code that an organization deems executable.


Tasks Tools

PW.8.1: Determine whether executable code testing should be performed to find vulnerabilities not identified by previous reviews, analysis, or testing and, if so, which types of testing should be used.


PW.8.2: Scope the testing, design the tests, perform the testing, and document the results, including recording and triaging all discovered issues and recommended remediations in the development team’s workflow or issue tracking system.

Semgrep

SAST engine that scans source code against security rules before build, catching vulnerabilities early.

Bandit (Python)

Static analysis for Python code to find common security issues before packaging.

FindSecBugs

Security plugin for SpotBugs to detect vulnerabilities in Java/Scala/Groovy code pre-build.

Cppcheck

Static analysis for C/C++ to detect security flaws before compilation artifacts are built.

PMD

Rule-based static analysis for Java, Apex, JavaScript, and XML for vulnerabilities and coding issues.

SpotBugs

General bug and vulnerability detection in Java code before build output.

GitHub CodeQL

Semantic code analysis to find vulnerabilities before build.

OWASP Dependency-Check

SCA tool that identifies vulnerable dependencies in manifests before packaging.

Retire.js

Scans JavaScript and Node.js dependencies for known vulnerabilities before release.

Grype

SSCA tool for scanning source code dependencies and base images pre-build for CVEs.

Syft

Generates SBOMs from source code before build to verify component inventory.

Checkmarx KICS

Scans Infrastructure-as-Code files for misconfigurations before deployment.

Gitleaks

Searches code and git history for secrets before build.

TruffleHog

Searches code and git history for secrets before build.

PW.9

Configure Software to Have Secure Settings by Default: Help improve the security of the software at the time of installation to reduce the likelihood of the software being deployed with weak security settings, putting it at greater risk of compromise.


Tasks Tools

PW.9.1: Define a secure baseline by determining how to configure each setting that has an effect on security or a security-related setting so that the default settings are secure and do not weaken the security functions provided by the platform, network infrastructure, or services.


PW.9.2: Implement the default settings (or groups of default settings, if applicable), and document each setting for software administrators.

KICS (Checkmarx)

Finds misconfigurations and insecure defaults in IaC files before build.

Open Policy Agent (OPA)

Policy-as-code engine to enforce secure configuration rules in pre-build pipelines.

Yamllint

Validates YAML configuration files, ensuring structure correctness before further security rule checks.

1.4 - 1.4 Respond to Vulnerabilities

1.4 Respond to Vulnerabilities (RV) Code and Prebuild CI/CD Steps

1.4 Respond to Vulnerabilities (RV) for Code and Prebuild Tasks

Respond to Vulnerabilities (RV): Organizations should identify residual vulnerabilities in their software releases and respond appropriately to address those vulnerabilities and prevent similar ones from occurring in the future.


RV.1

Identify and Confirm Vulnerabilities on an Ongoing Basis: Help ensure that vulnerabilities are identified more quickly so that they can be remediated more quickly in accordance with risk, reducing the window of opportunity for attackers.


To satisfy SSDF RV.1 in a code and prebuild context using open-source tools, the focus shifts to detecting and remediating vulnerabilities before any artifact is built, so fixes happen in code/manifest PRs, not after packaging.


Tasks Tools

RV.1.1: Gather information from software acquirers, users, and public sources on potential vulnerabilities in the software and third-party components that the software uses, and investigate all credible reports.


RV.1.2: Review, analyze, and/or test the software’s code to identify or confirm the presence of previously undetected vulnerabilities.


RV.1.3: Have a policy that addresses vulnerability disclosure and remediation, and implement the roles, responsibilities, and processes needed to support that policy.

OSV-Scanner

Scans source trees and manifest/lock files against OSV for known vulnerabilities for discovery early in development.

Ortelius Evidence Store

Continuously synchronizes Software Bill of Material versions of built artifacts to OSV.dev reporting on vulnerabilities discovered post-build.

Semgrep

Rule-based SAST in PRs/CI for previously undetected vulnerabilities. Static analysis tool used for searching code, finding bugs, and enforcing code standards at various stages of the development cycle (editor, commit, and continuous integration - CI). 

OWASP Dependency Check

SCA for many ecosystems; runs in CI, outputs SARIF/HTML. CVE-based dependency matching for code-time feedback.

Trivy

Can source/lockfiles and IaC before build. All-in-one SCA + IaC misconfig checks pre-build.

Syft

Generate SBOMs (CycloneDX/SPDX) directly from source. Composition/provenance data to power RV.1 discovery.

Grype

Scan source directories or Software Bill of Materials (from Syft) for vulnerabilities. Accurate matching via SBOM + flexible CI integration.

SonarQube Community

Developers can continuously inspect code quality to detect bugs, code smells, and security vulnerabilities without executing the code.

CodeQL

Developed by GitHub, developers and security researchers can analyze codebases for security vulnerabilities, bugs, and other code quality issues.

Bandit (Python)

A static analysis tool designed to identify common security vulnerabilities in Python code.

Brakeman (Rails)

Vulnerability scanner specifically designed for Ruby on Rails applications.

FindSecBugs (Java)

Static code analysis tool designed for Java applications, used to identify potential security vulnerabilities within the code.

Gitleaks

Prevent hardcoded secrets in code and configs.

Conftest

Conftest is a utility to help you write tests against structured configuration data.

Hoppr

Hoppr is an SBOM / supply-chain utility kit—SBOM processing and movement of supply-chain “materials” aligns to provenance collection/maintenance/sharing.

RV.2

Assess, Prioritize, and Remediate Vulnerabilities: Help ensure that vulnerabilities are remediated in accordance with risk to reduce the window of opportunity for attackers.


To satisfy SSDF RV.2 in a code and prebuild context using open-source tools, the focus shifts to:

  • Recording each vulnerability

  • Analyze risk (exploitability & impact)

  • Choose responses, publish advisories, and deliver remediations via trusted mechanisms; include temporary mitigations where needed.

Tasks Tools

RV.2.1: Analyze each vulnerability to gather sufficient information about risk to plan its remediation or other risk response.


RV.2.2: Plan and implement risk responses for vulnerabilities.

GUAC

Aggregates SBOMs, attestations, and vulns to understand blast radius and prioritize fixes.

Renovate

Automates dependency upgrades/patch PRs with risk-aware policies.

OWASP DefectDojo

Ingest scanner results (Semgrep/Grype/Trivy/etc.) for de-dupe, severity, ownership, and workflow. Central vulnerability triage and risk tracking tied to repos.

Ortelius Evidence Store

Exposes the blast radius of each vulnerability across live environments.

Vulns

Agentless vulnerability scanner that analyzes installed packages and maps to CVE data with CVSS scoring. Provides severity, exploitability, and remediation recommendations; can integrate with patch workflows.

Dependency-Track

Continuous SBOM-based component analysis platform. Enriches vulnerabilities with metadata (severity, exploitability, policy impact).

VEX

VEX bridges the gap between identifying potential vulnerabilities (SBOM) and determining their actual risk in a specific environment. Allows organizations to prioritize remediation efforts by focusing on vulnerabilities that are truly exploitable and require immediate attention.


RV.3

Analyze Vulnerabilities to Identify Their Root Causes: Help reduce the frequency of vulnerabilities in the future.



To satisfy SSDF RV.3 in a code and prebuild context using open-source tools, the focus shifts to:

  • Identify vulnerabilities in source code and dependency manifests before building, using SBOM generation, SCA, and SAST

  • Confirming findings by removing false positives and documenting minimal evidence for remediation

  • Enforcing early guardrails such as version pinning, deny-lists, and secret scanning to block known risks

  • Normalize, de-duplicate, and prioritize findings based on severity, exploitability, and usage context

  • Apply policy-driven gates in PRs to block high-risk vulnerabilities and automate safe dependency updates

  • Assign ownership, require disposition for each finding, and govern exceptions with time-bound waivers or VEX records

Tasks Tools

RV.3.1: Analyze identified vulnerabilities to determine their root causes.


RV.3.2: Analyze the root causes over time to identify patterns, such as a particular secure coding practice not being followed consistently.


RV.3.3: Review the software for similar vulnerabilities to eradicate a class of vulnerabilities, and proactively fix them rather than waiting for external reports.


RV.3.4: Review the SDLC process, and update it if appropriate to prevent (or reduce the likelihood of) the root cause recurring in updates to the software or in new software that is created.


SpotBugs + FindSecBugs

Maintains a “guardrail” ruleset for historical issues. Provides pattern-class eradication across modules.

Semgrep

Encode RCAs as rules (e.g., ban insecure APIs, enforce sanitizers) and run in PRs. Catches the class of bug that caused the incident.

OpenSSF Scorecard

Monitor repo hygiene signals (Branch protection, dependency-pinning, fuzzing, etc.) and bake improvements into SDLC. Preventative controls aligned to root-cause themes.

Codeql

Query codebases to trace vulnerability origins (e.g., find all injection points).

SonarQube Community

Identifies code quality/security rule violations that may indicate systemic coding issues.

DefectDojo

Aggregates scanner results so patterns in vulnerability types are easier to spot.

Dependency-Track

Tracks vulnerable components and shows recurring dependency-related issues.

Grype

A vulnerability scanner for container images and file systems.

Syft

Correlates SBOMs across releases to identify repeated dependency issues.

Bandit (Python)

Language-specific security scanner to identify same flaw across multiple files.

Brakeman (Rails)

Finds repeated insecure coding practices in Rails apps.

pre-commit

Enforces code quality/security hooks before commits.

Husky

Git hook automation for JavaScript/TypeScript projects to enforce checks.

Checkov

Prevents misconfigurations from being deployed by embedding into existing developer workflows.

tfsec

Adds IaC guardrails to prevent insecure configurations at commit time.

kics

Finds security vulnerabilities, compliance issues, and infrastructure misconfigurations.