半壁互联网江山都中招!开源软件被曝“十年最重大漏洞”,维护人竟只有3名志愿者
都说开源工具好,bug一来才是真烦恼。
就在前两天,全球知名开源日志组件Apache开源项目Log4j远程代码执行漏洞细节被公开。
编号CVE-2021-44228的漏洞由阿里云安全研究团队发现、于11月底通报Apache基金会的远端程式码执行漏洞。它是Log4j的JNDI API未能验证远端攻击者由恶意LDAP或其他端点发送修改过参数的log讯息,而自LDAP伺服器下载恶意程式码至受害系统执行,最严重可接管整台系统。
尽管美国NIST漏洞资料库并未给定CVE-2021-44228的CVSS 3.1风险值,许多安全厂商皆给出了最严重等级的10分。
Tenable称其为10年最重大漏洞,Cloudflare执行长Matthew Price则说这是Heartbleed、ShellShock以来最严重的漏洞。
该资料库的用户范围涵盖全球,比如苹果iCloud、推特、微软游戏Minecraft及Valve游戏平台Steam等,此外,ElasticSearch、Elastic Logstash、Redis及美国国安局的Ghidra、以及CloudFlare、腾讯、百度等大型网站服务也都使用这项元件。
因此本次受影响范围之大足以想见。
但在本次史诗级漏洞被曝光的背后,还存在一个令人心酸的事实,那就是日常维护Apache Log4j2项目的只有3人。
企业都用的开源日志工具Log4j
在了解整场事件之前,我们先来看看Log4j。
Log4j是一款开源Java日志记录工具,主要用来监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
在强调可重用组件开发的今天,Apache提供的强有力的日志操作包Log4j可以轻松控制log信息是否显示、log信息的输出端类型、输出方式、输出格式,更加细致地控制日志的生成过程,而其通过配置文件可以灵活地进行配置而不需要大量的更改代码。
也就是说,很多互联网企业都可以选择使用Log4j。
2014年,Log4j2发布。作为对Log4j的重大升级,Log4j2完全重写了log4j的日志实现,不仅提供了Logback中可用的许多改进,同时修复了Logback架构中的一些固有问题。
Log4j2也支持SLF4J,可以自动重新加载日志配置,并支持高级过滤选项。此外它还允许基于lambda表达式对日志语句进行延迟评估,为低延迟系统提供异步记录器,并提供无垃圾模式以避免由垃圾收集器操作引起的任何延迟。通过其他语言接口,企业也可以在C、C++、.Net、PL/SQL程序中使用Log4j。
此次漏洞的出现,正是由用于Log4j2提供的lookup功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。但在实现的过程中,并未对输入进行严格的判断,从而造成漏洞的发生。
“微步在线研究响应中心”也复现了该漏洞:
换句话说,如果在打印日志时发现日志内容中包含关键词${,那么这个里面包含的内容会当做变量来进行替换,导致攻击者可以任意执行命令。
由于线上web业务的任何数据都可能写入Log4j,甚至一些pre-auth的地方,比如注册、登录,实际攻击入口取决于业务具体情况。百度搜索、苹果iCloud搜索、360搜索等都出现了不同程度的问题。
只有3位志愿者在维护
在漏洞被发现后,由于应用广泛,想必不少程序员加班都快加疯了,也有人开始埋怨为什么维护人员都没有发现这么危险的漏洞。
这还真不能怪人家。
Apache软件基金会Logging Services的PMC成员Volkan Yazıcı在推特上解释到,此次漏洞是“为向后兼容保留的旧功能”而引发的。
“Log4j维护者一直在为缓解措施而失眠;修复错误、文档和CVE,还要回应他人的询问。即便如此,他们还要遭受许多严厉的批评乃至抨击——哪怕这份工作没有任何酬劳,哪怕这个为了向后兼容而保留的功能我们其实也不喜欢。”
网络安全记者Catalin Cimpanu也表示,Apache Log4j2的维护工作主要由3名志愿者,在业余时间完成。
不少网友,包括Cryptogopher+Go团队安全负责人Filippo Valsorda都忍不住发推呼吁大家“别白嫖”了:
目前,保守估计,能够维护一个大型开源项目的开发人员的市场价格至少是30万美元/年,在GitHub和Patreon上看到的最多1000美元/月。
但也有网友表示,尽管如此,这次的漏洞是因为他们添加了一个错误的、不安全的特性,使得库不适合大多数合理用途,这个bug不是因为缺钱而引起的。
针对此次漏洞,“微步在线研究响应中心”给出了一些应急方案:
- 修改jvm参数:Dlog4j2.formatMsgNoLookups=true
- 修改配置:log4j2.formatMsgNoLookups=True
- 将系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS设置为true
- 检查所有使用了Log4j组件的系统
官方修复链接如下:
https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc1
12月10日, 阿里云安全团队再次发出预警,发现Apache Log4j 2.15.0-rc1版本存在漏洞绕过,建议及时更新至Apache Log4j 2.15.0-rc2版本。
正如网友所言,开源工具面临的困境在于,项目顺利进行时,一切都很好,一旦出现问题,每个人都会抱怨,而且通常抱怨最多的人贡献最少,这就导致那些拥有一些世界上最常用项目的才华横溢的开发人员,几乎没有得到认可。
对于这样的开源现状,你有什么想法,欢迎在评论区留言讨论~
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击