Kubernetes DaemonSet,用于对 JVM 进行热修补,以缓解 Log4j2 漏洞(CVE-2021-44228、CVE-2021-45046),通过禁用 JNDI 查找提供临时保护,直至依赖项更新完毕。
该项目将按如下所述逐步弃用。
自2023-01-01起,该项目将不再接受问题反馈,也不会再更新。此后,该项目将不再受支持,不会生成新的版本或相关工件。
项目仓库将于2023-04-01永久归档(设为只读)。
正如原始项目文档中指出的,这始终只是一个临时措施,旨在帮助Kubernetes用户,并且它只提供了针对Log4j2 CVE-2021-44228和CVE-2021-45046安全风险的缓解方案。强烈建议所有Log4j用户更新到已修补版本的项目,以完全消除与这些CVE相关的任何风险。
最新版本的相关发布工件将永久保留,供继续将其部署到Kubernetes环境中的项目消费者使用。具体来说,DaemonSet清单和ECR Public容器镜像将在弃用后继续可用,但不再受支持或更新。
AWS开发了一个RPM,它执行JVM级别的热补丁,禁用Log4j2库中的JNDI查找,以缓解Log4j2 CVE-2021-44228和CVE-2021-45046。
Apache Log4j2 CVE-2021-44228节点代理是一个由AWS Kubernetes团队构建的开源项目。它旨在以DaemonSet方式运行,减轻Log4j2 CVE-2021-44228的影响,该漏洞影响运行Apache Log4j2版本<2.15.0且处理来自不可信源输入的应用。运行此DaemonSet将修补容器内以及主机上运行的JVM。
它的作用: 在每个工作节点上安装一个cron条目,该条目运行一个进程,查找正在运行的JVM并注入一个代理来缓解Log4j2 CVE。所有JVM,包括容器中运行的JVM,都将以这种方式进行热补丁。目前,热补丁进程配置为每30分钟运行一次,并带有15分钟的抖动。有效窗口范围在15到45分钟之间。
注意: 你可以在AWS安全公告中找到关于Log4j2漏洞和AWS响应的更多信息。
注意: 在2022年4月20日,镜像(v0.0.16)已更新了针对Amazon Linux 1和2的最新补丁。如果您之前安装了此DaemonSet的旧版本并且它仍在运行,您应该重新应用daemonset.yaml文件以安装最新的RPM。如果您不再需要log4j补丁,您应该删除DaemonSet并卸载RPM,因为旧版本的RPM(<1.1-16)存在一个漏洞,可能允许攻击者从容器中逃逸并获取底层主机的访问权限。
注意: 版本1.3-5解决了ALAS2-2022-1806和ALAS-2022-1601。有关更多信息,请参见Amazon Linux "log4j hotpatch" <1.3-5 local privilege escalation to root。
kubectl apply -f https://raw.githubusercontent.com/aws-samples/kubernetes-log4j-cve-2021-44228-node-agent/main/daemonset.yaml
抽查单个Pod:
kubectl get pods -l job=node-patch-installer -n node-configuration-daemonset
kubectl logs <pod-name> -c node-patch-installer -n node-configuration-daemonset
或获取每个节点的确认:
kubectl logs -l job=node-patch-installer -c node-patch-installer -n node-configuration-daemonset | grep 'installed'
如果安装成功,日志文件的最后一行将显示installed and verified,否则会记录错误。
daemonset.yaml文件中的DaemonSet spec.template.spec.initContainers.image,将其指向新的URI:tag,然后将清单应用到您的集群。Apache Log4j2 < 2.15.0版本中用于配置、日志消息和参数的JNDI功能未对攻击者控制的LDAP和其他JNDI相关端点提供保护。当启用消息查找替换时,能够控制日志消息或日志消息参数的攻击者可以从LDAP服务器执行任意代码。从Log4j2版本<2.15.0开始,此行为默认已禁用。完整详情请参见CVE公告。
您可以在AWS安全公告中找到关于Log4j2漏洞的更多信息。
AWS开发了一个RPM,执行JVM级别的热补丁,禁用Log4j2库中的JNDI查找,从而缓解适用于主机上JVM以及容器中运行JVM的Log4j2问题。该项目将该RPM打包为Kubernetes DaemonSet。
安装后,在每个工作节点上会运行一个进程,查找正在运行的JVM,并向JVM注入一个代理以缓解Log4j2漏洞。该代理尝试修补所有已加载的org.apache.logging.log4j.core.lookup.JndiLookup实例的lookup()方法,使其无条件返回字符串Patched JndiLookup::lookup()。这旨在无需重新启动Java进程即可解决Log4j2中的CVE-2021-44228远程代码执行漏洞。
默认情况下,该进程配置为每30分钟运行一次,将为尚未使用更新Log4j2依赖进行修补的应用程序提供一层保护。
您可以在AWS开源博客中找到有关热补丁的更多详细信息。
容器镜像托管在aws-containers ECR Public仓库中。