CVE-2025-61784CVE-2025-61784是LLaMA-Factory(一个用于大语言模型微调的开源库)在0.9.4版本之前存在的一个高危安全漏洞。该漏洞位于聊天API的`_process_request`函数中,具体路径为`src/llamafactory/api/chat.py`。该函数负责处理传入的多模态内容,包括通过URL提供的图像、视频和音频。
漏洞的核心问题在于,当用户提供一个既不是base64数据URI也不是本地文件路径的URL时,函数会直接使用`requests.get(url, stream=True).raw`发起HTTP GET请求,而没有对URL进行任何验证或过滤。这导致两个严重的安全问题:第一,认证用户可以通过精心构造的URL强制服务器向内部网络或外部任意地址发起HTTP请求,构成服务端请求伪造(SSRF)攻击;第二,攻击者可以利用本地文件路径读取服务器文件系统上的任意文件,构成本地文件包含(LFI)漏洞。
该漏洞的CVSS 3.1评分为7.6分,属于高危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),仅需要低权限认证(PR:L),无需用户交互(UI:N)。在影响方面,对机密性影响为高(C:H),对完整性和可用性影响为低(I:L/A:L)。该漏洞的危害包括暴露内部敏感服务、对内部网络进行侦察扫描、以及与第三方服务进行未授权交互。
该漏洞已于2025年10月7日公开披露,发现者为GitHub安全团队([email protected])。LLaMA-Factory维护团队在版本0.9.4中修复了此问题,建议所有使用受影响版本的用户尽快升级。
该漏洞的技术根源在于`src/llamafactory/api/chat.py`文件中的`_process_request`函数处理多模态内容(图像、视频、音频)时的URL处理逻辑存在缺陷。
具体技术原理如下:
1. **输入处理流程**:当用户通过聊天API提交包含多媒体内容的请求时,函数会遍历请求中的多媒体项目,检查每个项目的URL。
2. **判断逻辑缺陷**:函数首先检查URL是否为base64编码的数据URI格式(如`data:image/png;base64,...`),其次检查是否为本地文件路径(使用`os.path.isfile()`判断)。如果两种情况都不满足,函数直接将URL作为Web URI处理。
3. **SSRF利用**:在没有URL验证的情况下,攻击者可以提供指向内部网络地址的URL,例如`http://127.0.0.1:8080/admin`、`http://169.254.169.254/latest/meta-data/`(云元数据服务)、`http://192.168.1.1/`等。服务器将使用`requests.get(url, stream=True).raw`发起请求,攻击者可以通过响应内容获取内部服务的信息。
4. **LFI利用**:虽然函数检查了`os.path.isfile()`,但攻击者可以通过路径遍历或符号链接等方式绕过检查,读取服务器上的敏感文件如`/etc/passwd`、`/proc/self/environ`等。
5. **缺乏防护措施**:代码中没有实现URL白名单、域名过滤、协议限制(如仅允许https)、IP地址过滤(如阻止私有IP和回环地址)等安全措施。
修复方案在版本0.9.4中实现,主要添加了对URL的严格验证,包括协议白名单、域名/IP地址过滤等安全检查。