跳转到主要内容

关于 Log4j2 CVE-2021-44228 的 Minecraft Java 版解决方案

本文撰写于 2021 年 12 月 10 日,部分描述可能已过期。

Apache Log4j2 中发现远程代码执行漏洞,Log4j2 的 2.0 - 2.15.0-rc1 版本均受此漏洞影响; Log4j 1.x 也受此影响。

Minecraft Java 版 1.7 至 Minecraft 1.18-rc2 也受此漏洞影响。
Minecraft Java 版 1.18.1 及以上版本不受影响。

更新1:又爆出了 CVE-2021-45046,Log4j2 2.15.0 受此漏洞影响。
更新2:又有未公开漏洞了 Log4j2 2.16.0 受此漏洞影响。

Apache Log4j2 是什么


Apache Log4j2 是一款非常优秀的 Java 日志框架,它在各种 Java 应用中被广泛使用,比如我们常玩的 Minecraft。

简单来说就是用来记录日志的东西。


漏洞描述


此次漏洞是由于 Log4j2 提供的 lookup 功能造成的(不全是),该功能允许开发者通过 JNDI、LADP 等协议或接口去读取相应环境中的配置。但在实现的过程中,并未对输入进行严格的判断,从而造成漏洞的发生。

只要使用了org/apache/logging/log4j/spi/AbstractLogger.java 进行日志记录,且 log 等级为可记录等级即可触发。
一旦在 log 字符串中检测到${},就会解析其中的字符串尝试使用 lookup 查询,因此只要能控制 log 参数内容,就有机会实现漏洞利用。

详细信息请访问:https://nvd.nist.gov/vuln/detail/CVE-2021-44228https://www.lunasec.io/docs/blog/log4j-zero-day/

更新:CVE-2021-45046 发现 Apache Log4j 2.15.0 中针对 CVE-2021-44228 的修复在某些非默认配置中不完整。当日志配置使用非默认模式布局和上下文查找(例如,$${ctx:loginId})或线程上下文映射模式( %X、%mdc、%MDC)使用 JNDI 查找模式制作恶意输入数据,从而导致拒绝服务 (DOS) 攻击。默认情况下,Log4j 2.15.0 将 JNDI LDAP 查找限制为 localhost。

详细信息请访问:https://nvd.nist.gov/vuln/detail/CVE-2021-45046

简单来说

只要日志写入了 ${jndi:ldap://网址} 这段话,电脑就会访问该网址,从而执行该网址上的程序。
Minecraft 聊天框中发送的内容也会被记录到日志文件中。


影响范围


使用 Log4j2 的 2.0 - 2.15.0-rc1 版本的程序均受影响;Log4j 1.x 也受此影响。
一些有名的应用有:Apache Solr、
Apache Flink、Apache Druid、Apache Struts2、srping-boot-strater-log4j2、ElasticSearch、flume、dubbo、Redis、logstash、kafka。

更新使用 Log4j2 的 2.15.0 版本的程序均受影响。


Minecraft 相关组件的影响范围

Minecraft 客户端与服务端:1.7 至 1.18-rc2 的所有版本
1.7 之前的版本不受此影响,1.18-rc3、1.18.1 已修复此漏洞。
Forge、Fabric、Waterfall 等第三方组件也受此影响。

如果你游玩原版单人游戏则不受影响。
Vanilla singleplayer is safe in any version. If you’re unsure of if you’re affected, *do not play multiplayer*.

更新CVE-2021-45046 对原版 Minecraft 或 Spigot 没有影响,因为它们不使用受影响的功能。
There is no impact to Vanilla Minecraft or Spigot as they do not use the affected feature.

通用解决方案


更新 Apache Log4j2 至 2.15.0-rc2 及以上版本(2.15.0)。
更新:Apache Log4j2 至 2.16.0 及以上版本。

又有新漏洞了,最好更新至 2.17.1 及以上版本。

通用缓解方案

Log4j2 2.10.0 及以上版本可以在 Jvm 启动参数中加上 -Dlog4j2.formatMsgNoLookups=true-Dlog4j.formatMsgNoLookups=true

其他版本可以在 log4j2.component.properties 配置文件中添加 log4j2.formatMsgNoLookups=True 以及log4j.formatMsgNoLookups=True
更新这些缓解措施(例如将系统属性“log4j2.noFormatMsgLookup”设置为“true”)并不能缓解 CVE-2021-45046。

可以通过从类路径中删除 JndiLookup 类(例如:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup),可以在 2.16.0 之前的版本中中缓解 CVE-2021-45046。


Minecraft 解决方案


客户端

通用缓解方案

1.在你的启动脚本中添加 JVM 参数 -Dlog4j2.formatMsgNoLookups=true-Dlog4j.formatMsgNoLookups=true 来进行缓解。
仅对 1.16 及以上版本有效。 此方法对 CVE-2021-45046 无效。

2.更新你的 Java 到最新构建,新版本 Java 对各种非法使用有一定抵抗。


正版启动器

如果你使用官方正版启动器玩原版,那么不用担心,Mojang 已进打上补丁了。联网重启几次启动器即可。
We deployed a new config file for log4j.)通过配置文件禁用 Log4j2 的某个模块。


