文章总结: 积木报表jimureportv2.5.1存在未授权远程代码执行漏洞,攻击者可绕过签名校验利用Aviator表达式引擎沙箱逃逸执行任意命令,影响默认配置且无需认证。建议立即拦截相关接口、升级Aviator至5.4.4、更换默认签名密钥并持续关注官方补丁。 综合评分: 88 文章分类: 漏洞分析,应急响应,漏洞预警,web安全,安全工具
积木报表 JimuReport v2.5.1 未授权远程代码执行漏洞通报
sspsec sspsec
SSP安全研究
2026年9月4日 17:01 安徽
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
积木报表(JimuReport)是 JeecgBoot 生态下应用广泛的开源报表组件,被大量基于 Java 低代码平台的企业系统所集成。近期,该组件被披露一个影响最新版本的未授权远程代码执行(pre-auth RCE)漏洞。
该漏洞由安全研究员「青山」(Oday实验室 of CCIC / Tanovo)于 2026 年 9 月 3 日发现,并通过 GitHub Issue #4774 向官方完整披露,同时提请官方修复后申请独立 CVE 编号。经确认,漏洞影响 v2.5.1 版本,且在默认配置下即可利用,无需身份认证。
这是继 CVE-2023-4450(FreeMarker 模板注入未授权 RCE)之后,积木报表再一次出现高危安全漏洞,建议相关使用方立即组织排查与处置。
漏洞概况
- 漏洞类型:pre-auth RCE(未授权远程代码执行)
- 影响版本:JimuReport v2.5.1(含默认配置)
- 披露时间:2026 年 9 月 3 日,GitHub Issue #4774
- 核心成因:导出接口签名校验可绕过,用户输入进入 Aviator 表达式引擎并实现沙箱逃逸
- 危害等级:严重,攻击者可以应用运行身份执行任意系统命令
- 临时缓解:升级 Aviator 至 5.4.4、更换默认签名密钥、在网关层拦截相关接口
一、漏洞利用链分析
根据披露信息,攻击者仅需两步 HTTP 请求即可完成利用,全程无需任何账号凭证。整体链路如下:
第一步:绕过签名校验,打通未授权导出接口
积木报表导出接口 POST /jmreport/auto/export/python/plugin 依赖请求头 X-Sign 进行完整性校验。该签名算法存在可伪造性问题,攻击者构造时间戳与对应签名即可绕过校验,直接访问导出逻辑。
第二步:用户输入进入 Aviator 表达式引擎
导出流程沿 autoExport → exportMore → getBaseSql 的调用路径执行,最终将每个 queryParam 的值交由 ExpressUtil.a 进行 eval 求值,即用户可控输入被作为表达式执行。
Aviator 表达式引擎虽设有沙箱机制,但披露者演示了完整的逃逸路径:通过反射修改引擎内部的 functionMissing 处理器与 ALLOWED_CLASS_SET 选项,解除类加载限制,随后借助 java.lang.Runtime 执行任意系统命令。验证过程中,攻击载荷已在目标服务器成功执行。
由于漏洞细节已在 GitHub 公开,且利用载荷结构简单、复现门槛低,在官方补丁发布前,该漏洞存在被大规模武器化利用的现实风险。
二、复现验证与数据包分析
披露者使用默认配置启动 JimuReport(未改动任何代码),即可完整复现漏洞:
默认配置启动 JimuReport v2.5.1
JimuReport v2.5.1 默认配置启动成功,服务监听 8085 端口
第一步数据包:伪造 X-Sign,写入恶意表达式
POST /jmreport/auto/export/python/plugin HTTP/1.1
Host: localhost:8085
Content-Type: application/json
X-Timestamp: 1788508282019
X-Sign: 21664D564D46FF2CB0EB35C6041BD47E
User-Agent: Python-urllib/3.13
{"reportParams":[{"id":"<报表ID>","params":{"p":"=<Aviator 表达式:通过反射修改
instance.functionMissing,加载 JavaMethodReflectionFunctionMissing 处理器,
完整表达式见原始 Issue>"},"exportType":"PDF"}],"exportType":"PDF"}
❝
说明:请求头中的
X-Sign为基于时间戳计算的单次签名值(非固定密钥),配合X-Timestamp即可通过校验;请求体中params.p字段携带以=开头的 Aviator 表达式,随导出流程进入 eval 求值。该步返回 200,报”空对象”错误属预期行为,作用是为第二步的沙箱逃逸铺路。
第一步请求:写入恶意表达式
第一步请求发出后服务端返回 HTTP 200
第二步数据包:解除类限制,执行任意命令
POST /jmreport/auto/export/python/plugin HTTP/1.1
Host: localhost:8085
Content-Type: application/json
X-Timestamp: 1788508282588
X-Sign: 669239958DD82649D4C6F2EEE75ED245
User-Agent: Python-urllib/3.13
{"reportParams":[{"id":"<报表ID>","params":{"p":"=<Aviator 表达式:改写
Options.ALLOWED_CLASS_SET 解除类黑白名单限制,经 java.lang.Runtime.exec
执行系统命令,完整表达式见原始 Issue>"},"exportType":"PDF"}],"exportType":"PDF"}
第二步请求发出后,目标服务器弹出计算器,远程代码执行成立:
第二步请求:成功执行系统命令
第二步请求后,目标机弹出计算器,RCE 复现成功
本文对表达式主体做了脱敏处理,完整 Payload 细节以原始 Issue为准,请勿用于未授权测试。
三、影响范围与危害评估
存在以下任一情况的系统应立即开展自查:
- 项目引入了
jimureport-spring-boot-starterv2.5.1 或相近版本; - 基于 JeecgBoot 及其衍生项目构建,且集成了积木报表组件;
- 积木报表服务暴露于公网,或虽部署于内网但边界防护不足。
漏洞利用成功后,攻击者可以应用运行身份在目标服务器执行任意命令,进而获取源代码与数据库连接信息、窃取业务数据、植入后门或实施内网横向渗透。需要特别指出的是,报表系统通常直连生产数据库,一旦失守,核心业务数据将直接暴露。
从历史情况看,CVE-2023-4450 披露后曾出现大规模扫描与利用行为,大量未及时升级的系统受到影响。本次漏洞同样具备未授权利用条件,攻击面特征与前者高度相似,历史风险模式大概率重演。补丁发布后的 48 小时是风险最高的窗口期,相关单位应提前完成缓解措施。
三、处置建议
第一,紧急止血(建议立即执行)
在 WAF、Nginx 或应用网关层面拦截导出接口 /jmreport/auto/export/python/plugin 的外部访问;同时排查积木报表服务的网络暴露面,非必要服务应先予下线。
第二,升级 Aviator 组件(披露方给出的临时方案)
将 Aviator 依赖升级至 5.4.4 版本,可暂时阻断本次披露的沙箱逃逸路径。
第三,更换默认签名密钥
修改默认的 PRINT_PLUGIN_SIGN_SECRET 配置项。默认密钥不具备实际防护能力,这一点值得所有涉及组件间签名通信的开发团队引以为鉴。
第四,持续跟踪官方补丁并开展日志审计
披露方已明确请求官方修复后申请独立 CVE 编号,建议持续关注 GitHub Issue #4774 及积木报表官方发布渠道,补丁发布后第一时间升级。同时应审计访问日志,重点排查针对导出接口的异常请求(如 User-Agent 为 Python-urllib 的访问记录),确认是否已存在利用痕迹。
五、延伸思考
从本次事件的技术细节出发,有三个工程实践层面的教训值得重视:
其一,表达式引擎的 eval 本质上是一个受限解释器,不应承载安全边界职能。 从 SpEL、OGNL、FreeMarker 到 Aviator,Java 生态中的表达式引擎沙箱逃逸事件反复出现,表明此类组件对安全边界的假设普遍脆弱。任何将用户输入直接提交给 eval 求值的设计,都应默认其可被绕过并预先设置隔离层。
其二,签名校验不能替代身份鉴权。 X-Sign 类防篡改签名解决的是”参数是否被修改”的问题,并不回答”调用者是谁、是否有权调用”。若签名密钥为硬编码或可推导的默认值,该防线实质上不起作用。接口层面的认证与授权永远不可省略。
其三,低代码与报表类组件正在成为新的攻击面聚集区。 报表、表单、流程引擎等组件的业务本质是”将配置作为代码执行”,天然携带代码执行类风险。将此类组件直接部署于公网,等同于将一个功能复杂、更新节奏受限的 Java 应用暴露在互联网环境中,需在架构设计阶段予以规避。
最后需要说明的是,本次披露者以负责任的方式通过官方渠道完整披露了漏洞成因与修复建议,并推动 CVE 申请流程,符合安全社区规范。本文仅基于公开披露信息进行安全通报与防御指导,对表达式主体做了脱敏,不包含完整可用的攻击载荷,相关技术细节请以官方 issue 为准,且不得用于任何未授权测试。
附:排查清单
- [ ] 项目依赖中是否包含 jimureport,版本是否受影响
- [ ] 报表服务是否存在公网暴露
- [ ]
/jmreport/auto/export/python/plugin是否已在网关层拦截 - [ ]
PRINT_PLUGIN_SIGN_SECRET是否仍为默认值 - [ ] 日志中是否存在针对导出接口的可疑请求
官方补丁预计将在近期发布。建议各使用单位在窗口期内先落实缓解措施,并在补丁可用后尽快完成版本升级。
❝
参考资料:GitHub jeecgboot/jimureport Issue #4774(2026 年 9 月 3 日);CVE-2023-4450 相关公开披露。本文仅作安全通报与防御指导之用,不含可用攻击载荷。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:SSP安全研究 sspsec sspsec《积木报表 JimuReport v2.5.1 未授权远程代码执行漏洞通报》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论