10 min read
By

The image was deployed, then the IDS lit up. Why we audit every image.

A client image was rolled out, minutes later the IDS lit up. How we audit the software supply chain so things like this don't reach production any more.

Büro-Bild mit drei Monitoren, roten Warn-Akzenten und Mosel-Fensterblick im Abendlicht

TL;DR — the 90-second summary

The pattern

Container image runs through the pipeline, the IDS lights up in the cluster — traffic nobody asked for

The cause

The build result is audited, third-party code (base images, sidecars, Helm charts) is taken for granted

Audit building blocks

Signature verification (Sigstore/cosign), SBOM (CycloneDX), provenance (SLSA), continuous re-audit

Hard stop

Admission controller in the cluster enforces "no signature, no deploy" — no exceptions

Regulatory anchor

NIS-2 requires supply-chain risk management; the CRA holds vendors liable for their software across the entire lifecycle

First iteration

almost always finds something — an old base, a forgotten sidecar, a deprecated dependency. That is not failure, that is the diagnosis

 

What is the problem?

It is one of the most expensive scenarios of modern IT organisations and at the same time one of the most common: a container image runs through the pipeline, is activated in the cluster, and a few minutes later the IDS lights up. Traffic appears inside the container that nobody expected and that has nothing to do with the team's own code. What follows is rarely the spectacular night-shift crisis. It is the quiet post-mortem in the meetings of the following days: where did this come from, how did it get in, why did the pipeline not flag it earlier?

We see this pattern regularly in intake conversations with Mittelstand IT teams. It is almost always the consequence of a blind spot that looks harmless in isolation but in aggregate makes every supply chain attackable: the own build result is thoroughly inspected. The code the pipeline pulls from outside (base images, dependencies, sidecars, Helm charts) is taken for granted. With that, the trust boundary shifts unnoticed from your repository to dozens of foreign registries, hundreds of foreign maintainers and everything that happens inside their build pipelines.

Impact: every stage is a hand-over point

Each of these stages — base image, package dependency, sidecar, Helm chart — is a hand-over point at which third-party code enters your infrastructure. The attacks on those hand-over points are becoming more professional, not more spectacular.

Where the attacks sit today

None of these is a zero-day drama. All of them together are the reason why the IDS eventually reports something nobody asked for.

Who is affected?

At the core: every Mittelstand company running containers in production — whether on Kubernetes, Nomad, ECS or a Docker Swarm island. Three constellations are particularly exposed.

Anyone running exclusively self-built base images from a single internal registry is significantly less exposed — but has a different obligation: to prove that registry is clean.

Mitigation and immediate actions — four building blocks

Quick start in the order in which we currently push pipelines through — each building block knocks out a specific class of incidents.

 

# Quick check of an image for signature and SBOM
cosign verify --certificate-identity-regexp=".*" \
  --certificate-oidc-issuer-regexp=".*" \
  registry.example.com/app:v1.2.3
syft registry.example.com/app:v1.2.3 -o cyclonedx-json > sbom.json
grype sbom:sbom.json

 

1. Signature verification via Sigstore and cosign

Every image that may run in production has a cryptographic signature from a named identity provider. Without a valid signature, no deploy. Period. The admission controller in the cluster (Kyverno, Connaisseur or Sigstore Policy Controller) enforces that hard. No exceptions, not even for "just for a moment" deploys.

2. SBOM, Software Bill of Materials

Every build artifact carries a machine-readable list of its components — ideally CycloneDX. When a new CVE surfaces tomorrow, you know within minutes which of your running workloads are affected. Without an SBOM, you know in days, or never. Dependency-Track as an open-source receiver is enough.

3. Provenance per SLSA

The origin of an artifact is documented machine-readably: which commit, which runner, which parameters, which environment. That is the difference between "we believe the image comes from us" and "we can prove the image comes from us". SLSA Level 2 as a realistic Mittelstand starting point, Level 3 as a maturity target.

