Skip to content
Back to Blog
·9 min read·news

Log4Shell Revisited: Why Log4j Still Haunts Indian Servers

Log4Shell (CVE-2021-44228) still lurks in Indian servers years after disclosure. Learn why the Log4j RCE flaw persists and how SBOMs stop the next one.

BR

Bachao.AI Research Team

Cybersecurity Research

See If You're Exposed

Business impact of this development

Emerging threats move fast. Indian SMBs are primary targets because they're under-defended. Here's what you need to know and do now.

Log4Shell (CVE-2021-44228) is a remote code execution vulnerability in Apache Log4j 2, the Java logging library used inside a huge share of enterprise and open-source software, disclosed in December 2021 with a maximum CVSS score of 10.0. An attacker sends a single crafted string — often just a request header or a search field — that Log4j logs and, through its JNDI lookup feature, resolves against an attacker-controlled server, loading and executing remote code with no authentication required. More than three years later, Log4j is still shipped inside legacy Java applications, vendor appliances, and forgotten internal tools across Indian enterprises, and unpatched instances are still found and exploited today — making Log4Shell less a closed incident and more a permanent lesson in dependency hygiene.

What Log4Shell Actually Is

Log4j 2 shipped a feature called message lookup substitution: if a logged string contained ${jndi:ldap://...}, the library would treat it as a live lookup instruction rather than plain text, reach out over the network to the specified server, and load a Java class from the response. This was intended for legitimate configuration lookups, but it meant any application logging user-controlled input — a username, a User-Agent header, a search query, an HTTP request path — handed an attacker a direct path from a single text string to arbitrary code execution on the server.

The vulnerability affected Log4j 2.0-beta9 through 2.14.1, a range that covers essentially every production deployment of Log4j 2 running in late 2021, as documented in the NVD entry for CVE-2021-44228. It was fixed in 2.15.0, but that fix was incomplete: follow-on CVE-2021-45046 addressed cases where the initial patch still allowed denial-of-service and, in some non-default configurations, remote code execution (fixed in 2.16.0), and CVE-2021-45105 addressed a separate uncontrolled recursion denial-of-service issue (fixed in 2.17.0). A further remote code execution issue, CVE-2021-44832, exploitable via a maliciously configured JDBC Appender, was fixed in 2.17.1 — the release generally considered the fully hardened patch level. Because the vulnerable code path required no authentication and no user interaction, and because Log4j is embedded three or four dependency layers deep inside countless applications that developers never audited directly, mass internet scanning for vulnerable endpoints began within hours of public disclosure.

🚨
DANGER
Log4Shell requires no valid credentials and no user interaction — a single crafted string logged by a vulnerable application is enough to trigger remote code execution. This is why exploitation attempts began within hours of the December 2021 disclosure, before most organisations even knew they were affected.

Why It's Still Relevant in 2026

Most Indian security teams patched their obvious, internet-facing Log4j deployments in the weeks after the December 2021 disclosure. What didn't get patched — and often still hasn't — is Log4j buried inside dependencies of dependencies: a vendor-supplied monitoring agent, an internal admin tool built years ago and never touched since, a Java-based appliance whose vendor stopped issuing updates, or a transitive dependency pulled in by a build tool that nobody on the current team can name. Log4j's ubiquity inside the Java ecosystem is exactly what made it dangerous in 2021, and that same ubiquity is why residual instances keep surfacing in security assessments years later.

This pattern isn't unique to Log4j. It's the standard lifecycle of a critical, widely embedded open-source vulnerability: an intense wave of patching immediately after disclosure, followed by a long tail of forgotten, indirectly-included, or vendor-locked instances that persist for years. Attackers know this tail exists and continue to scan for it, because the cost of finding one more unpatched Log4Shell endpoint is near zero and the payoff — unauthenticated remote code execution — hasn't changed.

⚠️
WARNING
A dependency you don't directly import can still make you vulnerable. Log4j is frequently pulled in transitively through a logging framework, an application server, or a third-party library, which means a Log4Shell scan of your own source code can miss it entirely unless you inspect the full resolved dependency tree, not just your direct imports.

The Exploitation Path

graph TD A[Attacker sends JNDI payload in input field] --> B[Application logs the string via Log4j] B --> C[Log4j resolves JNDI lookup] C --> D[Remote class loaded from attacker server] D --> E[Arbitrary code executes on server] E --> F[Patch upgrade and mitigate] style A fill:#5f1e1e,stroke:#EF4444,color:#e2e8f0 style B fill:#5f1e1e,stroke:#EF4444,color:#e2e8f0 style C fill:#5f1e1e,stroke:#EF4444,color:#e2e8f0 style D fill:#5f1e1e,stroke:#EF4444,color:#e2e8f0 style E fill:#5f1e1e,stroke:#EF4444,color:#e2e8f0 style F fill:#1e3d2f,stroke:#10B981,color:#e2e8f0

The payload doesn't need to arrive through an obvious channel. Security researchers and incident responders documented the string appearing in HTTP headers, login form usernames, chat messages, device names broadcast over local networks, and even the names of files uploaded to a server — anywhere an application logged attacker-influenced text through a vulnerable Log4j instance. That breadth of entry points is a core reason the vulnerability spread so fast and remains hard to fully eradicate: fixing the obvious web-facing forms doesn't guarantee every logging call site across a large application has been located and checked.

10.0CVSS score assigned to CVE-2021-44228, the maximum possible severity (NVD/NIST 2021)
2.0-beta9 to 2.14.1Log4j 2.x version range affected before the first patch (Apache Log4j Security 2021)
🛡️
SECURITY
CISA added CVE-2021-44228 to its Known Exploited Vulnerabilities catalog and issued emergency directives requiring US federal agencies to patch or mitigate on an expedited timeline — a strong signal of how seriously government cyber authorities treated active, in-the-wild exploitation. Indian organisations running Java-based infrastructure should treat any residual Log4j exposure with the same urgency, regardless of how old the CVE now looks on paper.

Know your vulnerabilities before attackers do

Run a free VAPT scan — takes 5 minutes, no signup required.

Book Your Free Scan

Where Residual Exposure Hides

Exposure sourceWhy it's missedTypical fix
Transitive dependenciesNot in the direct import list; buried several layers deepFull dependency tree scan, not just top-level manifest review
Vendor appliances and OEM softwareOrganisation doesn't control the update cycleVendor patch confirmation, network-level isolation if unpatched
Legacy internal toolsNo active owner, rarely touched, easy to forgetAsset inventory sweep including internal-only systems
Old build artefacts and containersBaked into an image built before December 2021, never rebuiltRebuild and redeploy from a current, patched dependency set
Backup and DR environmentsExcluded from routine patch cycles since they're not "live"Extend patch and scan scope to standby and backup systems

SBOM and Dependency Inventory as the Real Fix

The structural lesson of Log4Shell is that you cannot patch what you don't know you're running. A Software Bill of Materials (SBOM) — a machine-readable inventory of every component and version inside an application, including transitive dependencies — is what turns "was I affected by Log4Shell" from a frantic, manual, days-long exercise into a query you can run in minutes. Organisations with a maintained SBOM in December 2021 were able to identify every affected system almost immediately; organisations without one spent weeks manually grepping filesystems and asking every team to self-report, and many are still finding stray instances today because that manual sweep was never actually complete.

Building an SBOM isn't a one-time exercise tied to a single incident. It needs to be generated automatically as part of the build pipeline, kept current as dependencies change, and queried whenever the next critical library vulnerability is disclosed — because there will be a next one. Log4Shell was severe precisely because Log4j was everywhere; the next critical vulnerability in a widely embedded library will spread through the same blind spots unless the dependency inventory problem is solved structurally rather than repeated ad hoc each time.

Component Exposure Breakdown

Based on documented post-disclosure incident response findings, the largest share of lingering exposure sits in components organisations don't directly control or actively maintain, rather than in code they wrote and own:

pie title Residual Log4Shell Exposure by Component Type "Transitive Dependencies" : 35 "Vendor Appliances" : 25 "Legacy Internal Tools" : 20 "Container Images" : 12 "Backup and DR Systems" : 8

Virtual Patching When You Can't Upgrade Immediately

Not every vulnerable instance can be patched the moment a fix ships. A vendor appliance may not have an available update yet, a legacy application may be too fragile to touch without a full regression cycle, or a change freeze may be in effect. In those cases, a Web Application Firewall (WAF) configured to block the JNDI lookup patterns associated with Log4Shell — the ${jndi: prefix and its common obfuscated variants — provides virtual patching: it doesn't fix the underlying code, but it closes the exploitation path at the network edge until the real fix can be deployed. Virtual patching is a bridge, not a substitute for upgrading Log4j itself, and it should always be paired with a tracked remediation deadline rather than left as a permanent workaround.

💡
TIP
If you inherited a system running an old Log4j version that can't be upgraded on the spot, three interim mitigations work together: disable JNDI message lookups via the relevant system property or environment variable on older 2.x versions, deploy WAF rules blocking known JNDI payload patterns, and restrict outbound network access from the affected server so a successful lookup still can't reach an attacker-controlled host.

Why Old CVEs Keep Biting Indian Organisations

Log4Shell isn't unusual in staying relevant this long — it's representative of how most critical open-source vulnerabilities actually behave over time. Indian organisations that treat vulnerability response as a one-time patching sprint tied to the news cycle, rather than an ongoing inventory and scanning discipline, end up rediscovering the same class of exposure every time a new critical CVE makes headlines, because the underlying gap — not knowing what's actually running in production — was never closed. A free VAPT scan against your live infrastructure will surface exactly this kind of lingering, unpatched component, including old library versions that predate a security team's current tenure.

Bachao.AI builds continuous dependency and vulnerability visibility into its VAPT platform specifically because incidents like Log4Shell keep proving that a single point-in-time audit isn't enough — new instances of old vulnerabilities keep surfacing as infrastructure changes, vendors ship new appliances, and teams inherit systems nobody currently on staff originally built. Dhisattva AI Pvt Ltd designed the platform around that reality: continuous scanning catches the residual Log4j instance that a one-off pentest three years ago never saw, because it didn't exist yet.

🎯Key Takeaway
Log4Shell was never really "fixed" across the industry — it was patched in the systems organisations knew they were running, and it persists in the ones they didn't. The durable defence isn't remembering to patch Log4j specifically; it's maintaining a current SBOM and dependency inventory so the next critical library vulnerability, whatever it's called, can be answered with a query instead of a weeks-long manual scramble.

Next Steps

Log4Shell's technical fix has existed since December 2021, but the organisational fix — knowing what you're running, at every layer of the dependency tree, at all times — is still incomplete across much of Indian enterprise IT, and that gap is exactly what makes a four-year-old CVE still worth writing about. Build and maintain an SBOM, extend vulnerability scans to vendor appliances and backup environments as well as production servers, and treat virtual patching as a documented bridge with a deadline, not a permanent answer.

Want to know whether Log4Shell or another dependency-level vulnerability is still lurking in your infrastructure? Get a free VAPT scan, or browse the blog for more practical security guidance. If your systems process personal data under India's privacy law, also review our DPDP compliance guide.

Frequently Asked Questions

What is Log4Shell and why was it rated CVSS 10.0?
Log4Shell (CVE-2021-44228) is a remote code execution vulnerability in Apache Log4j 2 that let an attacker trigger arbitrary code execution by getting a vulnerable application to log a single crafted string containing a JNDI lookup. It received the maximum CVSS score of 10.0 because exploitation required no authentication, no user interaction, and worked against a library embedded in an enormous share of Java applications worldwide.
Which versions of Log4j were affected and which versions fixed it?
Log4j 2.0-beta9 through 2.14.1 were vulnerable to the original Log4Shell exploit. Apache released 2.15.0 as an initial fix, but follow-on issues (CVE-2021-45046, fixed in 2.16.0; CVE-2021-45105, fixed in 2.17.0; and CVE-2021-44832, fixed in 2.17.1) meant a fully hardened version wasn't available until 2.17.1, so organisations running anything before that should confirm their actual patched version.
Why do organisations still find unpatched Log4j instances years later?
Log4j is frequently pulled in as a transitive dependency several layers deep, embedded inside vendor appliances an organisation doesn't directly control, or running inside legacy internal tools nobody actively maintains. These instances don't show up in a quick source-code review, which is why they persist long after the obvious, internet-facing systems were patched.
What is an SBOM and how does it help with vulnerabilities like Log4Shell?
A Software Bill of Materials is a maintained inventory of every component and version inside an application, including indirect dependencies. With a current SBOM, answering "am I affected by this new CVE" becomes a quick query instead of a manual, organisation-wide search, which is exactly the capability most teams lacked during the initial Log4Shell response.
What is virtual patching and when should Indian organisations use it?
Virtual patching means blocking an exploitation pattern — for Log4Shell, JNDI lookup strings — at a Web Application Firewall or network layer when the underlying software can't be upgraded immediately. It's a temporary bridge for vendor appliances or fragile legacy systems, and should always come with a tracked deadline to apply the real fix, not stand in as a permanent solution.
Is Log4Shell still actively exploited today?
Yes. Because Log4j is so widely embedded, automated scanning tools continue to probe for the JNDI exploitation pattern across the internet, and any newly exposed or newly discovered unpatched instance remains an easy, high-impact target. This is why continuous scanning, rather than a one-time patch cycle, is necessary to catch residual exposure.
BR

Bachao.AI Research Team

Cybersecurity Research

AI-powered security research and threat intelligence from the Bachao.AI team. Covering the latest vulnerabilities, CVEs, and cybersecurity developments affecting Indian businesses.

Get cybersecurity insights for Indian SMBs

Weekly vulnerability alerts, DPDP compliance tips, and security guides. No spam — unsubscribe anytime.

We respect your privacy. Your email is never shared.

Run a free scan — get results in minutes

Free automated scan — risk score in under 2 hours. No credit card required.

See If You're Exposed
Find your vulnerabilitiesStart free scan →