CVE-2026-60090 — PraisonAI before 4.6.78 fails to validate the...
🔴 【深度分析】严重安全漏洞:CVE-2026-60090
CVSS 评分: 严重(9.3)🔴 状态: Deferred 发布时间: 2026-07-11
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-60090 |
| CVSS 评分 | 9.3 🔴 |
| 严重程度 | 严重 |
| CVSS 向量 | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X |
| CWE 分类 | CWE-89 |
| 发布时间 | 2026-07-11 |
| 最后更新 | 2026-07-14 |
| 状态 | Deferred |
| 数据来源 | disclosure@vulncheck.com |
好的,作为一名资深网络安全分析师,我将基于您提供的 NVD 数据,为您生成一篇专业的漏洞深度分析文章。
CVE-2026-60090 深度分析:PraisonAI 向量数据库组件中的 SQL/CQL 注入漏洞
⚠️ 严重漏洞警告
CVE ID: CVE-2026-60090
CVSS 评分: 9.3 (Critical)
CVSS 向量:CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X
危害等级: 严重 (Critical)
漏洞概述
CVE-2026-60090 是一个存在于 PraisonAI 框架中的严重注入漏洞,影响 4.6.78 之前的所有版本。该漏洞位于 PGVector 和 Cassandra 知识库组件的数据集合创建功能中。由于对用户提供的 dimension(维度)参数缺乏严格的运行时类型和内容验证,攻击者可以构造恶意的 SQL 或 CQL 语句片段,并将其注入到后端数据库执行的建表语句中。成功利用此漏洞,攻击者能够在未授权的情况下,对底层数据库进行任意 SQL/CQL 操作,包括读取、篡改或删除敏感数据,从而实现完全的数据泄露和系统破坏。
该漏洞的 CVSS 4.0 评分为 9.3(严重),其向量特征表明:攻击者可通过网络远程触发(AV:N),且攻击复杂度低(AC:L),无需任何权限(PR:N)和用户交互(UI:N)。一旦利用成功,将直接导致机密性、完整性和可用性的完全丧失(VC:H/VI:H/VA:H)。尽管环境指标未定(E:X),但漏洞本身的攻击面非常理想,风险极高。
受影响组件与版本
- 受影响产品: PraisonAI
- 影响范围: 所有低于 4.6.78 的版本
- 受影响组件:
PGVector和Cassandra知识库后端的create_collection()函数。 - 修复版本: 4.6.78 或更高版本。
漏洞原理分析
该漏洞属于经典的 SQL 注入(CWE-89) 类型,但其注入点位于数据库的 DDL(数据定义语言)语句中,而非传统的 DML(数据操作语言)语句。
技术成因深度解析:
不完整的输入验证: 分析表明,PraisonAI 框架在设计
create_collection()接口时,对部分参数(如schema,keyspace,collection-name)进行了验证,以防止注入。然而,开发者完全疏忽了对dimension参数的检查。虽然该参数在接口定义中声明为int类型,但在 Python 等动态语言中,这种声明并未在运行时强制执行。攻击者可以轻易地提交一个字符串值来代替整数。危险的字符串拼接(DDL 场景): 在
PGVector和Cassandra的后端实现中,dimension参数的值被直接拼接到用于创建向量集合的 SQL/CQL 语句中。典型的建表 DDL 可能类似于CREATE TABLE some_collection (..., embedding vector(%s) ),而%s处直接插入了用户提供的dimension值。注入向量与攻击流程:
- 当攻击者提供的
dimension值为3); DROP TABLE tenant_secrets; --时,最终执行的 SQL 语句可能变为:CREATE TABLE some_collection (..., embedding vector(3); DROP TABLE tenant_secrets; --) ); 3):闭合了vector(函数。;:在大多数数据库(如 PostgreSQL)中,这表示当前语句的结束。DROP TABLE tenant_secrets;:引入了一条新的、恶意的 SQL 语句,用于删除名为tenant_secrets的表。--:这是一个 SQL 注释符,用于忽略掉原始语句中vector()函数右括号之后的任何部分,从而避免语法错误,保证恶意语句顺利执行。
- 当攻击者提供的
影响评估
- 攻击复杂度(低): 攻击者无需任何特殊权限,仅需通过正常的 API 调用接口发送一个特制字符串即可。CVSS 向量中的
AC:L和PR:N充分说明了这一点。 - 所需权限(无): 漏洞利用不依赖于任何已有的用户账户或会话。只要攻击者能够访问到
create_collection()接口,即可发起攻击。 - 利用条件(简单): 目标必须运行受影响版本的 PraisonAI,并对外暴露了
PGVector或Cassandra知识库的创建功能。这是常见的配置场景。 - 潜在后果(灾难性): 由于可以执行任意 SQL/CQL 语句,攻击者可以实现:
- 数据窃取(机密性): 通过
UNION SELECT或INSERT INTO...SELECT等方式,将敏感数据库表(如用户凭据、API 密钥、业务数据)的内容窃取出来。 - 数据篡改(完整性): 修改任何表中的任何数据,导致业务逻辑错误、欺诈或数据污染。
- 数据删除/破坏(可用性): 执行
DROP TABLE、TRUNCATE TABLE或DELETE语句,彻底摧毁数据库中的数据和服务。更严重的情况下,攻击者可能DROP DATABASE或SELECT pg_sleep()进行拒绝服务攻击。 - 权限提升与横向移动: 如果数据库用户权限较高(这很常见),攻击者可能进一步利用数据库功能(如
COPY ... TO PROGRAM在 PostgreSQL 中)实现操作系统命令执行,从而控制整个服务器。
- 数据窃取(机密性): 通过
修复建议
1. 立即升级(首选方案)
PraisonAI 官方已在 4.6.78 版本中修复此漏洞。建议所有受影响用户立即升级至该版本或更高版本。
pip install praisonai>=4.6.78
升级后,请重启所有相关服务以确保补丁生效。
2. 临时缓解措施
如果无法立即升级,可考虑以下临时措施:
- 输入严格校验: 在应用程序入口处(如 API 网关或 WAF)对
dimension参数进行强制验证。- 类型校验: 确保其值必须是一个合法的整数。
- 范围限制: 将其限制在一个合理的数值范围内(例如,
1到4096)。 - 正则校验: 使用正则表达式
^[0-9]+$确保只包含数字。
- 最小权限原则: 审查用于连接
PGVector和Cassandra的数据库账户权限。务必撤销这些账户对任何敏感数据表的DROP、ALTER、TRUNCATE权限,并仅授予其运行、插入、查询向量数据所必需的最小权限。例如,可以仅授予对特定 schema 或 keyspace 中特定表的INSERT,SELECT权限。 - 使用参数化查询(预编译语句): 理想情况下,即使是 DDL 语句,也应尝试使用参数化接口。虽然 DDL 场景下不如 DML 常见,但现代数据库驱动(如 psycopg2 的
sql模块)允许安全地处理标识符和字面量,应尽可能避免字符串拼接。PraisonAI 的修复方案大概率采用了此方法。
参考资料
- CVE 官方页面 (NVD): https://nvd.nist.gov/vuln/detail/CVE-2026-60090
- CWE-89: SQL Injection:
https://cwe.mitre.org/data/definitions/89.html - PraisonAI 项目地址: (假设为 GitHub 或其他,请根据实际项目地址替换)
- 安全公告/修复 commit: (此部分需要查询真实项目历史才能提供链接,目前数据不足以提供具体链接)
- NVD 数据来源: disclosure@vulncheck.com