谷歌开源洞察团队详解Apache Log4j漏洞造成的广泛影响

上周五,谷歌开源洞察团队在官方安全博客上发表了一篇文章,详细介绍了 Apache Log4j 漏洞对行业造成的广泛影响。James Wetter 和 Nicky Ringland 指出,超过 35000 个 Java 包、占总数 8% 以上的 Maven 中央存储库,尤其让我们对其留下的隐患感到担忧。

1.png

(来自:Google Security Blog)

据悉,这些漏洞允许攻击者利用 Log4j 日志库已被广为人知的不安全 JNDI 查找功能来执行远程代码。糟糕的是,这项功能在许多版本中都被默认启用。

自 12 月 9 日披露以来,Log4j 漏洞因其严重性和广泛影响,而引起了信息安全生态系统的高度关注。毕竟作为一款流行的日志工具,它已被数以万计的软件包(Java 里的 Artifacts)和项目所使用。

由于用户对 Log4j 的传递依赖项缺乏足够的远见,这不仅使得我们很难确定零日漏洞的影响范围、相关修复工作也变得相当困难。

2.png

期间,Google 开源洞察团队调查了 Maven 中央存储库中的 Java 工件的所有版本,最终将范围缩小到了基于 JVM 语言的开源生态系统,同时密切追踪事态的发展。

截至 2021 年 12 月 16 日,该团队发现来自 Maven Central 的 35863 个可用 Java 工件,有依赖于受影响的 log4j 代码。

这意味着,仅 Maven Central 平台上超过 8% 的软件包,都至少有一个版本受此漏洞的影响。

若放眼整个生态系统,漏洞威力更是不容小觑(Maven Central 的平均影响为 2% / 中位数低于 0.1%)。

直接受影响的依赖项,约占这部分工件中的 7000 个,意味着它们的任何版本都被 Log4j-core 或 Log4j-api 所波及(完整列表可见 CVE 漏洞披露公告)。

此外大多数受影响的工件,都来自间接的依赖项,即它们是作为传递依赖项而被牵扯进来的。

3.png

至于当前开源 JVM 生态系统的修复进展,若工件中至少有一个版本受到了影响,且发布了一个不受漏洞波及的更稳定版本,谷歌开源洞察团队就将之视作已修复。

比如受 Log4j 漏洞影响的工件已更新到 2.16.0、或完全剔除了对 Log4j 的依赖。庆幸的是,Log4j 维护者和更广泛的开源社区对此问题的响应是相当迅速的,并且付出了切实的巨大努力。

截止博客发表时,团队统计到了将近 5000 个已被修复的项目。至于剩余的那 30000 个工件,其中许多依赖于另一个工件。在传递依赖被修复前,暂时只有一刀切来阻止。

4.png

对于 Java 生态系统来说,修复难度主要体现在工件的互相连接。首先,依赖链越深,漏洞修复所需的步骤就越繁杂(超过 80% 软件包的深度都超过了一级)。

其次,依赖算法和需求规范中的生态系统级选择约定,也为事件埋下了较大的伏笔。在 Java 生态系统中,开发者的通常做法是指定软件版本方面的“软”要求(假设没有其它版本的相同包出现在依赖关系图中)。

此类修复通常需要维护人员采取更加明确的行动,以将依赖需求更新为修补后的版本。这种做法与其它生态系统形成了鲜明的对比,例如在 npm 软件包上,开发者通常会为依赖项指定敞开的范围。

最后,对于整个生态系统需要耗费多少时间来完成漏洞修复,目前也很难评估。在查看了所有公开披露的影响 Maven 包的关键建议中,我们发现只有不到一半(48%)得到了修复。

不过在 Log4j 方面,事情还算是相当积极的。不到一周后,就有 4620 个受影响的工件(约 13%)得到了修复。剩下的工作,仍需全球开源维护者、信息安全团队和广大用户付出巨大的努力。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注