大数据文摘出品
都说开源工具好,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版本。
正如网友所言,开源工具面临的困境在于,项目顺利进行时,一切都很好,一旦出现问题,每个人都会抱怨,而且通常抱怨最多的人贡献最少,这就导致那些拥有一些世界上最常用项目的才华横溢的开发人员,几乎没有得到认可。
相关报道:
- https://uk.pcmag.com/security/137653/critical-apache-log4j2-exploit-demonstrated-in-minecraft
- https://www.ithome.com.tw/news/148332
【本文是51CTO专栏机构大数据文摘的原创译文,微信公众号“大数据文摘( id: BigDataDigest)”】