1. Minecraft 1.7.x ~ 1.16.5

注意:此版本范围的 Minecraft 使用的 log4j2 版本过低(2.8.1),不支持formatMsgNoLookups开关。因此,添加JVM启动参数或者添加系统环境变量使用最新的 Fabric Loader 的修补方法无效。请使用下文介绍的修补措施。

1.1 适用于 Minecraft 1.7.x ~ 1.16.5 客户端的修补措施

由于 Minecraft 启动器在启动 Minecraft 前会校验资源文件的完整性,因此不能使用 log4j-jndi-finder 直接对 log4j 的二进制文件进行修改。

  1. 可以使用 log4j-patch 对 Minecraft 客户端进行非侵入式修补。 该补丁作为 javaagent 随 Minecraft 加载,将旧版本的 log4j 中存在漏洞的JndiLookup替换为一个空实现。 由于 Minecraft 从不使用 JNDI 或 LDAP,这样做完全不会影响 Minecraft 的正常工作。
  2. 更新 log4j。官方启动器、HMCL、MultiMC、BakaXL、PCL2等启动器均已采取措施,但本文仅检查了 MultiMC,该启动器现在会在运行时将 log4j 版本更新至 2.15.0,这个版本是安全的。 如果您不确定,可以自行查看资源列表,以确定 log4j 版本,或者同时使用方法 1 进行非侵入式修补。

1.2 适用于 Minecraft 1.7.x ~ 1.16.5 服务端的修补措施

有两种修补策略可供选用:

  1. 使用1.1节介绍的 log4j-patch 进行修补。如果您确定没有第三方 MOD 内置了低版本的 log4j ,那么您可以使用此方法安全修补。(例如:没有任何 MOD 加载器的原版服务端)
  2. 使用 log4j-jndi-finder 搜索并移除所有JndiLookup类。该脚本将遍历 Minecraft 服务端目录下的所有.jar文件的内容,查找并移除JndiLookup.java文件。由于 Minecraft 从不使用 JNDI 或 LDAP,这样做完全不会影响 Minecraft 的正常工作。

2. Minecraft 1.17.x 或更新的版本

此版本范围的 Minecraft 使用了较新的 log4j(2.14.1),因此可以通过设置formatMsgNoLookups开关进行修补。

2.1 适用于 Minecraft 1.17.x 或更新的客户端的修补措施

  1. 添加JVM启动参数-Dlog4j2.formatMsgNoLookups=true
  2. 将环境变量FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS设置为true

2.2 适用于 Minecraft 1.17.x 或更新的服务端的修补措施

参考2.1节介绍的措施进行修补。