WAF-SEC-110 โ Supply Chain Security
Description
All container images deployed to production MUST use immutable tags to prevent post-push tampering. A Software Bill of Materials (SBOM) MUST be generated for all production container images and stored alongside the image in the registry. Third-party dependencies MUST be scanned for known CVEs before deployment using automated tooling in CI/CD pipelines. Container image signing MUST be implemented using Sigstore/Cosign or equivalent to verify image provenance and prevent deployment of unsigned or tampered images.
Rationale
| Risk | Description |
|---|---|
Risk |
Mutable tags allow production images to be overwritten and complicate rollbacks after incidents. |
Risk |
Missing binary authorization lets compromised images deploy into production unnoticed. |
Requirements
-
All container images deployed to production MUST use immutable tags to prevent post-push tampering.
-
A Software Bill of Materials (SBOM) MUST be generated for all production container images and stored alongside the image in the registry.
-
Third-party dependencies MUST be scanned for known CVEs before deployment using automated tooling in CI/CD pipelines.
-
Container image signing MUST be implemented using Sigstore/Cosign or equivalent to verify image provenance and prevent deployment of unsigned or tampered images.
Implementation Guidance
-
Document the requirement in a version-controlled policy or standard.
-
Assign ownership and establish a review cadence (e.g., quarterly).
-
Implement the required configuration as code in Terraform or equivalent IaC.
Maturity Levels
| Level | Name | Criteria |
|---|---|---|
L1 |
Ad hoc โ control not consistently applied |
* Manual evidence exists for some workloads, but coverage is unknown. |
L2 |
Standardised โ policy defined and communicated |
* A version-controlled policy, ADR, or standard describes the requirement. |
L3 |
Integrated โ automated validation in CI/CD |
* Terraform checks run automatically on pull requests and report results. |
L4 |
Auditable โ metrics and exceptions tracked |
* Control coverage, failures, and approved exceptions are reported quarterly. |
L5 |
Optimised โ continuous improvement based on data |
* Control effectiveness is measured and iteratively improved. |
Checks
waf-sec-110.tf.aws.ecr-immutable-tags
Engine: terraform | Provider: aws | Automated: Yes
ECR repositories must enforce immutable image tags
All aws_ecr_repository resources must have image_tag_mutability set to 'IMMUTABLE'. Mutable tags allow a tag to be overwritten with a different image after a security scan has passed, creating a window for supply chain injection that bypasses pre-deployment controls.
Scope: resource โ aws_ecr_repository
Assertions:
* image_tag_mutability equals IMMUTABLE โ ECR repository must use IMMUTABLE tag mutability to prevent post-push tag updates.
Remediation: Set image_tag_mutability = "IMMUTABLE" on all aws_ecr_repository resources. Update CI/CD pipelines to tag images with unique identifiers such as the Git commit SHA or a semantic version (e.g., v1.2.3-sha-abc1234) rather than mutable tags like 'latest'. Existing pipelines using 'latest' must be updated to use versioned tags before enabling immutability.
resource "aws_ecr_repository" "app" {
name = "my-application"
image_tag_mutability = "IMMUTABLE"
image_scanning_configuration {
scan_on_push = true
}
encryption_configuration {
encryption_type = "KMS"
kms_key = aws_kms_key.ecr.arn
}
tags = {
environment = "production"
owner = "platform-team"
}
}
resource "aws_ecr_repository" "app" {
name = "my-application"
image_tag_mutability = "MUTABLE" # WAF-SEC-110 violation: allows tag overwrite
# No image_scanning_configuration # WAF-SEC-110 violation: scan-on-push required
}
waf-sec-110.config.azurerm.azurerm-container-security
Engine: config | Provider: azurerm | Automated: Yes
Azure Container Registry must enforce immutable tags and SBOM generation
A version-controlled policy document must exist at docs/security/waf-sec-110-azurerm-container-security.md and document the Azure implementation of this control. The checker validates that the file exists and contains a normative requirement statement (MUST/SHALL/required/mandatory).
Scope: file โ docs/security/waf-sec-110-azurerm-container-security.md
Assertions:
* content matches pattern (?i)MUST|SHALL|required|mandatory|enforced|documented โ Policy file docs/security/waf-sec-110-azurerm-container-security.md must contain a normative requirement statement.
Remediation: Create or update docs/security/waf-sec-110-azurerm-container-security.md. State the requirement, how it is implemented for Azure, the review cadence, and the owner.
docs/security/waf-sec-110-azurerm-container-security.md:
- The Azure implementation of WAF-SEC-110 is documented.
- Implementation status and owner are recorded.
- Review cadence is defined (e.g. quarterly).
# `docs/security/waf-sec-110-azurerm-container-security.md` is missing or does not contain a normative requirement.
# WAF-SEC-110 violation: Azure control is not documented
waf-sec-110.tf.google.binary-authorization
Engine: terraform | Provider: google | Automated: Yes
GCP Binary Authorization must require attestation for production deployments
A google_binary_authorization_policy resource must define a default_admission_rule with evaluation_mode "REQUIRE_ATTESTATION" so that only signed, trusted container images can be deployed to production GKE clusters.
Scope: resource โ google_binary_authorization_policy
Assertions:
* default_admission_rule attribute exists โ Binary Authorization policy must define a default_admission_rule.
Remediation: Create a google_binary_authorization_policy with default_admission_rule evaluation_mode = "REQUIRE_ATTESTATION" and an attestation authority (google_binary_authorization_attestor) used by the CI/CD pipeline to sign images. Configure GKE clusters to enable Binary Authorization.
resource "google_binary_authorization_policy" "prod" {
default_admission_rule {
evaluation_mode = "REQUIRE_ATTESTATION"
enforcement_mode = "ENFORCED_BLOCK_AND_AUDIT_LOG"
require_attestations_by = [
google_binary_authorization_attestor.ci.id,
]
}
}
resource "google_binary_authorization_attestor" "ci" {
name = "ci-pipeline-attestor"
attestation_authority_note {
note_reference = google_container_analysis_note.ci.name
public_keys {
ascii_armored_pgp_public_key = file("ci-pipeline.pub")
}
}
}
resource "google_binary_authorization_policy" "prod" {
default_admission_rule {
evaluation_mode = "ALWAYS_ALLOW" # WAF-SEC-110 violation: any image can deploy
enforcement_mode = "ENFORCED_BLOCK_AND_AUDIT_LOG"
}
}
waf-sec-110.tf.aws.ecr-scan-enabled
Engine: terraform | Provider: aws | Automated: Yes
ECR repositories must have image scanning enabled on push
All aws_ecr_repository resources must include an image_scanning_configuration block with scan_on_push = true to ensure every image pushed to the registry is automatically scanned for known CVEs before it can be deployed to production workloads.
Scope: resource โ aws_ecr_repository
Assertions:
* image_scanning_configuration attribute exists โ ECR repository must have image_scanning_configuration defined with scan_on_push enabled.
Remediation: Add an image_scanning_configuration block with scan_on_push = true to all aws_ecr_repository resources. For enhanced scanning including programming language libraries (not just OS packages), enable Amazon Inspector integration at the account level and configure ECR enhanced scanning via the AWS Inspector console or API. Integrate ECR scan result checks into CI/CD deployment gates.
resource "aws_ecr_repository" "app" {
name = "my-application"
image_tag_mutability = "IMMUTABLE"
image_scanning_configuration {
scan_on_push = true
}
}
resource "aws_ecr_repository" "app" {
name = "my-application"
image_tag_mutability = "IMMUTABLE"
# Missing image_scanning_configuration โ WAF-SEC-110 violation
# Images pushed to this repository are not scanned for CVEs
}
waf-sec-110.config.stackit.stackit-container-security
Engine: config | Provider: stackit | Automated: Yes
STACKIT Container Registry must use immutable image tags and SBOMs
A version-controlled policy document must exist at docs/security/waf-sec-110-stackit-container-security.md and document the STACKIT implementation of this control. The checker validates that the file exists and contains a normative requirement statement (MUST/SHALL/required/mandatory).
Scope: file โ docs/security/waf-sec-110-stackit-container-security.md
Assertions:
* content matches pattern (?i)MUST|SHALL|required|mandatory|enforced|documented โ Policy file docs/security/waf-sec-110-stackit-container-security.md must contain a normative requirement statement.
Remediation: Create or update docs/security/waf-sec-110-stackit-container-security.md. State the requirement, how it is implemented for STACKIT, the review cadence, and the owner.
docs/security/waf-sec-110-stackit-container-security.md:
- The STACKIT implementation of WAF-SEC-110 is documented.
- Implementation status and owner are recorded.
- Review cadence is defined (e.g. quarterly).
# `docs/security/waf-sec-110-stackit-container-security.md` is missing or does not contain a normative requirement.
# WAF-SEC-110 violation: STACKIT control is not documented
waf-sec-110.config.ovh.ovh-container-security
Engine: config | Provider: ovh | Automated: Yes
OVHcloud container workloads must use immutable image tags and SBOMs
A version-controlled policy document must exist at docs/security/waf-sec-110-ovh-container-security.md and document the OVHcloud implementation of this control. The checker validates that the file exists and contains a normative requirement statement (MUST/SHALL/required/mandatory).
Scope: file โ docs/security/waf-sec-110-ovh-container-security.md
Assertions:
* content matches pattern (?i)MUST|SHALL|required|mandatory|enforced|documented โ Policy file docs/security/waf-sec-110-ovh-container-security.md must contain a normative requirement statement.
Remediation: Create or update docs/security/waf-sec-110-ovh-container-security.md. State the requirement, how it is implemented for OVHcloud, the review cadence, and the owner.
docs/security/waf-sec-110-ovh-container-security.md:
- The OVHcloud implementation of WAF-SEC-110 is documented.
- Implementation status and owner are recorded.
- Review cadence is defined (e.g. quarterly).
# `docs/security/waf-sec-110-ovh-container-security.md` is missing or does not contain a normative requirement.
# WAF-SEC-110 violation: OVHcloud control is not documented
waf-sec-110.config.hcloud.hcloud-container-security
Engine: config | Provider: hcloud | Automated: Yes
Hetzner Cloud container workloads must use immutable image tags and SBOMs
A version-controlled policy document must exist at docs/security/waf-sec-110-hcloud-container-security.md and document the Hetzner Cloud implementation of this control. The checker validates that the file exists and contains a normative requirement statement (MUST/SHALL/required/mandatory).
Scope: file โ docs/security/waf-sec-110-hcloud-container-security.md
Assertions:
* content matches pattern (?i)MUST|SHALL|required|mandatory|enforced|documented โ Policy file docs/security/waf-sec-110-hcloud-container-security.md must contain a normative requirement statement.
Remediation: Create or update docs/security/waf-sec-110-hcloud-container-security.md. State the requirement, how it is implemented for Hetzner Cloud, the review cadence, and the owner.
docs/security/waf-sec-110-hcloud-container-security.md:
- The Hetzner Cloud implementation of WAF-SEC-110 is documented.
- Implementation status and owner are recorded.
- Review cadence is defined (e.g. quarterly).
# `docs/security/waf-sec-110-hcloud-container-security.md` is missing or does not contain a normative requirement.
# WAF-SEC-110 violation: Hetzner Cloud control is not documented
Evidence
| Kind | Required | Description |
|---|---|---|
|
Required |
Terraform configuration implementing the control. |
|
Required |
Policy, ADR, or standard documenting the requirement. |
|
Optional |
Cloud console or API output confirming runtime state. |
Related Controls
| Framework | Controls |
|---|---|
ISO 27001:2022 |
* A.5.19 โ Information security in supplier relationships * A.5.20 โ Addressing information security within supplier agreements * A.5.21 โ Managing information security in the ICT supply chain * A.8.30 โ Outsourced development |
ISO 27017 |
* CLD.6.3 โ Shared roles and responsibilities |
CIS Controls v8 |
* CIS 2 โ Inventory and Control of Software Assets * CIS 16 โ Application Software Security |
CSA STAR |
* CCM STA-01 โ Supply Chain Agreements * CCM STA-02 โ Supply Chain Risk Management * CCM STA-09 โ Provider Internal Assessments |
PCI DSS v4.0 |
* Req 6.3 โ Software development processes * Req 12.8 โ Service provider management |
SOC 2 Type II |
* CC9.2 โ Vendor and business partner management |
GDPR |
* Art. 28 โ Processor obligations * Art. 32 โ Security of processing |
NIS2 |
* Art. 21(2)(d) โ Supply chain security |
DORA |
* Art. 28 โ ICT third-party risk management * Art. 30 โ Contractual arrangements |
EUCS (ENISA) |
* SUP-01 โ Supplier and supply chain management |
BSI C5:2020 |
* DEV-04 โ Secure development โ supply chain * PSS-01 โ Outsourcing and supply chain |
IT-Grundschutz |
* OPS.2.3 โ Auslagerung und Lieferantensteuerung * CON.8 โ Software-Entwicklung |
TISAX |
* Information security โ Supplier relationships and supply chain |
ANSSI SecNumCloud |
* Domain โ Supply chain security |
BIO |
* BIO โ Toeleveringsketenbeveiliging |
ENS High |
* op.ext.4 โ Cadena de suministro |
UK NCSC CAF |
* A4.b โ Supplier security |
NIST SP 800-53 |
* SR-3 โ Supply Chain Controls and Processes * SR-4 โ Provenance * SR-11 โ Component Authenticity |
NIST CSF 2.0 |
* GV.SC โ Cybersecurity Supply Chain Risk Management |
FedRAMP |
* SR-3, SR-4, SR-11 (High baseline supply chain controls) |
CMMC 2.0 |
* SA.L2-3.4.6 โ Employ principle of least functionality * SI.L2-3.14.2 โ Provide protection from malicious code |
IRAP |
* ISM โ Software supply chain |
CCCS PBMM |
* SR-3, SR-4 โ Supply chain risk controls |
MAS TRM |
* Ch.12 โ Outsourcing risk management * Ch.7 โ System development life cycle |
ISMAP |
* Supply chain assurance and provenance |
FISC |
* Operational measures โ Supply chain and outsourcing |