Bug 描述
触发器管理页面存在权限漏洞:普通用户(非 Owner)可以在触发器页面点击「禁用」按钮,成功禁用其他用户(包括管理员/Owner 创建的触发器)。
复现步骤
- 以普通用户身份登录 Clawith
- 进入触发器管理页面(企业设置或其他入口)
- 找到任意触发器(包括其他用户创建的)
- 点击「禁用」按钮
- 预期:操作失败,提示权限不足
- 实际:操作成功,触发器被禁用
影响范围
- 所有非 Owner 角色的用户都可以操作禁用其他人的触发器
- 恶意用户可以故意禁用关键任务的触发器(如定时备份、监控告警等)
- 违反最小权限原则
修复建议
方案 A:前端权限控制(前端添加判断)
// 禁用按钮只在以下条件同时满足时显示:
// 1. 当前用户是 Owner 角色;或者
// 2. 触发器创建者就是当前用户
const canDisable = isOwner || trigger.created_by === currentUserId;
方案 B:后端权限验证(必须)
# 在 backend/app/api/ 相关的 trigger API 中添加权限校验
async def cancel_trigger(trigger_id: int, current_user: User):
trigger = await get_trigger(trigger_id)
# 只有 Owner 或创建者可以禁用
if not (current_user.is_owner or trigger.created_by == current_user.id):
raise HTTPException(status_code=403, detail="无权限操作此触发器")
推荐
同时实施方案 A 和 B:
- 前端控制:改善 UX,避免用户点击后看到错误
- 后端控制:确保安全,无法通过 API 绕过
附加信息
- 截图显示:触发器列表页面的「禁用」按钮对所有可见用户都可用
- 建议增加操作审计日志,记录谁在什么时间禁用了哪个触发器
Bug 描述
触发器管理页面存在权限漏洞:普通用户(非 Owner)可以在触发器页面点击「禁用」按钮,成功禁用其他用户(包括管理员/Owner 创建的触发器)。
复现步骤
影响范围
修复建议
方案 A:前端权限控制(前端添加判断)
方案 B:后端权限验证(必须)
推荐
同时实施方案 A 和 B:
附加信息