tencent cloud

文档反馈

Apache Log4j2 远程代码执行漏洞公告

最后更新时间:2022-05-16 12:15:40

    漏洞描述

    近日,腾讯云关注到 Apache Log4j2远程代码执行漏洞被公开,Log4j2中存在 JNDI 注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,利用此漏洞可以在目标服务器上执行任意代码。具体漏洞信息请参见 Apache Log4j2远程代码执行漏洞风险紧急告警

    漏洞影响

    在弹性 MapReduce 服务中 flink、hive、ranger、 presto、 oozie 、knox 、 storm 、druid 等组件有受此漏洞影响。请受影响的用户可参照以下方案进行修复。

    解决方案

    替换 log4j2的包为安全版本。 受影响版本:Apache log4j2 2.0 ~ 2.15.0-rc1。 安全版本:Apache log4j2-2.17.1正式版。

    修复命令

    1. 标准 EMR 目录修复命令。
    wget https://image-repo-gz-1259353343.cos.ap-guangzhou.myqcloud.com/user-patches/common/fix-log4j2.sh -O fix-log4j2.sh && bash -x fix-log4j2.sh /usr/local/service
    2. 运行任务时缓存目录中 jar 修复。
    确保提交的任务里面没有问题 jar,否则下次提交的任务还会缓存。
    直接删除目录下的问题 jar。
    /data/emr/yarn/local/filecache/
    /data/emr/yarn/local/usercache/
    /data1/emr/yarn/local/filecache/
    /data1/emr/yarn/local/usercache/
    /data2/emr/yarn/local/filecache/
    /data2/emr/yarn/local/usercache/
    上述只列出了3块数据盘的情况,其中/data 后面跟的数字为数据盘索引,需要把全部数据盘的/data 目录下对应文件进行清理。
    3. 非标准目录(非/usr/local/service 目录)修复,执行命令。
    EXTRA_DISRUPTOR_DIR=/path/to/other bash fix-log4j2.sh /path/to/other
    4. 其他场景修复。 升级该漏洞相关的6个jar包:log4j-api、log4j-core、log4j-jul、log4j-slf4j-impl、log4j-web 和 disruptor。如果没有上述的某个包,则无需替换。

    重启服务与灰度修复

    1. 对集群的某台机器执行修复。
    重启这个节点上的服务 flink、spark、hive、ranger 、 presto 、oozie、storm、impala、knox、druid。
    重启各个常驻任务,flink 任务,storm 任务,spark 任务。
    2. 此节点重启服务验证没问题后,再执行其他节点的修复。

    修复原理

    1. 将修复后的6个 jar 放在执行目录的 fix-log4j 目录下。
    2. 查找待修复目录,修复6个 jar 包,发现则替换,未发现不会替换,会同时替换 tar.gz 以及 war 包中的对应问题 jar,以及 hdfs 上/user/hadoop/share 路径下的缓存包。
    替换其中的 log4j-api,log4j-core,log4j-jul,log4j-slf4j-impl,log4j-web 2.0~2.17.1 为2.17.1版本。
    替换其中的 disruptor-3.4.2.jar 以下的版本为3.4.2版本,注意 disruptor 仅对部分组件替换。

    服务有问题回滚步骤

    需要将问题 jar 包拷贝回去,并删除添加的最新 jar 包。
    1. 解压备份文件。
    cd fix-log4j2
    tar zxvf rm_if_no_need_to_rollback.tar.gz.1639576622
    其中1639576622为临时生成的时间戳,需找到对应文件进行解压。
    2. 将备份文件拷贝回去。
     cp -r ./root/fix-log4j2/emr_fix_log4j_bak_10812_1639576622/usr/local/service/* /usr/local/service/
    其中10812_1639576622 为执行时临时生成的数字,需找到对应文件进行复制。
    3. 删除添加的 log4j 系列最新 jar 包。
    find /usr/local/service/ -name log4j-api-2.17.1.jar | xargs -n1 -I{} rm -f {}
    find /usr/local/service/ -name log4j-web-2.17.1.jar | xargs -n1 -I{} rm -f {}
    find /usr/local/service/ -name log4j-jul-2.17.1.jar | xargs -n1 -I{} rm -f {}
    find /usr/local/service/ -name log4j-slf4j-impl-2.17.1.jar | xargs -n1 -I{} rm -f {}
    find /usr/local/service/ -name log4j-core-2.17.1.jar | xargs -n1 -I{} rm -f {}
    4. 如果是其他目录/path/to/other 的回滚,则将/usr/local/service/替换为/path/to/other。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持