Label Studio访问控制错误漏洞CVE-2026-22033
Label Studio是Heartex开源数据标注工具,允许使用简明UI标记音频、文本、图像、视频和时间序列等数据类型并导出为各种模型格式。
一、基本情况
Label Studio支持多模态数据标注,具备高度可配置界面、ML集成与协作能力,用于大模型微调、CV/NLP/音频场景数据准备模型评估。

Label Studio 一站式多模态数据标注平台,开源数据标注与管理平台兼顾开源自由与企业级可控,适配从个人到团队规模化标注全场景。
栋科技漏洞库关注到Label Studio 1.22.0及之前版本存在访问控制错误漏洞,漏洞被追踪为CVE-2026-22033,漏洞CVSS 4.0评分8.6。
二、漏洞分析
CVE-2026-22033是位于 Label Studio 1.22.0及之前版本存在访问控制错误漏洞,漏洞源于custom_hotkeys功能存在存储型跨站脚本。
该漏洞可能导致经过身份验证的攻击者注入JavaScript代码,进而实现账户接管和未经授权API访问,已被 DCODX-AI 发现并串联起来。
具体来说,这是个存在于 Label Studio 应用程序的 custom_hotkeys 功能中的一个持续存在的跨站脚本(XSS)漏洞,该漏洞影响广泛。
该漏洞导致经过身份验证的攻击者(或能够诱骗用户/管理员更新其custom_hotkeys的人)可以注入JavaScript代码,
当其他用户使用templates/base.html模板加载任何页面时,这些代码会在这些用户的浏览器中执行。
由于应用程序向浏览器暴露一个API令牌端点(/api/current-user/token),且在某些API端点缺乏强大跨站点请求伪造(CSRF)保护。
因此,注入的脚本可能会获取受害者的API令牌或调用令牌重置端点,从而实现完全账户接管和未经授权的API访问。
由于该漏洞影响广泛、利用要求低(仅需经过身份验证的用户)且能够将权限提升到完全账户控制,因此其严重程度极高。
详细来说,在 templates/base.html 文件中,应用程序通过以下 JavaScript 代码片段呈现用户控制的热键配置:
var __customHotkeys = {{ user.custom_hotkeys|json_dumps_ensure_ascii|safe }};
在这里,user.custom_hotkeys通过json_dumps_ensure_ascii函数(位于core/templatetags/filters.py中)进行处理,
该函数执行json.dumps(dictionary, ensure_ascii=False),但不会转义结束的<script>序列或其他危险字符。
由于模板使用了 |safe过滤器,因此输出内容会直接插入到 HTML <script>上下文中,而不会进行进一步转义。
在users/api.py文件中,PATCH接口允许更新custom_hotkeys:
user.custom_hotkeys = serializer.validated_data['custom_hotkeys']
user.save(update_fields=['custom_hotkeys'])
序列化器允许使用< 和 >字符(例如,"</script><script>…"),因此攻击者可以通过PATCH /api/users/{id}/来构造JSON有效负载:
{
"first_name":"poc",
"last_name":"test",
"phone":"123",
"custom_hotkeys":{
"INJ;</script><script>fetch(`/api/current-user/token`).then(r=>r.json()).then(t=>console.log(t.token))</script><script>/*xx":{
"key":"x",
"active":true
}
}
}
当另一位用户使用templates/base.html(例如/user/account/或/)加载页面时,
渲染后的JavaScript会包含被注入的字符串,从而导致原始的<script>标签被关闭,并插入恶意的<script>代码。
由于应用程序公开了/api/current-user/token(在GET中),该路径会返回用户的API令牌,
且该API路径的CSRF保护较为宽松,因此恶意脚本可获取该令牌并将其发送到攻击者控制的端点,从而实现账户接管和进一步的API滥用。
三、POC概念验证
1、登录应用程序
前往登录页面:GET /user/login/
2、(通过API)识别您的用户ID
GET /api/current-user/whoami
在响应JSON中,你将看到你的用户ID(例如“id”:123)。
记下这个ID,以便下一步使用。
3、在PATCH请求/api/users/{id}中注入恶意热键载荷
使用用户API,发送一个PATCH请求来更新您的custom_hotkeys。
示例请求
管理员已设置登录后刷新可查看示例回复
{"id":25,"first_name":"poc","last_name":"test","username":"test","email":"test@dcodx.com","last_activity":"2025-10-24T15:18:18.494398Z","custom_hotkeys":{"INJ;</script><script>fetch(`/api/current-user/token`).then(r=>r.json()).then(t=>alert(t.token))</script><script>/*xx":{"key":"x","active":true}},"avatar":null,"initials":"pt","phone":"123","active_organization":1,"active_organization_meta":{"title":"Label Studio","email":"poc_test_xgd9ce@example.com"},"allow_newsletters":false,"date_joined":"2025-10-24T15:18:18.494532Z"}
4、验证注入的字符串是否持久存在
仍然以您的用户身份登录,前往您的账户页面(例如,GET /user/account/)。
查看包含用户API访问令牌的警报。在实际攻击中,此令牌会被发送到攻击者的服务器
开采影响:
完全接管受害用户账户。
暴露授予内部/外部API访问权限的API令牌。
未经授权的API访问、数据泄露、令牌重置或权限提升。
如果受害者是管理员或特权用户,则系统可能遭受广泛破坏。
受影响者:
所有加载模板且其会话/令牌可通过浏览器访问的用户。
该组织的应用程序和数据。
如果发生跨用户令牌泄露,则可能涉及其他终端用户。
四、影响范围
Label Studio <= 1.21.0
五、修复建议
Label Studio > 1.21.0
六、参考链接
管理员已设置登录后刷新可查看