第三方启动器

第三方启动器可能不会自动下载 Mojang 提供的补丁。
HMCL:
更新至 3.4.210 及以上版本即可;下载地址
PCL2:更新至 2.2.7 及以上版本即可;下载地址
BakaXL:更新至 3.1.0.2 及以上版本即可;下载地址
MultiMC:不需要更新启动器,联网重新启动启动器并运行每个实例,运行过的实例会自动安装新版 Log4j2 ;详情下载地址

其他未提及的启动器一般都以通过更新解决,请更新您的启动器至最新版本。

启动器的修复可能不是那么靠谱,如果你游玩模组,那么建议同样进行下面的措施。


Forge 客户端

Forge 已对 1.12.2 及以上的主要版本提供修复。
具体修复版本为:
1.12.2 - 14.23.5.2856
1.13.2 - 25.0.222
1.15.2 - 31.2.56
1.16.5 - 36.2.20
1.17.1 - 37.1.1
1.18 - 38.0.17

以上版本请在启动器中更新你的 Forge 至列出及以上版本,或是至官网手动下载并安装更新。
更新 Forge 可能造成一些奇怪的模组无法运行,你也可以查看下面的模组修复方式。

Forge 模组

1.7.10 至 1.12.2 版本可以安装此模组来进行修复:https://github.com/Glease/Healer
Healer-1.1.0.jar 支持 1.7.10 至 1.12.2 的所有版本,此补丁不会显示在模组列表中。

1.7.10 也可以安装 FoamFix 1.0.0 (1.7.10) 此版本能够缓解 Log4j 格式化漏洞。

其他版本:暂无


Fabric 客户端

Fabric Loader 0.12.9 已修复此问题。
请在启动器中更新你的 Fabric Loader 至列出及以上版本,或是至官网手动下载安装器并安装更新。
你可能还需要更新 Fabric API 来配合新版本的 Loader。
更新 Fabric Loader 可能造成一些奇怪的模组无法运行,你也可以查看下面的模组修复方式。

Fabric 模组

1.16.5 可以安装此模组来进行修复:https://github.com/ChloePrime/fix4log4j

其他版本:暂无



服务端

请牢记:即使你在服务端修复了这个漏洞,未修复漏洞的玩家客户端也会受此漏洞影响;请提醒您的玩家采取措施。

通用缓解方案

1.在你的启动脚本中添加JVM 参数 -Dlog4j2.formatMsgNoLookups=true-Dlog4j.formatMsgNoLookups=true 来进行缓解。
仅对 1.16 及以上版本有效。 此方法对 CVE-2021-45046 无效。

2.更新你的 Java 到最新构建,新版本 Java 对各种非法使用有一定抵抗。


原版服务端

此解决方案由 Mojang 提供,理论上也适合其他服务端

1.18:如果可能,升级到 1.18.1。如果不行,请使用与 1.17 相同的方法。

1.17:在你的启动脚本中添加如下 JVM 参数:
-Dlog4j2.formatMsgNoLookups=true

1.12 至 1.16.5:下载 此文件 到你的服务器的工作路径。然后在你的启动脚本中添加如下 JVM 参数:
-Dlog4j.configurationFile=log4j2_112-116.xml

1.7 至 1.11.2:下载 此文件 到你的服务器的工作路径。然后在你的启动脚本中添加如下 JVM 参数:
-Dlog4j.configurationFile=log4j2_17-111.xml

1.7 以下的版本不受影响(真的吗)。


