LoRexxar's Blog | 信息技术分享
LoRexxar's Blog
马上订阅 LoRexxar's Blog | 信息技术分享 RSS 更新: https://lorexxar.cn/atom.xml
Joern In RealWorld (1) - Acutators + CVE-2022-21724
这个系列会记录我用Joern复现真实漏洞的一些过程,同样也是对Joern的深入探索。
这里我选用Java-sec-code的范例代码做第一部分,这篇文章记录了两个比较经典的漏洞
- Springboot Acutators导致命令执行
- postgreSQL jdbc反序列化漏洞(CVE-2022-21724)
Joern分析Java代码可以选择用代码文件夹也可以选择直接分析jar包
1 | importCode("../../java-sec-code/target/java-sec-code-1.0.0.jar") |
Springboot Acutators配置问题
- https://github.com/JoyChou93/java-sec-code/wiki/Actuators-to-RCE#reference
- https://github.com/LandGrey/SpringBootVulExploit#0x01%E8%B7%AF%E7%94%B1%E5%9C%B0%E5%9D%80%E5%8F%8A%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8%E8%AF%A6%E6%83%85%E6%B3%84%E6%BC%8F
- https://www.veracode.com/blog/research/exploiting-spring-boot-actuators
SpringBoot Actuator是SpringBoot内置的一个监控管理插件。只要引用组件就会开启对应的功能
1 | <dependency> |
开启后SpringBoot 1.x起始路径为/,2.x的起始路径为/actuator
暴露路由本身不能算太大的安全问题,只能说配置不当可能导致信息泄露,可以参spring-boot.txt。
Actuator的接口配合一些组件就可能导致RCE,但防御的方法大多都是对Actuator做鉴权限制。
- Actuators + jolokia
1 | <!-- SpringBoot Actuator命令执行的库 --> |
配合jolokia的接口可以实现jndi注入导致RCE
- Actuators + Spring Cloud
- https://www.freebuf.com/column/234719.html
1 | <dependency> |
首先组件上引用eureka才行,并且Eureka-Client <1.8.7(多见于Spring Cloud Netflix)
其次需要Application要有@EnableEurekaClient注解
1 | import org.springframework.boot.SpringApplication; |
for Joern
我首先遇到的问题就是,这个漏洞其实配置问题大于其他问题,我研究了很久认为这个问题在Joern中是不可解的。
一方面Acutators开启只需要组件引用即可,另一方面比较常见的修复手段是增加鉴权,加入鉴权组件并开启配置
1 | # pom.xml |
哪怕不是用这个鉴权组件但也大同小异,关闭敏感端点之类的。
而问题回到Joern上,Joern虽然定义了ConfigFile节点,但并没有读取所有的配置文件,包括pom.xml。或者说pom.xml在Joern眼中不算是个配置文件。

即便是读取了application.properties这个文件,但ConfigFile节点只有文件内容,并没有对所有的配置做分析转化。而且有时候configFile就是完全空的,也不知道问题在哪。

这个处理方式虽然很奇怪但也算能理解,Joern作为一个静态分析代码的框架,他的理念就是把上层和下层做拆分,下层只需要把代码转成CPG,上层只需要在CPG上做数据分析。
对于Joern来说,上层和下层没有直通渠道,非代码层面的信息则会被忽略掉,而专注于代码层面,这是Joern的设计理念,但同样是Joern的局限性。
- 一方面由于没有pom.xml的数据,所以无法判断Acutators是否开启,且无法判断版本。
- 从SpringBoot 2.X开始,端点默认只暴露health和info,需要从配置文件里获取开启的端点,不一定能读到这个配置文件内容
- Acutators这个问题核心其实是不能未授权+向公网暴露,而这个鉴权配置也是从配置文件里读到的
1 | cpg.configFile.name(".*application.properties").where(_.content(".*management.security.enabled=false.*")).l |
- Acutators暴露的实际影响其实和依赖的组件有关系,比如配合eureka才有xtream反序列漏洞,而没有依赖组件数据,所以也无从判断。
postgreSQL jdbc反序列化漏洞(CVE-2022-21724)
1 | 9.4.1208 <= org.postgresql.postgresql < 42.2.25 |
当PostgreSQL的jdbc...
剩余内容已隐藏