首先我们来简单介绍一下这个漏洞。
Apache log4j2是一款Java日志框架,它可以帮助开发者进行应用程序日志的记录和管理。CVE-2021-44228是Apache log4j2存在的一种远程代码执行漏洞,攻击者通过恶意构造log4j格式的请求,可以在服务器上执行任意代码,从而造成严重后果。
下面我们来具体讲解一下如何复现这个漏洞,并提供修复建议。
复现漏洞
- 下载log4j-core-2.17.0.jar
首先我们需要从Apache官网上下载log4j-core-2.17.0.jar文件,这个版本中已经修复了CVE-2021-44228漏洞。
wget https://mirror.bit.edu.cn/apache/logging/log4j/2.17.0/log4j-core-2.17.0.jar
- 构造恶意请求
我们使用curl模拟一条HTTP请求,并将其作为参数传入java命令中执行。
curl 'http://localhost:8080' -H 'User-Agent: () { :; }; /bin/bash -c "echo vulnerable"' | java -jar log4j-core-2.17.0.jar
如果服务器中安装了受影响的log4j版本,那么此时会在服务器上执行恶意代码,返回一个类似“vulnerable”的字符串,从而证明漏洞存在。
修复建议
Apache已经针对这个漏洞发布了修复版本,建议各位用户尽快升级至2.17.0及以上版本。如果无法立即升级,可将log4j-core的版本临时替换为2.17.0,以避免漏洞被恶意利用。
此外,用户还可以通过以下方式进一步提高服务器的安全性:
- 拒绝从外部源加载任意类,需要在log4j2.xml配置文件中设置为false:
<Configuration>
<Properties>
...
<Property name="log4j2.formatMsgNoLookups">True</Property>
<Property name="log4j2.isThreadContextMapInheritable">True</Property>
</Properties>
<Script name="Test" language="javascript">
<ScriptBody>java.lang.Runtime.getRuntime().exec('calc')</ScriptBody>
</Script>
<Appenders>
<RollingFile name="file_appender" fileName="log.log"
filePattern="log-%d{yyyy-MM-dd}-%i.log">
...
</RollingFile>
</Appenders>
<!-- 这里设置为false -->
<AllowDuplicatedLogMessages>false</AllowDuplicatedLogMessages>
...
</Configuration>
- 移除JMS Appender,避免恶意攻击者通过JMS Appender发送非法代码:
<Configuration>
...
<!-- 移除JMS Appenders -->
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingFile name="RollingFile" fileName="logs/myapp.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="6" modulate="true" />
<SizeBasedTriggeringPolicy size="250 MB" />
</Policies>
</RollingFile>
</Appenders>
...
</Configuration>
以上是针对Apache log4j2-RCE漏洞的攻略说明,在使用前请仔细阅读并评估漏洞对你的系统造成的威胁。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Apache log4j2-RCE 漏洞复现及修复建议(CVE-2021-44228) - Python技术站