Skip to main content
Log4Shell Still Haunts Production Builds Three Years LaterIncident
3 min readFor Security Engineers

Log4Shell Still Haunts Production Builds Three Years Later

Ongoing Vulnerability Issues

Years after the Log4Shell vulnerability became public, many Log4j downloads still map to vulnerable versions. This isn't about a single breach; it's a systemic failure in managing dependency chains. Despite awareness, public tools, and patches, teams continue to use vulnerable Log4j versions in new builds.

The issue extends beyond Log4j. Many enterprise packages have reached end-of-life, receiving no fixes. Open source vulnerabilities often lack timely scoring, leaving teams without reliable intelligence to prioritize fixes. This breakdown in vulnerability management shows that while risks are known and patches available, vulnerable code persists in production.

Timeline of Events

December 2021: Log4Shell (CVE-2021-44228) disclosed. Apache releases patched Log4j versions.

2022-2023: Security industry updates scanners, publishes advisories, and incorporates Log4Shell checks into compliance frameworks. Organizations begin remediation.

2024: Analysis reveals many Log4j downloads still map to vulnerable versions, not due to lack of patches but failed upgrade processes.

Ongoing: End-of-life software accumulates in dependency graphs. Vulnerability intelligence remains incomplete, limiting visibility into actual risk exposure.

Failed or Missing Controls

Dependency Visibility: Many organizations lack complete inventories of dependencies, especially transitive ones. You can't patch what you can't see. Teams often find Log4j buried deep in dependency trees, pulled in by frameworks they don't directly manage.

Upgrade Readiness: Dependency updates are often treated as technical debt. When Log4Shell hit, teams found they couldn't upgrade Log4j without breaking compatibility. Years of deferred updates compounded the cost of staying current.

Vulnerability Intelligence: Traditional CVE databases are insufficient. Many open source vulnerabilities lack consistent scoring and fix guidance. Teams struggle to distinguish critical exposures from theoretical risks, leading to analysis paralysis or blanket ignore policies.

End-of-Life Tracking: No systematic process exists to identify when dependencies reach end-of-life. Teams unknowingly build on unmaintained code, creating vulnerability debt that can't be resolved through patching alone.

Build-Time Enforcement: Organizations scan production environments but fail to prevent vulnerable dependencies in new builds. The same vulnerable Log4j versions trigger alerts in existing systems and are pulled into fresh deployments.

Relevant Standards

PCI DSS v4.0.1 Requirement 6.3.2 mandates training on secure coding, including dependency management. Your team must understand the risks of using vulnerable or unmaintained libraries.

Requirement 6.3.3 requires identifying and addressing security vulnerabilities. For dependencies, maintain an accurate inventory and have a process to remediate known vulnerabilities within acceptable timeframes.

OWASP Top 10 2021 A06:2021 – Vulnerable and Outdated Components highlights the risk of using components with known vulnerabilities. You're vulnerable if you don't know component versions, if software is unsupported, or if you don't fix or upgrade promptly.

NIST CSF v2.0 ID.AM-2 requires software platforms and applications to be inventoried. This is essential for vulnerability management. You can't manage risks in dependencies you haven't cataloged.

ISO/IEC 27001:2022 Annex A.8.8 addresses technical vulnerability management. Establish a process to obtain timely information about vulnerabilities, evaluate exposure, and take appropriate measures. Track end-of-life dates and vulnerability disclosures across your stack.

These standards require knowing what you're running, tracking its security status, and having processes to address risks. Log4Shell's persistence indicates widespread control failures.

Action Items for Your Team

Build a Comprehensive Dependency Inventory: Include transitive dependencies. Use software composition analysis tools to map the full dependency tree. Update this inventory with every build.

Aggressively Track End-of-Life Dates: Alert when dependencies approach end-of-life. Budget replacement work before support ends. Treat a dependency reaching end-of-life as a P1 issue.

Treat Upgrade Readiness as a Capability: Continuously run test suites against newer dependency versions. Know whether you can upgrade safely before a critical vulnerability drops.

Implement Build-Time Enforcement: Configure your CI/CD pipeline to reject builds with vulnerable dependencies. Make it harder to add technical debt than to maintain currency.

Establish Vulnerability Debt Metrics: Track the age of dependencies, known vulnerabilities, and end-of-life components. Report these alongside traditional security metrics.

Enhance Vulnerability Intelligence Sources: Don't rely solely on NVD. Use vendor advisories, security mailing lists, and project-specific disclosures. Monitor critical dependencies' issue trackers and commit histories.

Create Upgrade Runbooks for Critical Dependencies: Document the upgrade process for sensitive dependencies, including compatibility requirements, test procedures, and rollback plans.

Log4Shell persistence isn't a failure of awareness but of operational capability. Your team likely knows about the vulnerability. The question is whether you've built systems to prevent vulnerable code from reaching production, even when developers aren't focused on security.

Topics:Incident

You Might Also Like