KubeSphere 对 Apache Log4j 2 远程代码执行最新漏洞的修复方案
近期
Apache Log4j 2 被爆出存在漏洞
漏洞现已公开
Apache Log4j 2 是一款开源的日志记录工具,被广泛应用于各类框架中。本文为 KubeSphere 用户提供建议的修复方案。
此次漏洞是由于 Log4j 2 提供的 lookup 功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。但在实现的过程中,并未对输入进行严格的判断,从而造成漏洞的发生。由于大量的软件都使用了 Log4j 2 插件,所以大量的 Java 类产品均被波及,包括但不限于 Apache Solr、srping-boot-strater-log4j2、Apache Struts2、ElasticSearch、Dubbo、Redis、Logstash、Kafka...更多组件可以参考 Log4j 2 相关文档 [1] 。
受影响的 Log4j 版本为 Apache Log4j 2.x < 2.15.0-rc2。目前官方发布了 Apache 2.15.0-rc2 版本对该漏洞进行了修复,但是该版本并非正式发行版,故存在不稳定的因素,如要升级建议对相关数据进行备份。
同时,也提供了三种方法对漏洞进行补救,为
-
将系统环境变量
FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS
设置为true
-
修改配置
log4j2.formatMsgNoLookups=True
-
修改 JVM 参数
-Dlog4j2.formatMsgNoLookups=true
以下三种解决方法,您可以任选其中一种进行参考。
方法一:修改系统环境变量
由于 KubeSphere 默认使用了 ElasticSearch 收集日志,所以也应该在 KubeSphere 修改相应的配置来对漏洞进行修复。以下说明如何在 KubeSphere 中进行相应的操作对 ElasticSearch 进行修复。
将系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS
设置为 True,为此,我们需要修改 ElasticSearch 的 Yaml 文件,因为它是一个 StatefulSet 文件,所以需要进行如下修改:
kubectl edit statefulset elasticsearch-logging-data -n kubesphere-logging-system
kubectl edit statefulset elasticsearch-logging-discovery -n kubesphere-logging-system
在这两个 Yaml 文件中插入环境变量设置:
env:
- name: FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS
value: "true"
方法二:修改 Log4j 2 配置
另外,您也可以修改配置 log4j2.formatMsgNoLookups=True
,您可以执行如下命令:
kubectl edit configmaps elasticsearch-logging -n kubesphere-logging-system
然后插入上面所提到的配置:
log4j2.properties: |-
status=error
appender.console.type=Console
appender.console.name=console
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=[%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n
rootLogger.level=info
rootLogger.appenderRef.console.ref=console
logger.searchguard.name=com.floragunn
logger.searchguard.level=info
# 插入此行
log4j2.formatMsgNoLookups=true
注意:
-
修改后请注意相关配置是否挂载进去,如果没有挂载进去,请重启 Pod。
-
如果您将 KubeSphere Logging 组件重新安装,ks-installer 可能会导致该 ConfigMap 的配置被重置,需要再参考方法二手动配置一遍,或者采取方法一,设置系统环境变量
FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 为 true
。
方法三:修改 ElasticSearch 的 JVM 参数
除了上述两种方法,您还可以选择在 KubeSphere 集群中的 ElasticSearch 添加配置文件,单独配置 JVM 参数,详见 ElasticSearch 公告声明 [2] 。
相关参考
-
关于 Apache Log4j 2 远程代码执行最新漏洞的风险提示:https://itsc.nju.edu.cn/7a/42/c41947a555586/page.htm
-
Artifacts using Apache Log4j Core:https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/usages?p=1
年度 Office Hours 活动等你来!——本周六
引用链接
Log4j 2 相关文档: https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/usages?p=1
ElasticSearch 公告声明: https://discuss.elastic.co/t/apache-log4j2-remote-code-execution-rce-vulnerability-cve-2021-44228-esa-2021-31/291476
关于 KubeSphere
KubeSphere (https://kubesphere.io)是在 Kubernetes 之上构建的 开源容器混合云 ,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。
KubeSphere 已被 Aqara 智能家居、爱立信、本来生活、东软、华云、新浪、三一重工、华夏银行、四川航空、国药集团、微众银行、 杭州数跑科技、 紫金保险、去哪儿网、中通、中国人民银行、中国银行、 中国人保寿险、中国太平保险、中国移动、中国电信、天翼云、 中移金科、Radore、ZaloPay 等海内外数千家企业采用。KubeSphere 提供了开发者友好的向导式操作界面和丰富的企业级功能,包括 Kubernetes 多云与多集群管理、DevOps (CI/CD)、应用生命周期管理、边缘计算、微服务治理 (Service Mesh)、多租户管理、可观测性、存储与网络管理、GPU support 等功能,帮助企业快速构建一个强大和功能丰富的容器云平台。
:sparkles: GitHub :https://github.com/kubesphere
:computer: 官网(中国站) :https://kubesphere.com.cn
:man::computer: 微信群: 请搜索添加群助手微信号 kubesphere
- 云原生爱好者周刊:这款支持全平台的 Podman Desktop 值得一试
- 使用 Notification Manager 构建云原生通知系统
- 云原生爱好者周刊:这款支持全平台的 Podman Desktop 值得一试
- OpenFunction 成为 CNCF 沙箱项目,使 Serverless 函数与应用运行更简单
- 云原生爱好者周刊:KubeSphere 3.3.0 Alpha 版发布
- 云原生爱好者周刊:KubeSphere 3.3.0 Alpha 版发布
- 混合多云时代数据保护难在哪?
- 中科金财区块链平台容器化最佳实践
- Client-go 源码分析之 SharedInformer
- 云原生爱好者周刊:寻找 Netlify 开源替代品
- 在 KubeSphere 中监控集群外部 Etcd
- 云原生爱好者周刊:寻找 Netlify 开源替代品
- Fluent Operator:云原生日志管理的一把瑞士军刀
- Fluent Operator:云原生日志管理的一把瑞士军刀
- Fluent Operator:云原生日志管理的一把瑞士军刀
- 作为一名成熟的云原生布道师,我是这么写作的
- K8s 安全策略最佳实践
- 云原生爱好者周刊:Grafana 开源 Prometheus 长期存储项目 Mimir
- 云原生爱好者周刊:Grafana 开源 Prometheus 长期存储项目 Mimir
- 云原生爱好者周刊:谁开发的软件,谁负责运维