blob: bb28cb1242f28e86c2e2df2acb3c4fd472cef5ae [file] [log] [blame]
---
title: "Apache Ignite 2.11.1: Emergency Log4j2 Update"
author: "Maxim Muzafarov"
date: 2021-12-21
tags:
- database
- ignite
- in-memory
- log4j2
- open-source
- release
---
p
| The new
a(href='https://ignite.apache.org/') Apache Ignite
| 2.11.1 is an emergency release that fixes
a(href='https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228') CVE-2021-44228
| ,
a(href='https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45046') CVE-2021-45046
| ,
a(href='https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45105') CVE-2021-45105
| related to the ignite-log4j2 module usage.
h3#apache-ignite-with-log4j-vulnerability Apache Ignite with Log4j Vulnerability
p All the following conditions must be met:
ul
li
| The Apache Ignite version lower than 2.11.0 is used (since these vulnerabilities are already fixed in 2.11.1, 2.12, and upper versions);
li
| The
code ignite-logj42
| is used by Apache Ignite and located in the
code libs
| directory (by default it is located in the
code libs/optional
| directory, so these deployments are not affected);
li
| The Java version in use is older than the following versions:
code 8u191
| ,
code 11.0.1
| . This is due to the fact that later versions
| set the JVM property
code com.sun.jndi.ldap.object.trustURLCodebase
| to
code false
| by default, which disables JNDI loading of classes
| from arbitrary URL code bases.
p
| NOTE: Relying only on the Java version as a protection against these vulnerabilities is very risky and has not been tested.
<!-- end -->
h3#risk-mitigation-without-upgrading Risk Mitigation Without Upgrading
p
| Please note that all of these cases require a cluster downtime, but we still recommend to upgrade the Apache Ignite.
h4#method-1-removing-the-vulnerable-classes Method 1: Removing the Vulnerable Classes
p
| When using an older Apache Ignite version, it is possible to remove the JndiLookup class from any Java application by
| executing this command:
code find $IGNITE_HOME/ -type f -name "*log4j-core-*.jar" -exec zip -q -d "{}" org/apache/logging/log4j/core/lookup/JndiLookup.class \;
p
| This will recursively find all log4j-core JAR files, starting from the
code IGNITE_HOME
| directory, and remove the vulnerable
| JndiLookup class from them.
h4#method-2-disabling-message-lookups Method 2: Disabling Message Lookups
p
| This method can be used as an additional protection layer in case you suspect not all log4j dependencies have been
| properly updated. If you are using the Apache Ignite of an older version, we recommend to disable message lookups globally
| by setting the environment variable
code LOG4J_FORMAT_MSG_NO_LOOKUPS
| to
code true
| or, alternatively, run the Apache Ignite with
| the
code &dash;Dlog4j2.formatMsgNoLookups=true
| command-line option.
h4#method-3-replace-log4j2-dependency-manually Method 3: Replace log4j2 Dependency Manually
p
| It is still possible to manually replace the Log4j of 2.x version in the Apache Ignite binary distribution to the 2.17.0 Log4j
| version if your log configuration does not imply to use the RoutingAppender. In case the RoutingAppender is used it may produce
| some error messages in a log file at the startup or empty lines during the execution, which are considered as a minor flow,
| however, we do not recommend this mitigation method in this case.