4. Continuous re-audit

An image that is clean today may be a CVE candidate in six weeks. Our pipeline therefore re-audits running workloads daily against updated vulnerability databases (Trivy, Grype, Snyk), not only at deploy time. Visible on a dashboard non-technical staff can read.

Detection and verification

Five core questions — in half an hour you know where your supply chain has plain-text gaps today.

Quick check we run before every audit:

 

# All distinct running images in the cluster
kubectl get pods --all-namespaces \
  -o jsonpath='{range .items[*]}{range .spec.containers[*]}{.image}{"\n"}{end}{end}' \
  | sort -u

# Signature verification per image
for img in $(cat images.txt); do
  cosign verify "$img" > /dev/null 2>&1 \
    && echo "OK $img" || echo "FAIL $img"
done

Operator recommendation

What should be operationally in place for which setup — depending on today's maturity.

Cross-references: the npm EVM cluster post for mirror topologies, the Bitwarden post for pipeline discipline in detail, the CI/CD concentration post for the structural reasoning.

Conclusion

Supply-chain security is not an add-on you evaluate next quarter. It is the foundation for the fact that what runs at your site is also what you intended to run. Four building blocks — signature, SBOM, provenance, continuous audit — add up to a pipeline that experiences the next IDS event not as a surprise, but as a pre-inventoried finding.

The question is not whether the next manipulated image is coming. It is whether your pipeline would notice it before the IDS does — and whether after noticing you know in the same hour which workloads sit on which component in which version. With the four building blocks the answer moves from "hopefully" to "in two commands".

A longer write-up with concrete examples of our DevSecOps pipeline, the admission-controller configuration and the Dependency-Track integration is available (in German) at ole-hartwig.eu.

Frequently asked questions about image auditing

What clients ask us most often about supply-chain security — answered openly.

We only use official base images. Isn't that enough?+

Official base images are better than random community builds, but they are not a guarantee. They still contain third-party dependencies, they are occasionally compromised, and they age — an image that is clean in January may have new CVEs by April. Signature verification, SBOM and continuous re-checking therefore apply to official images too, not only to external ones.

What does an image scan cost per deploy?+

Measured in seconds: usually under a minute per build. Measured in licences: surprisingly little, because the mature tools (cosign, Trivy, Syft) are open source and only enterprise add-ons cost money. The bigger item is the one-off integration, not ongoing operation. We typically calculate a five-figure setup effort and a clearly lower monthly run cost.

What happens if the scan trips — does that block our releases?+

Yes, on hard findings. That's the point of a gate. At the same time we agree with you up front what counts as "hard" and what doesn't: critical CVEs without a fix block. Medium findings with a defined remediation deadline pass through as warnings. Informational findings are logged but don't slow anything down. What matters is that these lines are drawn together before the first stop, not in the heat of a blocked release day.

Can we retrofit this without rebuilding the pipeline completely?+

Yes. As a rule we don't rebuild, we hook in. cosign and Trivy integrate as additional pipeline stages into almost any CI environment. The admission controller in the cluster runs alongside existing deployments. The first results often appear after two or three days, the full coverage after two or three weeks — depending on how much unexpected legacy the first scan turns up.

How does this relate to NIS2 and CRA — is it the same?+

NIS2 and CRA address the same area from different angles. NIS2 requires affected entities to have traceable risk management for their supply chain. The CRA requires product manufacturers to ensure security across the full lifecycle of their software, including updates. The technical building blocks — signatures, SBOM, provenance, re-checking — satisfy central requirements of both. Whoever sets this up cleanly resolves both duties in one motion.

A look at your build chain before the next alarm.

Let's talk structurally

If you want to set your pipeline up so that the IDS has less to do in future, a sober conversation about your current state and the next two or three steps is worthwhile. 30 minutes, no pitch. We look at your build chain together and show you where the fastest wins are and what can responsibly come later.

Book a slot directly