介绍
通过反射移除 Interpolator 中的 JNDI lookup,并替换默认的 LoggerContextFactory,以捕获此模组加载后加载的任何 LoggerContext,从而修补 Minecraft Forge 1.7.10 – 1.12.2 的安全漏洞 CVE-2021-44228(也称 Log4Shell)。关于修补方式的更具体技术说明,请参阅源代码。
目前仅适用于 Minecraft 1.12 及更早版本。已在 1.7.10 和 1.12.2 上测试。
兼容性
如果有模组尝试以编程方式调整日志配置,它们会因全面的修补而无法正常工作。为解决此问题,healer 会延后修补,直到这些模组完成配置修改。
截至目前,healer 内置支持以下模组。
- ForgeEssentials
如果其他模组因类似 ClassCastException: cannot cast XXXXXXXX to org.apache.logging.log4j.core.impl.Log4jContextFactory 的日志而崩溃,说明你遇到了这些模组之一。
要解决此问题,请到我的问题反馈区提交反馈,或者在 JVM 启动参数中添加 -Dnet.glease.healer.patch_stage=XXXX,其中 XXXX 可以是 PRELOAD, PREINIT, INIT, POSTINIT 中的任意一个(按时间顺序排列,最早的是第一个)。通常 PREINIT 就足以缓解此问题;POSTINIT 应该能解决所有问题。
致普通玩家
- 如果你的启动器已经应用了此修补,就不需要用这个模组来修补该漏洞。
- 如果你已应用 Mojang 的修复,就不需要用这个模组来修补该漏洞。
- 如果你安装了适用于 1.7 的 FoamFix,就不需要用这个模组来修补该漏洞。
- 如果你使用了其他修复模组,请询问其原作者能否“捕获在该模组之后加载的任何 LoggerContext”。如果可以,你就不需要用这个模组;否则,请用这个模组替换原有模组,或使用会自动应用修补的启动器,例如 MultiMC。
致整合包作者
- 如果你的客户端整合包面向 Minecraft 1.7~1.12.2,我建议将此模组加入其中。这样可以保护尚未了解此漏洞、且恰好使用未应用修补的启动器的玩家。
- 如果你也发布服务端整合包,且它面向 Minecraft 1.7~1.12.2,那么只要你已应用 Mojang 的修复,就不一定需要添加此模组。不过,很多人不会使用服务端整合包附带的 StartServer.bat(或类似脚本),因此他们很可能不会使用 Mojang 修复版的 log4j2.xml。严格来说,你不应分发经过修改的 minecraft_server-1.7.10.jar,所以添加这个 jar 是确保用户获得修复的最直接方式。
常见问题
Healer 支持哪些 Minecraft 版本?
Healer 支持 Minecraft Java 版 1.7–1.12.2,共 35 个版本,可用的加载器:Forge。下载时注意选择和你游戏版本一致的文件。
Healer 怎么安装?
先用 PCL2 或 HMCL 启动器安装对应版本的 Forge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。运行环境:客户端 / 服务端。
评论
登录后评论和评分