Selected work
Case 02

Container hardening: 300+ vulnerabilities to zero

Legacy container images carried more than three hundred known vulnerabilities and were blocking a security gate. The application behaviour had to stay identical while the images underneath it changed completely.

Photo: Unsplash
Client
US Telecommunications Company
Role
Consultant — platform & container security remediation
Period
2024 — 2025
Scope
Legacy container images in production

Context

Long-lived services running on container images built years earlier, with base layers and language runtimes that had aged out of support. A security programme had begun enforcing scan thresholds.

Problem

Over three hundred reported vulnerabilities across the image set. Naive fixes — bumping the base image or upgrading a runtime — broke the applications, and nobody could say which pinned versions were load-bearing.

Constraints

Zero tolerance for behavioural change in production. No rewrite budget. Some dependencies were transitive and undocumented, and a subset of findings had no upstream fix at all.

Approach

I separated findings into categories: fixed by rebasing, fixed by dependency upgrade, fixed by removing something the image did not need, and genuinely unfixable. The last group shrank considerably once unused packages and build tooling were removed from runtime images.

Each image was remediated in isolation, exercised against its previous behaviour, and promoted only after verification. Multi-stage builds kept build tooling out of the shipped layer.

Key decisions

Reduce the surface before patching it. Most of the vulnerability count came from packages the running application never used.

Add scanning to CI as a gate rather than a report, so the count could not silently climb back.

Outcome

Remediated images passed the security gate with no known vulnerabilities and no functional regressions. The pipeline now fails on newly introduced findings, which turned a one-off cleanup into a maintained state.

Retrospective

Container images are a maintenance surface, not a build artifact you write once. Treating them as inventory — owned, dated, and rebuilt on a schedule — is cheaper than periodic remediation projects.

Flow

Scan inventory
Base image rebase
Dependency pinning
Behaviour verification
CI gate

Remediation shipped image by image, each verified against the previous behaviour before promotion.

More cases