🔴 【深度分析】严重安全漏洞: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(数据操作语言)语句。

技术成因深度解析:

  1. 不完整的输入验证: 分析表明,PraisonAI 框架在设计 create_collection() 接口时,对部分参数(如 schema, keyspace, collection-name)进行了验证,以防止注入。然而,开发者完全疏忽了对 dimension 参数的检查。虽然该参数在接口定义中声明为 int 类型,但在 Python 等动态语言中,这种声明并未在运行时强制执行。攻击者可以轻易地提交一个字符串值来代替整数。

  2. 危险的字符串拼接(DDL 场景): 在 PGVector 和 Cassandra 的后端实现中,dimension 参数的值被直接拼接到用于创建向量集合的 SQL/CQL 语句中。典型的建表 DDL 可能类似于 CREATE TABLE some_collection (..., embedding vector(%s) ),而 %s 处直接插入了用户提供的 dimension 值。

  3. 注入向量与攻击流程:

    • 当攻击者提供的 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 的修复方案大概率采用了此方法。

参考资料