security(api): GET /auth/plugin/datasource/{provider_id} missing edit and RBAC permission decorators

这是 Dify 1.14.2 及 main 分支中一个已确认的权限绕过缺陷,发生在启用了 RBAC 的工作区中,普通成员可通过 GET 请求列出数据源认证凭据而无需数据集编辑或凭证管理权限。优先排查 Dify 的 api/controllers/console/datasets/rag_pipeli

快速结论:这是 Dify 1.14.2 及 main 分支中一个已确认的权限绕过缺陷,发生在启用了 RBAC 的工作区中,普通成员可通过 GET 请求列出数据源认证凭据而无需数据集编辑或凭证管理权限。优先排查 Dify 的 api/controllers/console/datasets/rag_pipeline/datasource_auth.py 文件中 DatasourceAuth.get 方法的装饰器配置。

适用环境:Dify 1.14.2(main 分支),Self Hosted(Docker)部署方式,启用 RBAC 的工作区。

最快修复方案:暂无确认的一步修复方案。已确认需要为 DatasourceAuth.get 方法添加 @edit_permission_required@rbac_permission_required 两个装饰器,但需等待官方补丁或自行修改代码。

注意事项:该修复涉及权限模型,建议在测试环境验证后再部署到生产环境;同时需注意 Issue 中提到的 post 方法使用的是 CREDENTIAL_CREATE,而其他写端点使用 CREDENTIAL_MANAGE,GET 方法应使用哪个权限范围还需维护者确认。

问题场景

在启用了 RBAC 的 Dify 工作区中,管理员或编辑者配置了数据源供应商凭据(如 Jina、Firecrawl)。当以不具有数据集编辑或 credential_manage RBAC 权限的普通工作区成员登录后,调用 GET /console/api/auth/plugin/datasource/<provider_id> 接口,请求会成功返回该供应商的数据源凭据列表。而同端点的 POST 方法(创建凭据)以及该文件中的其他写端点(删除、更新、custom-client、default、update-name)都正确执行了权限校验,返回 403。

报错原文

security(api): GET /auth/plugin/datasource/{provider_id} missing edit and RBAC permission decorators

原因分析

根本原因是权限装饰器遗漏。在 api/controllers/console/datasets/rag_pipeline/datasource_auth.py 文件中,DatasourceAuth.get 方法只声明了 @setup_required@login_required@account_initialization_required@with_current_user@with_current_tenant_id,缺少 @edit_permission_required@rbac_permission_required。在引入 RBAC 功能时,GET 方法没有同步更新以匹配同类的其他端点。

环境排查

  • 确认 Dify 版本是否为 1.14.2 或更新的 main 分支代码。
  • 确认工作区已启用 RBAC 功能。
  • 检查部署方式是否为 Docker Self Hosted。
  • 确认 api/controllers/console/datasets/rag_pipeline/datasource_auth.py 文件中 DatasourceAuth.get 方法的装饰器配置。

解决步骤

  1. 定位 api/controllers/console/datasets/rag_pipeline/datasource_auth.py 文件,找到 DatasourceAuth.get 方法(约第 336 行)。
  2. @with_current_user 装饰器之前,添加缺失的两个装饰器:@edit_permission_required@rbac_permission_required(RBACResourceScope.DATASET, RBACPermission.CREDENTIAL_MANAGE, resource_required=False)
  3. 参考同文件中的其他写端点(如 DatasourceAuth.post)确认装饰器顺序和参数格式。
  4. 在测试环境验证修复效果后,再部署到生产环境。

验证方法

使用普通工作区成员账号(无数据集编辑或 credential_manage 权限)调用 GET /console/api/auth/plugin/datasource/<provider_id>,确认返回 403 Forbidden;以管理员或具有相应权限的用户调用,确认仍能正常返回凭据列表。

参考来源

langgenius/dify #41040

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 19629

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注