IPBUF安全漏洞报告
English
CVE-2025-69285 CVSS 6.1 中危

CVE-2025-69285 SQLBot未授权Excel文件上传漏洞

披露日期: 2026-01-21

漏洞信息

漏洞编号
CVE-2025-69285
漏洞类型
未授权访问/数据注入
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
SQLBot

相关标签

未授权访问文件上传数据注入SQLBot认证绕过CVE-2025-69285

漏洞概述

SQLBot是一款基于大语言模型(LLM)和检索增强生成(RAG)技术的智能数据查询系统。该系统在1.5.0之前的版本中存在严重的安全漏洞,攻击者可以利用/api/v1/datasource/uploadExcel端点无需任何认证即可上传恶意的Excel或CSV文件。这些文件会被系统使用pandas库解析,并通过to_sql()方法的if_exists='replace'模式直接写入PostgreSQL数据库,从而实现数据的非法注入和数据库篡改。由于该端点被错误地添加到认证白名单中,导致TokenMiddleware中间件跳过了令牌验证过程,使得整个攻击过程可以在完全未认证的状态下完成。此漏洞可能导致敏感数据泄露、数据库结构被破坏,以及后续的持久化攻击。

技术细节

漏洞根源在于SQLBot系统的认证中间件配置错误。具体问题表现为:1)uploadExcel端点被显式添加到认证白名单中,导致TokenMiddleware对该端点的所有请求跳过令牌验证;2)攻击者可构造包含恶意数据的Excel/CSV文件,通过multipart/form-data方式上传至/api/v1/datasource/uploadExcel端点;3)服务器端使用pandas库的read_excel()或read_csv()函数解析上传文件,随后调用pandas.DataFrame.to_sql()方法将数据写入PostgreSQL数据库;4)to_sql()采用if_exists='replace'参数,会直接删除已存在的同名表并创建新表,攻击者可利用此特性覆盖或破坏现有数据结构;5)由于缺乏输入验证和文件类型检查,攻击者可注入任意SQL语句或恶意数据到数据库中。攻击成功后,攻击者可在数据库中植入后门数据、窃取敏感信息或破坏业务逻辑。

攻击链分析

STEP 1
步骤1
攻击者识别目标系统为SQLBot,并发现/api/v1/datasource/uploadExcel端点存在
STEP 2
步骤2
构造包含恶意数据的Excel/CSV文件,可包含SQL语句或用于覆盖数据库表的数据
STEP 3
步骤3
直接向/api/v1/datasource/uploadExcel端点发送POST请求,上传恶意文件,无需任何认证令牌
STEP 4
步骤4
服务器接收文件后,使用pandas库解析内容,并通过to_sql()方法将数据写入PostgreSQL数据库
STEP 5
步骤5
由于if_exists='replace'模式,攻击者可覆盖现有表或注入恶意数据到数据库中
STEP 6
步骤6
攻击者利用植入的数据进行后续攻击,如提权、窃取敏感信息或破坏业务逻辑

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import pandas as pd import io # Generate malicious Excel file malicious_data = { 'id': [1, 2, 3], 'username': ['hacker', 'admin', 'root'], 'password': ['pwd123', 'admin123', 'root@123'], 'is_admin': [0, 1, 1] } df = pd.DataFrame(malicious_data) # Save to Excel buffer excel_buffer = io.BytesIO() df.to_excel(excel_buffer, index=False) excel_buffer.seek(0) # Target URL url = "http://target-server:8080/api/v1/datasource/uploadExcel" # Send malicious file without authentication files = { 'file': ('malicious.xlsx', excel_buffer, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') } response = requests.post(url, files=files) print(f"Status Code: {response.status_code}") print(f"Response: {response.text}")

影响范围

SQLBot < 1.5.0

防御指南

临时缓解措施
目前没有已知的临时缓解措施可以完全消除该漏洞风险。建议立即升级到SQLBot v1.5.0或更高版本。在升级前,可考虑暂时禁用uploadExcel功能或通过Web应用防火墙(WAF)限制对该端点的访问,同时加强网络层面的访问控制,限制只有授权IP可以访问相关接口。

参考链接

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