颤抖吧 Javaer, log4j 史诗级漏洞

2021-12-10 09:16:39 +08:00
 eviladan0s

漏洞预警: https://mp.weixin.qq.com/s/WBbAthHY36qY0w9e4UUl4Q

本质上是 log4j 里的 lookup 方法存在 jndi 注入(看图): https://adan0s-1256533472.cos.ap-nanjing.myqcloud.com/uPic/20211210091200YOXTYd.jpg

百度、谷歌、苹果的框全都沦陷了: https://adan0s-1256533472.cos.ap-nanjing.myqcloud.com/uPic/202112100913225Wncr7.png

修复措施: 在 log4j2.component.properties 配置文件中设置 log4j2.formatMsgNoLookups=true ,可以暂时缓解避免受漏洞的影响。

之所以是史诗级,是因为不仅 log4j 使用范围广,而且日志数据你不知道流到哪里的 log4j 就会触发

34543 次点击
所在节点    Java
189 条回复
cedoo22
2021-12-10 18:02:16 +08:00
logback 是 spring 默认的日志组件, 所谓的依赖 是只是为了包含 log4j 的功能而依赖它的 API 而已,实现 和 log4j 没啥关系~
cedoo22
2021-12-10 18:02:41 +08:00
spring - boot - starter..
liuxianzhuo
2021-12-10 18:07:15 +08:00
@lis66951735
https://github.com/spring-projects/spring-boot/issues/28958
properties 里增加下面这行就行了
<log4j2.version>2.15.0</log4j2.version>
leonme
2021-12-10 18:07:26 +08:00
@humpy mark
a594195609
2021-12-10 18:09:40 +08:00
@lhwarthas 谢谢!我搜了半天了,就你的看着最靠谱,虽然我还没动手。
shiny
2021-12-10 18:12:42 +08:00
这是创造就业
lis66951735
2021-12-10 18:16:25 +08:00
@liuxianzhuo 感谢感谢!
ves
2021-12-10 18:19:17 +08:00
好奇是谁第一个通报的
yancy0l
2021-12-10 18:57:57 +08:00
网上最新的 log4j2 - 2.15.0 版本,2021/12/10 02:25 分编译的,git 库的 2.15.0-rc2 的 tag 标记的 push 记录时 2021/12/10 02:24 ,所以 网上的 2.15.0 和 rc2 是一个版本。下载地址 https://search.maven.org/search?q=g:org.apache.logging.log4j

该问题 看 git 记录,应该是 2021/07/07 由 mattsicker push 的,只是新增 JDNI 功能,可能考虑不到有 bug 。

最近的一条处理在 2021/12/05 号,由 Ralph Goers* (主要的开发者)一条 Restrict LDAP access via JNDI 的 commit ,提交了对于 LDAP 的一些限制,这个时候,我觉得他们就已经意识到问题。

真正编译出来 2.15.0 和 git 标记 2.15.0-rc2 是今天早上 2 点左右开始改代码的,直接限制了。可以去看 2.15.0 jar 中的 org.apache.logging.log4j.core.net.lookup 方法 catch (URISyntaxException ex) 修改之前是 什么都不做。

个人猜测,从 12/05 开始,就能限制 LDAP 的问题了,但是 昨天事件爆出来之后,他们又处理了一次,直接 catch 了。
kknd22
2021-12-10 19:04:46 +08:00
@kischang 感谢大佬!
quzard
2021-12-10 19:12:50 +08:00
@ves 阿里通报的
leiuu
2021-12-10 19:47:46 +08:00
jdk 1.8.0_181 这个版本测试不能重现攻击
高版本 jndi 默认关闭了吧
manr
2021-12-10 19:59:32 +08:00
早上到公司看到的邮件,11 点领导发话上午就要升级完版本,现在我们组的服务还没发布完
Rorysky
2021-12-10 20:21:22 +08:00
@aguesuka 感动,在 java 甚至打日志都能出大 bug ;
Leviathann
2021-12-10 21:11:32 +08:00
这下真企业级了
2i2Re2PLMaDnghL
2021-12-10 22:36:10 +08:00
@aguesuka 意思是 Apache 全部都不能用了……
@pkoukk 试试运行里面输入这个:(警告:危险操作,请勿在重要环境下尝试) \\.\globalroot\device\condrv\kernelconnect (参考: /t/746010
ryan93
2021-12-10 22:36:37 +08:00
iptables -I INPUT -p tcp -m string --string "jndi" --algo kmp -j DROP;
iptables -I INPUT -p tcp -m string --string "jndi" --algo kmp -j DROP;
ryan93
2021-12-10 22:37:48 +08:00
配置防火墙好像可以限制这个,想知道我用防火墙限制会不会有什么坑
2i2Re2PLMaDnghL
2021-12-10 22:59:38 +08:00
@aguesuka 你 #64 引用的未上升到作者角度,『 purge that library 』
最多从功能角度上认为打 log 根本不需要特别的库,直接 printf 就成。我非常同意,要么你 log 输出就是流(然后用成熟的 unix 方式处理),要么你 log 直接输出结构化的信息(好比 sentry )。logger.error("...") 毫无存在的必要。
我拿 python 的 logging 折腾了半天,最后还不是一股脑丢给 journald 。
2i2Re2PLMaDnghL
2021-12-10 23:02:38 +08:00
@ryan93 不一定只是 jndi ,其他方式也可能触发其他问题,目前暴露的是 jndi 会导致 RCE ,其他也可能导致比如源站 IP 泄漏(通过某个 lookup 使你访问某个网站)。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/821241

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX