[漏洞修复] Guardian组件关于Apache Log4j 2 远程代码执行漏洞的修复方案

  漏洞信息
内容纲要

概要描述

Apache Log4j2是一个基于Java的日志记录工具。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,由安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。

截至2021/12/20,已经披露漏洞包括:

· CVE-2021-44228 : 影响版本为 log4j2 <= 2.14.1
· CVE-2021-45046 : 影响版本为 log4j2 <= 2.15.0
· CVE-2021-45105 : 影响版本为 log4j2 <= 2.16.0

星环科技部分产品使用到了该组件,本文主要围绕 Guardian 组件 进行漏洞修复具体说明。

详细说明

一、影响范围

受影响的组件 受影响的组件的版本
Guardian >= transwarp-5.2.0
&& >= guardian-3.1.0

5.2.0至3.1.2版本,只有cas受影响
3.1.2及以后版本,cas 和 guardian server 都受影响

二、漏洞信息收集

参考如下命令,分别获取不同角色的log4j版本信息

# Guardian Server
$ kubectl exec -it $(kubectl get pods -o wide |grep -i guardian-server-guardian|grep Running|head -1|awk '{print $1}') -- find /usr/lib/guardian/lib -name 'log4j*'

# Cas-config
$ kubectl exec -it $(kubectl get pods -o wide |grep -i cas-config-server-guardian|grep Running|head -1|awk '{print $1}') -- jar -tvf /usr/lib/configuration-server/configuration-server.war |grep log4j|awk '{print $NF}'|sort -u

# Cas-server
$ kubectl exec -it $(kubectl get pods -o wide |grep -i cas-server-guardian|grep Running|head -1|awk '{print $1}') -- jar -tvf /usr/lib/cas-server/cas-server.war |grep log4j|awk '{print $NF}'|sort -u

# Cas-admin
$ kubectl exec -it $(kubectl get pods -o wide |grep -i cas-admin-server-guardian|grep Running|head -1|awk '{print $1}') -- jar -tvf /usr/lib/cas-admin-server/cas-admin-server.war |grep log4j|awk '{print $NF}'|sort -u

三、漏洞修复方案

通过升级Guardian相关镜像内的log4j2依赖版本至2.17.0可以解决该漏洞。漏洞影响镜像包括:

  • guardian server
  • cas server
  • cas admin server
  • cas config server

下面分别针对不同镜像提供修复方案。

注:不同版本角色安装默认推荐可能不同,建议根据具体现场安装环境选择下载对应的Patch包(如guardian-3.1.3以上版本默认不安装cas-admin-server, 则不必须打上该Patch包)。

3.1 guardian server

guardian server 在guaridian-3.1.2版本之前版本使用的是log4j1,不受该漏洞影响,3.1.2及更高版本可通过下述方案完成修复,

可通过Patch-guardian-server-log4j2-202112201110.tar.gz 「点击下载」 放置到任意一个guardian server节点完成自动升级(TDH一般会安装2个guardian sever角色,只需要执行一次脚本即可),详细操作见Patch内README;

md5: c778b90bd265762796db80660bffa3c8

3.2 cas server

可通过Patch-cas-server-log4j2-202112201110.tar.gz 「点击下载」 放置到cas server节点完成自动升级,详细操作见Patch内README;

md5: 5e6bed6f50e6b5b956ad0493592ed72d

3.3 cas admin server

可通过Patch-cas-admin-server-log4j2-202112201110.tar.gz 「点击下载」 放置到cas admin server节点完成自动升级,详细操作见Patch内README;

md5: 175d080aee20bbeccd5e89dbe968f0f4

3.4 cas config server

可通过Patch-cas-config-server-log4j2-202112201110.tar.gz 「点击下载」 放置到cas config server节点完成自动升级,详细操作见Patch内README;

md5: 469e0a0d5d7b36b00c7f4dad32f6cbf7

注: 上述Patch打完之后,需重启对应角色;也可在所有相关Patch打完之后整体重启Guardian组件。


举例:以guardian 3.1.0版本的 cas-server 角色为例:

解压Patch-cas-server-log4j2-202112201110.tar.gz文件,可以获得脚本及使用说明

README使用说明介绍:

# Patch使用指南
## 简述
Patch主要应用于镜像间的更新与升级。因此,其基于两个版本的image,即source image与target image,
通过将patch打入source image即可完成向target image转换的过程。

## 操作步骤
1.修改image.conf文件
image.conf中配置了source image与target image的name与tag,确保配置与现场image信息一致
注:配置中source image与target image一致时,会自动备份source image【格式:-backup】

2.执行image更新脚本buildImage.sh
执行buildImage.sh脚本,脚本执行完成后将完成image的更新并push仓库,重启服务后即可应用更新后的image

参考命令:
$ ./buildImage.sh

下面我们参考上述步骤进行操作

# step1.修改image.conf
## 需修改成tos registry节点和对应的tos.registry.port参数值(一般默认为5000端口)
$ cat image.conf 
# config base image of Dockerfile,such as xxx_image=172.16.1.99/transwarp/argodb-inceptor:argodb-1.1.0-final
base_image=tdh60201:5000/transwarp/cas-server:guardian-3.1.0-final
# config new name:tag of Dockerfile
new_image=tdh60201:5000/transwarp/cas-server:guardian-3.1.0-final
# step2.执行image更新脚本buildImage.sh
$ ./buildImage.sh 

执行完脚本之后重启对应角色(manager页面重启cas server,或者后台删除pod的方式重启),即可完成cas-server角色的修复。


BTW, 如有任何相关或其他问题需要解决或需要进一步说明,请立即通过微信「星环科技服务号」公众号提交工单,我们将竭诚为您服务!

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。