Skip to main content
  1. Blog/

After Log4Shell — Software Supply Chain Security Can't Wait

·1001 words·5 mins
Osmond van Hemert
Author
Osmond van Hemert
Table of Contents
Supply Chain Security - This article is part of a series.
Part : This Article

It’s been a week since Log4Shell exploded onto the scene, and if anything, the situation has gotten more complex rather than less. The initial patch in Log4j 2.15.0 turned out to be incomplete — a new CVE-2021-45046 was issued, and Apache rushed out version 2.16.0 which disables JNDI entirely by default. As I write this, there are reports of yet another issue being investigated. Teams that patched last weekend are patching again today.

But I don’t want to rehash the vulnerability details. Instead, I want to talk about the systemic problem that Log4Shell has made impossible to ignore: software supply chain security.

The Dependency Iceberg
#

Here’s a number that should keep every CTO awake at night: the average enterprise Java application contains between 100 and 400 transitive dependencies. Your developers chose maybe 20 of those explicitly. The other 80-380 came along for the ride, pulled in by the libraries you actually wanted.

Log4j was lurking in those shadows for millions of applications. Some organizations are still discovering instances of Log4j in their infrastructure a week later — in legacy applications, in embedded systems, in commercial off-the-shelf software where they don’t even have access to the source code.

This isn’t a Java problem. It’s a software engineering problem. The npm ecosystem, Python’s PyPI, Ruby gems — they all have the same deep dependency graphs. The reason Java got hit this time is that Log4j happens to be the most popular logging library in one of the most widely deployed enterprise language ecosystems. Next time it could be a Python package or a Node.js module.

SBOMs: The Ingredient Label We Need
#

The concept of a Software Bill of Materials — an SBOM — has been gaining traction this year, partly driven by the Executive Order on Improving the Nation’s Cybersecurity issued back in May. The idea is simple: every piece of software should come with a machine-readable list of every component it contains, like a nutritional label for code.

If every application had an SBOM, responding to Log4Shell would have been a lookup query instead of a week-long archaeological expedition through dependency trees and Docker images. “Show me everything that contains Log4j 2.x” should be a 30-second operation, not a multi-day audit.

Two standards are emerging: SPDX from the Linux Foundation and CycloneDX from OWASP. Both can express software component inventories in machine-readable formats. Tools like syft from Anchore can generate SBOMs from container images, and Maven and Gradle plugins exist for Java projects.

The challenge isn’t generating SBOMs — it’s making them a standard part of the software delivery pipeline. Every CI/CD build should produce an SBOM alongside the artifact. Every deployment should register its SBOM in a central inventory. Every vulnerability disclosure should trigger an automated cross-reference against that inventory.

Dependency Pinning and Verification
#

SBOMs are the inventory side of the problem. The integrity side is equally important. How do you know that the version of Log4j you downloaded from Maven Central is actually the code that the Apache team published?

Package signing and verification have been inconsistent across ecosystems. Maven Central has PGP signatures, but how many build pipelines actually verify them? npm introduced npm audit signatures only recently. Python’s PyPI has been working on adding proper signing support.

I’ve been advocating for dependency pinning with hash verification in my projects for years — specifying not just the version but the exact SHA-256 hash of every dependency. It’s more work to maintain, but it means you can’t accidentally pull in a tampered package. Tools like Gradle’s dependency verification make this feasible.

The Maintainer Problem
#

There’s another dimension to this that doesn’t get enough attention: the human side. Log4j is maintained by a small team of volunteers. They’ve been working around the clock for a week to ship patches for a library that’s used by virtually every Fortune 500 company. Most of those companies have never contributed a dollar to Log4j’s maintenance.

This is the open source sustainability crisis in stark relief. We build trillion-dollar industries on top of software maintained by people in their spare time, and then we act surprised when a critical vulnerability slips through. The xkcd comic about the Nebraska problem has never been more relevant.

If your organization depends on Log4j — and it almost certainly does — consider this a wake-up call to invest in the open source projects you depend on. That can mean direct funding through platforms like GitHub Sponsors or Tidelift, contributing code reviews, or at minimum running and reporting results from security scanners.

What I’m Implementing This Week
#

I’m not just writing about this — I’m acting on it. Here’s what I’m rolling out across my projects:

  1. SBOM generation in CI/CD: Every build now produces a CycloneDX SBOM alongside the artifact.
  2. Automated dependency scanning: Integrating Grype into the pipeline to check SBOMs against known vulnerabilities on every build.
  3. Dependency hash verification: Enabling Gradle’s dependency verification for all Java projects.
  4. Quarterly dependency audits: Scheduled reviews of the full dependency tree, not just direct dependencies.

My Take
#

Log4Shell is a watershed moment for our industry. Not because the vulnerability itself is unique — it’s a severe RCE, but we’ve had those before. It’s a watershed because it exposed how utterly unprepared most organizations are to answer a simple question: “Are we affected?”

The fact that the answer took days or weeks instead of minutes is a systemic failure. We’ve spent two decades building increasingly complex dependency trees without building the tooling and processes to manage them safely.

I genuinely hope this is the event that makes SBOMs and supply chain security mainstream. Not as a compliance checkbox, but as a fundamental engineering practice. The executive order was a nudge. Log4Shell is a shove. Let’s not wait for whatever comes next to actually start taking this seriously.

The patches will settle, the incident reports will be filed, and the news cycle will move on. What matters is what we build into our processes before the next Log4Shell hits.

Supply Chain Security - This article is part of a series.
Part : This Article

Related