漏洞总结:ChurchCRM IDOR 与权限绕过 漏洞概述 该 Pull Request 修复了 ChurchCRM 中两个关键安全问题: 1. IDOR(不安全的直接对象引用): 接口未进行授权检查,任何已认证用户均可读取任意人员记录。 2. 权限绕过:拥有 权限的用户(及所有权限为 0 的用户)可登录并查看完整的管理 UI(包括所有人员、群组、事件和财务菜单),即使他们不应拥有这些权限。 影响范围 受影响用户:所有拥有 权限且其他权限标志为 0 的用户。 数据泄露:攻击者可访问所有人员记录,包括姓名、家庭信息等敏感数据。 功能滥用:攻击者可访问本应受限的管理功能(如财务、群组管理等)。 修复方案 1. IDOR 修复 在 中添加内联 检查: 用户:可查看任何人员 用户:仅可查看自己的记录 + 家庭成员 其他用户:返回 403 Forbidden 2. 无权限用户拦截 在 中添加 方法,检测无任何功能权限的用户(所有权限标志为 0) 在 中阻止两类代码路径: - API 密钥:返回 403 JSON - 会话认证(MVC 页面):重定向至 在 中阻止遗留 PHP 页面:重定向至 3. 受限访问页面 新增路由 新增模板 :表格样式的欢迎页面,包含: - 验证家庭信息按钮:生成时间受限的用户家庭令牌 - 登出按钮:匹配登录页面样式(无管理界面) - 登录页面样式匹配(无管理界面) 4. 测试基础设施 添加 :创建受限用户(人员 ID 4,家庭 2,仅 EditSelf) 添加 :6 个测试用例 - 登录重定向至 - 显示验证/登出按钮 - 验证链接重定向至 - 登出返回登录页面 - 直接访问仪表板重定向至受限访问 - 受限用户 API 调用返回 403 5. 安全模型变更 6. 风险说明 受影响用户将看到带有家庭验证的“欢迎”页面,而非完整的管理 UI 这是有意为之的设计——这些用户之前已拥有未授权的全部成员数据访问权限 7. 相关 Pull Request 还原:PR #8611(添加人员 API 路由的认证中间件) 跟进:PR #8617(重新设计 EditSelf 权限:自助服务门户)