Forge 服务端

Forge 已对 1.12.2 及以上的主要版本提供修复。
具体修复版本为:
1.12.2 - 14.23.5.2856
1.13.2 - 25.0.222
1.15.2 - 31.2.56
1.16.5 - 36.2.20
1.17.1 - 37.1.1
1.18 - 38.0.17
建议使用最新版本,后续可能仍有更新;相关漏洞太多,就不继续列出相关版本了。

以上版本请到官网下载并手动更新你的 Forge 至列出及以上版本。
更新 Forge 可能造成一些奇怪的模组无法运行,你也可以查看下面的模组修复方式。

Forge 模组

1.7.10 至 1.12.2 版本可以安装此模组来进行修复:https://github.com/Glease/Healer
Healer-1.1.0.jar 支持 1.7.10 至 1.12.2 的所有版本,此补丁不会显示在模组列表中。

1.7.10 也可以安装 FoamFix 1.0.0 (1.7.10) 此版本能够缓解 Log4j 格式化漏洞。

其他版本:暂无


Fabric 服务端

Fabric Loader 0.12.9 已修复此问题。
以上版本请到官网下载并手动更新你的 Fabric Loader 至列出及以上版本。
你可能还需要更新 Fabric API 来配合新版本的 Loader。
更新 Fabric Loader 可能造成一些奇怪的模组无法运行,你也可以查看下面的模组修复方式。

Fabric 模组

1.16.5 可以安装此模组来进行修复:https://github.com/ChloePrime/fix4log4j

其他版本:暂无


Spigot 服务端

Spigot 团体已为 1.8.8 及以上主要版本提供修复。
请使用你的 BuildTools 构建新版本服务端。
具体修复版本为:
1.8.8 (BuildTools rev 582-a)
1.9.4 (BuildTools rev 849-a)
1.10.2 (BuildTools rev 986-a)
1.11.2 (BuildTools rev 1251-a)
1.12.2 (BuildTools rev 1573-k)
1.13.2 (BuildTools rev 2148-d)
1.14.4 (BuildTools rev 2502-c)
1.15.2 (BuildTools rev 2703-a)
1.16.5 (BuildTools rev 3096-a)
1.17.1 (BuildTools rev 3284-a)
1.18 (21 年 12 月 10 日之后的所有版本)
1.18.1(所有版本)
请使用最新版本,后续仍然有更新;相关漏洞太多,就不继续列出相关版本了。

以上版本请到官网下载 BuildTools 手动构建并更新你的 Spigot 服务端至列出及以上版本。
其他版本可以尝试安装插件:https://github.com/caoli5288/log4j2jndiinterceptorhttps://github.com/ChloePrime/fix4log4j
支持 1.8 至 1.16 的所有版本。


Paper 服务端

目前 PaperMC 团队仅对 1.16.5、1.17.1、1.18 版本提供修复。   sulu5890 给每个版本都更新了,好耶。
具体修复版本为:
1.8.8 (2894af0)
1.9.4 (d77c69f)
1.10.2 (303f32a)
1.11.2 (fddeb57)
1.12.2 (e39995d)
1.13.2 (e5dbeaf)
1.14.4 (6f03c0a)
1.15.2 (9a521c3)
1.16.5 (#794)
1.17.1 (#404)
1.18 (#108)
请使用最新版本,后续仍然有更新;相关漏洞太多,就不继续列出相关版本了。

以上版本请到官网下载并更新你的 Paper 服务端至列出及以上版本。
尚不清楚 Paper 是否会为 1.16.5 以下的旧版本更新构建,也许你需要自己构建
其他版本可以尝试安装插件:https://github.com/caoli5288/log4j2jndiinterceptorhttps://github.com/ChloePrime/fix4log4j
此插件支持 1.8 至 1.16 的所有版本。



服务端代理

Bungeecord

不受此漏洞影响。

Waterfall

已于 1.18 (#474) 修复。
请到官网下载并更新你的服务端代理至列出及以上版本。
请使用最新版本,后续仍然有更新;相关漏洞太多,就不继续列出相关版本了。

Velocity

已于 Velocity 3.1.1 (#110) 修复。
请到官网下载并更新你的服务端代理至列出及以上版本。
请使用最新版本,后续仍然有更新;相关漏洞太多,就不继续列出相关版本了。