1
asd7160 OP |
2
yazinnnn 2022-03-29 22:18:55 +08:00
啥漏洞能不能说清楚
|
3
0o0O0o0O0o 2022-03-29 22:19:58 +08:00 4
@yazinnnn 这个时间点说清楚违法
|
4
leafre 2022-03-29 22:25:09 +08:00 1
不影响 JDK8 安心了
|
5
yazinnnn 2022-03-29 22:26:16 +08:00
|
6
hingbong 2022-03-29 22:26:34 +08:00 via Android
非长期支持版,有人在生产用?
|
7
gabon 2022-03-29 22:26:34 +08:00 via iPhone
这下有理由把那些老古董升个级了😂
|
8
sagaxu 2022-03-29 22:27:14 +08:00
是 JDK9 还是 JDK9+? JDK9 应该没什么人用了。
|
9
joyhub2140 2022-03-29 22:31:14 +08:00
就问一句 jdk17 受不受影响,不影响就没事!
|
10
sagaxu 2022-03-29 22:32:41 +08:00
|
11
asd7160 OP 不好意思,订正一下,据说是影响 jdk9 以上
|
12
qfdk 2022-03-29 22:42:54 +08:00
还好 我们 gateway 我已经迁移到 nodejs 了,年初把 authserver 也迁移了,现在我们都是在 node.js 上面运行了!暂时不怕了
|
13
Leviathann 2022-03-29 22:44:49 +08:00 7
希望可以加速淘汰 spring ,这么多动态反射操作,又臭又长的各种配置
一个框架还搞个字符串形式的嵌入 dsl ,当时看到就觉得有病 |
14
zydxn 2022-03-29 22:51:05 +08:00
|
16
0o0O0o0O0o 2022-03-29 23:04:30 +08:00 via iPhone
@yazinnnn 都在等一个英雄
|
17
asuraa 2022-03-29 23:19:35 +08:00
啥漏洞啊 好慌啊
|
18
XhstormR02 2022-03-29 23:23:33 +08:00 via Android
|
19
312ybj 2022-03-29 23:24:13 +08:00
Spring Cloud Function SPEL 注入远程命令执行漏洞
排查参考: https://cn-sec.com/archives/853272.html 官方修复: https://github.com/spring-projects/spring-framework/commit/7f7fb58dd0dae86d22268a4b59ac7c72a6c22529 |
20
XhstormR02 2022-03-29 23:24:44 +08:00 via Android
没发现能直接利用的
|
22
XhstormR02 2022-03-29 23:32:43 +08:00 via Android
|
23
binmiui 2022-03-29 23:38:29 +08:00
影响太小了,现在 80%以上的项目都在 jdk8 上
|
24
kernelpanic 2022-03-29 23:39:23 +08:00
几天之前就有公开的 poc 了
https://github.com/cckuailong/spring-cloud-function-SpEL-RCE |
25
Had 2022-03-29 23:39:43 +08:00
@kernelpanic 不是同一个东西啊?
|
26
wbd31 2022-03-29 23:59:40 +08:00
@XhstormR02 如果是这个 RCE 的话,感觉是搞了个大新闻。
Spring 的 SerializationUtils 我看只有开启了 @EnbaleCaching 才有可能用到。 大部分项目应该也都不用 Spring 的 cacahe 。 |
27
justs0o 2022-03-30 00:08:39 +08:00
今天出的是 spring RCE ,不是前几天的 Spring cloud function RCE ,楼上几个别搞混了
|
28
Bingchunmoli 2022-03-30 02:01:58 +08:00
现在公司百分之 90 之上都是 1.7 和 1.8 吧, 最起码应该是个 11.
|
29
Bingchunmoli 2022-03-30 02:02:36 +08:00
@Leviathann 然而真的比其他好用得多,也是一家独大
|
30
Bingchunmoli 2022-03-30 02:06:59 +08:00
只要 1.8 没大的安全问题,万事大吉
|
31
harwck 2022-03-30 05:17:04 +08:00 via Android
上来一张微博截图 剩下全靠编
|
32
xServ 2022-03-30 07:11:34 +08:00 via Android
强烈围观一下!
|
34
chendy 2022-03-30 08:26:29 +08:00
|
35
jzphx 2022-03-30 08:43:11 +08:00
@Leviathann 了解的越多越会发出我艹真妙,我怎么想不到的感叹,你这寥寥几句就要淘汰 Spring
|
36
micean 2022-03-30 08:45:29 +08:00
Spring Cloud Function 没几个项目用吧?
|
38
wolfie 2022-03-30 09:50:20 +08:00
@Leviathann
是个技术都有利弊,不去衡量优缺点,反正就要喷彰显自己的优越感。 |
41
kran 2022-03-30 10:23:17 +08:00 via Android
|
42
kingfalse 2022-03-30 10:32:17 +08:00
quarkus 牵着 micronaut 的小手表示看戏.
|
43
cheng6563 2022-03-30 10:37:15 +08:00
@kran 抛开 Java 很多时候过度设计不说。一开始必用 Spring 的原因是依赖注入带来的事务管理器,之后就是 Spring Boot 简化了一堆配置。
现在直接用原生 Servlet 搭个项目是真的要愁死人。 |
45
qsnow6 2022-03-30 10:39:54 +08:00
|
46
sprite82 2022-03-30 10:41:06 +08:00
这下万年 Java8 的又有不升级的理由了😅
|
47
GuryYu 2022-03-30 10:52:21 +08:00
这个漏洞是说的 SpringBoot 2.6.5 刚刚修复的 “CVE-2022-22950: Spring Expression DoS Vulnerability” 么
|
48
eviladan0s 2022-03-30 11:02:24 +08:00
这个漏洞应该是类似任意文件写入,据说是老漏洞补丁的绕过
|
49
blackshow 2022-03-30 11:03:30 +08:00
Quarkus:😁😁😁😁😁😁😁
|
50
hbsfxlz 2022-03-30 11:18:17 +08:00
@Leviathann 你是还在用 struts 么?开开眼吧,还又臭又长,笑死
|
51
kran 2022-03-30 11:28:14 +08:00 via Android
|
52
lovelynn 2022-03-30 11:37:19 +08:00
凭什么觉得比 log4j 危害更大呢
|
53
XhstormR02 2022-03-30 11:42:39 +08:00 via Android 1
2010-1622 相关
|
54
kylix 2022-03-30 11:52:09 +08:00
这下,坚守 jdk8 更有理由了
(绝不是因为懒) |
55
yuwangG 2022-03-30 12:20:22 +08:00
建议客户使用 PHP
|
56
felixcode 2022-03-30 12:27:11 +08:00 via Android
说了新版本不稳定不可靠吧(幸灾乐祸),jdk8 可以再用十年。
|
57
lr709 2022-03-30 12:27:33 +08:00
怎么又是 java 的
|
58
Bingchunmoli 2022-03-30 13:01:22 +08:00 via Android
@kran 扫包的根本目的,ioc 和 di 怎么不是为了解耦
|
59
Bingchunmoli 2022-03-30 13:02:45 +08:00 via Android
@kran 并没有,大部分情况下一个注解搞定,单理解手写大部分都需要理解很久
|
60
Bingchunmoli 2022-03-30 13:04:08 +08:00 via Android
@kran 如果在 a 类用 b 类的非静态方法你要 new 然而用 spring 后不需要 new 交由 speingioc 管理,而且面向接口直接声明接口即可
|
61
Bingchunmoli 2022-03-30 13:04:41 +08:00 via Android
@kran 外化到配置不理解
|
62
cwyalpha 2022-03-30 13:07:14 +08:00 via iPhone
还是 jdk8 的多
|
63
kran 2022-03-30 13:18:39 +08:00 via Android
@Bingchunmoli 你没看明白或者我没说明白,我上面说的自动装配不是类的自动装配( di ),而是库。另外 ioc 为什么就得扫包?如果必须扫,那其它的 di 框架都是假的,如果不必须,那目的就不完全是 di 。
|
64
Bingchunmoli 2022-03-30 13:30:35 +08:00
@kran spring-framework 是不扫包的,但是你要声明每一个你要用的 bean ,SpringBoot 简化配置,通过扫描的方式,省略繁琐的配置。 一个项目你要用的 100 个类,你要配置 100 个甚至更多的 bean 标签,折磨啊
|
65
kran 2022-03-30 13:31:33 +08:00 via Android 1
@Bingchunmoli 外化到配置确实不是通用语吧,这么说吧,程序员面向接口 /类 /对象编程,在 spring 里面向配置 /注解编程,虽说过于极端,但也是它很突出的一个现象。用 spring 做项目给我感受最大的是离不开搜索引擎(说我菜我肯定认),因为注解和配置打断了我通过 IDE 调试的过程(还是菜),而不用的时候我都可以通过 IDE 和库文档进行下去,几乎不用去搜索。
|
66
Bingchunmoli 2022-03-30 13:31:51 +08:00
@kran DI 肯定是要知道使用的对象和需要注入的对象全类名,构造函数和 setter 方法,如果 IOC 不扫包,这些都是手动配置, 库有自动装配吗。 你是指 SpringBoot 的 starter 吗
|
67
chendy 2022-03-30 13:33:01 +08:00
@kran
1. 既然对 spring 了解不深,那其实很多道理也没法讲清楚。只能说 spring 做得够早够好,抢占了先机,后来的框架虽然有各种优势但是都做不到颠覆,于是大家就还用 spring 2. 事物控制是可以独立使用的,和依赖注入没关系,各种东西自己 new 自己组装也行。事务切面就不用说了是依赖切面的。编程式的事务 api 貌似也有,但是应用场景太少了 3. 编程组装可以,但是东西多了之后编程组装太墨迹了不是么 4. bean 声明之类的外化配置现在没人用了,现在只是把真正的“配置”外化 |
68
kran 2022-03-30 13:35:34 +08:00 via Android
@Bingchunmoli 这个我知道,但是拿 guice 来对比呢?
|
69
Bingchunmoli 2022-03-30 13:35:51 +08:00
@kran 我可以通过规范了解到 spring 的都是 springl 开头,然后都有代码提示,然后也可以点击跳转对应的 Properties 例如 RocketMQProperties
/** * The name server for rocketMQ, formats: `host:port;host:port`. */ private String nameServer; /** * Enum type for accessChannel, values: LOCAL, CLOUD */ private String accessChannel; private Producer producer; 对应名字和注释挺简单的,如果是需要 new 就强耦合了,多数据源多种数据库也会麻烦。 @bean 去注解大部分是为了自定义,SpringBoot 的 starter 默认是可用的(三方做的不一定),为了项目的需求进行一定的替换定制化,如果该类用户代码写了注入容器,Spring 就会取消自己的装配 |
71
newmlp 2022-03-30 13:37:07 +08:00
@kernelpanic 显然不是这个洞
|
72
nothingistrue 2022-03-30 13:37:25 +08:00
现在 Spring Boot 也是滚动更新,J9 以上也是滚动更新。凡是滚动更新,不出漏洞才不正常。当然,对于 Spring Boot ,以及所有库,的滚动更新,如果你写好写全了单元测试代码(相比于只编码,工作量最少加两倍),那你只要一直用最新稳定版本就没事了,漏洞顺手就改,连手动测试都不需要。以上仅限于上层应用框架,JKD 这种底层基础设施,能不升级就别升级,尤其是 J9 以后那狗日的不考虑向后兼容性的滚动升级。
|
74
Bingchunmoli 2022-03-30 13:40:13 +08:00
@kran 例如 redis
官方默认是可用,但是用户想用 json 可视化 @Configuration(proxyBeanMethods = false) @ConditionalOnClass(RedisOperations.class) @EnableConfigurationProperties(RedisProperties.class) @Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class }) public class RedisAutoConfiguration { @Bean @ConditionalOnMissingBean(name = "redisTemplate") @ConditionalOnSingleCandidate(RedisConnectionFactory.class) public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); return template; } @Bean @ConditionalOnMissingBean @ConditionalOnSingleCandidate(RedisConnectionFactory.class) public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { return new StringRedisTemplate(redisConnectionFactory); } } 然后用户配置 @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); RedisSerializer<Object> redisSerializer = getRedisSerializer(); redisTemplate.setKeySerializer(stringRedisSerializer); redisTemplate.setValueSerializer(redisSerializer); redisTemplate.setHashKeySerializer(stringRedisSerializer); redisTemplate.setHashValueSerializer(redisSerializer); redisTemplate.setDefaultSerializer(redisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } @Bean public RedisSerializer<Object> getRedisSerializer() { Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL); /* * 支持 JDK8 LocalDateTime */ om.registerModule(new Jdk8Module()) .registerModule(new JavaTimeModule()) .registerModule(new ParameterNamesModule()); serializer.setObjectMapper(om); return serializer; } 自己的自定义去覆盖。 |
75
Bingchunmoli 2022-03-30 13:42:54 +08:00
@kran guice demo 首先来配置依赖关系。我们继承 AbstractModule 类,并重写 configure 方法即可。在 configure 方法中,我们可以调用 AbstractModule 类提供的一些方法来配置依赖关系。最常用的方式就是 bind(接口或父类).to(实现类或子类)的方式来设置依赖关系。
一个项目,几百类,都要一一绑定吗 |
76
Bingchunmoli 2022-03-30 13:45:09 +08:00
@kran 用户的需求显然是简单更好,而且 java 语言,性能已经不敏感了->
知乎的评论 a: 我们公司的开发框架就是用的这个,但是做很多变动,比如 inject 注解换成了 javax 的,自动扫描 bean ,不用手动标记 singleton ,还没看懂源码是怎么做到的 b: 建议定制的事别搞,不要去学 spring 的 autoscan ,用原生的就挺好了 |
77
Bingchunmoli 2022-03-30 13:46:54 +08:00
@chendy 正解, 有些其他优势是取舍达到的。 其他可能只是填补空缺,有很多三角形理论,只能保证两点,想三点全占不可能
|
78
kran 2022-03-30 13:51:36 +08:00 via Android
@Bingchunmoli 虽然说我很菜,但是这些基础我还是懂的,但是这个过程主要是靠搜索引擎和一些技术文章慢慢积累总结。可以说当时在用 springboot 时,碰到问题去查搜索引擎是第一反应。这种编码上的割裂感前所未有的强烈,也是我不打算再继续深究这个框架的原因。不讨论了。
|
79
kran 2022-03-30 13:53:57 +08:00 via Android
@Bingchunmoli 这个回一下,guice 不是只有这一种用法。
|
80
cxxxxx 2022-03-30 13:57:33 +08:00 1
android 开发者:他们在讨论啥?
|
82
lovelynn 2022-03-30 14:13:24 +08:00 1
spring 全版本 rce 都不一定有 log4j 的危害大。更何况这么多限制的 RCE 。高危漏洞没错,但别动不动就搞过度沸腾
|
83
DrJoseph 2022-03-30 14:36:38 +08:00
一个 jdk 的漏洞附了一条微博的链接,总觉得哪里怪怪的
|
86
cheng6563 2022-03-30 15:18:10 +08:00
@kran 因为三层架构的设计吧。
Web 开发一开始是一个接口 action 直接发起调用数据库返回数据,这样手动开关事务处理一下就行了,问题就是输入输出都是 Http 请求,在后台没法复用。 为了解决代码复用问题,用了分层架构设计,至少用于处理接口的 action 层与处理数据的业务层会分开。 这样又有了新问题,两个都含有开关事务的业务方法相互调用就会出现问题,这时就需要一个事务管理器进行处理。Spring 就是当时最为简练完善的方案了。 当时还有另一个框架,叫做 ejb ,更加烦死个人,Spring 已经是非常轻量。 |
87
null 2022-03-30 16:02:45 +08:00
|
88
mscsky 2022-03-30 17:10:48 +08:00
这次的还没报吧,都没 CVE 号
|
89
cco 2022-03-30 17:34:51 +08:00
等保测评不通知就不改。
|
90
284716337 2022-03-30 18:49:50 +08:00
不影响 JDK8 就安心了
|
91
kernelpanic 2022-03-31 00:43:10 +08:00 1
还有没修复的吗? POC 都出来了哦
https://github.com/mcdulltii/SpringShell_0-day |
92
knives 2022-03-31 08:26:13 +08:00
用楼上的示例,Java11 下无法复现。反序列化到 `class.module.classLoader.resources` 这里就是空值了。
|
96
LinShiG0ng 2022-03-31 11:43:35 +08:00 2
我已经分析完了,这个漏洞危害没那么大 是一个 10 年老漏洞的绕过,目标需要 jdk9 以上版本,项目使用了 spring 框架,且要通过 tomcat 来部署,利用方式是以写日志的形式将恶意代码写进指定路径的指定文件,和 log4j 比差了十万八千里
|
97
LinShiG0ng 2022-03-31 11:44:06 +08:00
https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/ 外网这篇分析文章写的已经很详细了
|
98
yuezk 2022-03-31 13:12:35 +08:00 via iPhone
@LinShiG0ng 这还不大么?
|
99
blindpirate 2022-03-31 13:43:50 +08:00
|
100
XhstormR02 2022-03-31 15:42:07 +08:00 via Android
这个洞还是很局限的 没 log4j 大
|