AstrBot会话枚举授权绕过漏洞CVE-2026-16075
AstrBot 是开源免费、基于 Python 开发的跨平台 AI 智能体机器人框架,本地电脑、云服务器可通过 Docker、pip、桌面程序快速部署。
一、基本情况
AstrBot 是 Python 多平台大语言模型聊天机器人与开发框架,核心是打通各类聊天软件与大模型,快速搭建群聊 AI 助手、自动化工具。
AstrBot 可以一键接入QQ、企业微信、飞书、钉钉、Telegram、Discord 等十多款 IM 软件,并且可同时挂载多个机器人账号统一管理。

AstrBot适合个人AI陪伴、社群智能管理、企业内部知识库客服、办公自动机器人,普通用户开箱即用,开发者可自定义插件二次开发。
栋科技漏洞库关注到 AstrBot在4.25.5及之前版本中存在的会话枚举授权绕过漏洞,已被追踪为CVE-2026-16075,CVSS 3.X评分4.3。
二、漏洞分析
CVE-2026-16075是 AstrBot 会话枚举授权绕过漏洞,OpenAPI聊天域API密钥可通过调用者可控username枚举其他用户网页聊天会话。
该漏洞源于AstrBot因信任调用方提供的 username 而允许持有 chat 作用域 API Key 的远程用户枚举其他用户的 WebChat 会话元数据。
漏洞位于 AstrBot OpenAPI 会话查询逻辑中,由于AstrBot 的 OpenAPI 会话列表接口存在权限校验缺陷所致,
这就使得中间件可正常校验 API Key 合法性并校验 chat 权限,但后续业务逻辑未将请求与该 API Key 所属账号进行绑定。
持有合法 chat 权限 API Key 的任意用户,调用 GET /api/v1/chat/sessions 接口时传入任意用户名即可获取其他用户网页会话元数据。
因此,该漏洞破坏会话所有权隔离机制,造成不同用户间对话元数据泄露。
具体来说,AstrBot pip artifact 4.25.5 及更早版本的 OpenApiRoute.get_chat_sessions
(astrbot/dashboard/routes/open_api.py,GET /api/v1/chat/sessions)从 request.args.get("username") 读取调用方输入,
直接将其作为 get_platform_sessions_by_creator_paginated() 的 creator 条件;
虽然认证中间件已建立 API Key 身份,该函数未将查询绑定到该身份,
攻击者在持有 chat 作用域 API Key 且知道或猜测目标用户名时可读取其会话标识、平台、创建者、显示名及时间戳。
权限校验逻辑拆分问题如下:
# astrbot/dashboard/server.py
g.api_key_id = api_key.key_id
g.api_key_scopes = scopes
g.username = f"api_key:{api_key.key_id}"
但 `OpenApiRoute.get_chat_sessions()` 函数忽略服务端校验出的身份信息,直接信任由攻击者可控的 `username` 查询参数。
username, username_err = self._resolve_open_username(
request.args.get("username")
)
(
paginated_sessions,
total,
) = await self.db.get_platform_sessions_by_creator_paginated(
creator=username,
platform_id=platform_id,
page=page,
page_size=page_size,
exclude_project_sessions=True,
)
这意味着数据库查询所依据的授权主体并非已鉴权的API密钥归属用户,而是调用者在请求中随意传入的任意用户名字符串。
在真实部署环境中,只要知晓或可猜解受害者用户名,任意OpenAPI客户端都能枚举对方的网页聊天会话。
完整验证流程使用本地AstrBot实例(地址http://127.0.0.1:6185)完成复现:
登录后台面板,创建仅具备chat权限的API密钥,通过/api/chat/new_session新建属于受害者的网页会话,随后仅凭借该OpenAPI密钥,
调用/api/v1/chat/sessions?username=dashboard-admin即可读取受害者会话信息。
三、POC概念验证
(一)前置条件
1、AstrBot正常运行,后台面板与OpenAPI服务已开启;
2、攻击者获取到合法、拥有chat权限的OpenAPI密钥;
3、攻击者知晓或可暴力猜解受害者用户名;
4、受害者账号至少存在一条网页聊天会话。
(二)复现步骤
1、下载验证脚本:verification_test.py
管理员已设置登录后刷新可查看2、下载对照测试脚本:control-unrelated-username.py
管理员已设置登录后刷新可查看3、在项目根目录启动AstrBot:uv run main.py
4、执行漏洞验证脚本:python3 verification_test.py
(三)脚本执行流程:
1、调用/api/auth/login完成登录;
2、通过/api/apikey/create生成chat权限API密钥;
3、请求/api/chat/new_session?platform_id=webchat创建受害者会话;
4、发起查询接口:/api/v1/chat/sessions?username=dashboard-admin&page=1&page_size=20&platform_id=webchat;
5、验证返回会话列表中包含受害者会话ID,与后台管理员直接查询接口返回数据完全一致。
(四)执行对照脚本:python3 control-unrelated-username.py
仅将请求参数username修改为无关测试账号unrelated-control-user,接口返回空会话列表,佐证漏洞仅针对有效用户名生效。
(五)最简手动测试请求(生成chat权限密钥后执行)
curl 'http://127.0.0.1:6185/api/v1/chat/sessions?username=dashboard-admin&page=1&page_size=20&platform_id=webchat' -H 'X-API-Key: <YOUR_CHAT_SCOPE_API_KEY>'
(六)取证日志
1、验证取证材料:
dashboard_login_status=200
api_key_create_status=200
victim_session_create_status=200
victim_session_id=11951f73-f2ea-4c50-8295-f655fe709987
owner_session_ids=['11951f73-f2ea-4c50-8295-f655fe709987', '3e5fbd21-265c-4c20-8034-f50e026252d6', 'cda66d57-1303-432b-b972-72711b0cfdd8']
listed_session_ids=['11951f73-f2ea-4c50-8295-f655fe709987', '3e5fbd21-265c-4c20-8034-f50e026252d6', 'cda66d57-1303-432b-b972-72711b0cfdd8']
session_visible_via_dashboard=True
session_visible_via_openapi=True
[DEFECT-CONFIRMED]
2、对照取证材料:
control_list_status=200
control_list_body={'status': 'ok', 'message': None, 'data': {'sessions': [], 'page': 1, 'page_size': 20, 'total': 0}}
victim_hidden=True
[CONTROL-PASS]
(七)漏洞危害
该漏洞属于信息泄露与权限绕过缺陷,影响AstrBot的OpenAPI会话接口。
持有chat权限API密钥的攻击者,传入他人用户名即可枚举其他用户的网页聊天会话。
泄露数据包含会话ID、平台标识、创建人、展示名称、创建/更新时间等敏感元数据。
多用户、共享部署场景下,会造成跨用户数据泄露,同时为后续攻击提供前置条件:
所有接收session_id、username等身份参数的接口均可作为下一步攻击目标。
四、影响范围
AstrBot ≤ 4.25.5
五、修复建议
AstrBot > 4.25.5
六、参考链接
管理员已设置登录后刷新可查看