SuperAPI AI 工具集

sentry-security

安全与审计

查看项目

更新于 10-15 13:59

技能介绍

用途

Sentry Security 是一个专门针对 Sentry 代码库的安全审查技能。它通过检查那些在真实代码库中曾导致过漏洞的模式,来发现 Sentry 代码中的安全漏洞。该技能是 Sentry 专属的,它编码了过去一年中 37 个真实安全补丁所体现的模式,而不是通用的 OWASP 理论。

主要能力

该技能覆盖六类高频漏洞,按过去一年真实补丁的出现频率排序:

  1. 跨组织对象访问(IDOR):最常见漏洞。端点从请求中接受 ID,但未按 URL 中的组织对查询进行范围限定。需追踪每个来自请求的 ID 的完整流程。
  2. 缺失授权检查:端点或序列化器执行敏感操作时未验证用户权限。需检查基类继承、permission_classes 声明、序列化器字段验证以及 Django 视图的登录要求。
  3. 权限提升/角色滥用:用户可分配所有权、修改角色或超出其角色允许范围提升访问权限。需检查 OwnerActorField 与 ActorField 的使用、角色修改端点的角色比较、团队分配成员验证。
  4. 令牌/会话安全:令牌生命周期缺口导致未授权访问。需检查令牌刷新时的应用活跃状态、组织级令牌的 organization_id 验证、成员启用/禁用状态、模拟会话的速率限制。
  5. 输出净化(XSS/HTML 注入):用户可控字符串在邮件、Markdown 或 HTML 中不安全渲染。需检查显示名称、团队名、组织名在邮件模板中的净化,Markdown 渲染的自定义 CSS/HTML 允许情况,format_html() 与字符串拼接,以及对用户输入调用 mark_safe()。
  6. 认证/MFA 缺口:认证状态不一致。需检查移除认证器时恢复码清理、CSRF 令牌跨标签页同步、移除认证因素时会话失效。

使用方式

该技能按以下步骤工作:

步骤 1:对代码分类。确定正在审查的内容并加载相关参考文档:API 端点加载 references/endpoint-patterns.md;序列化器或表单字段加载 references/serializer-patterns.md;邮件模板或 HTML 渲染加载 references/output-sanitization.md;令牌、OAuth 或会话处理加载 references/token-lifecycle.md;角色或权限逻辑加载 references/privilege-escalation.md。如果代码跨多个类别,加载所有相关参考。始终加载 references/enforcement-layers.md,它记录了安全检查在 Sentry 请求生命周期中可以合法存在的位置。

步骤 2:检查前 6 大漏洞类别。按上述六类逐项检查。如果没有任何检查产生潜在发现,停止并报告零发现。不要为了填充报告而编造问题。

步骤 3:追踪完整强制链。对每个潜在发现,端到端追踪完整请求流程,不要停在认证类。依次检查:认证类、权限类、convert_args()、访问模块、处理程序方法、业务逻辑类、序列化器。任何一层的检查都算作强制。在标记为 HIGH 之前,确认检查在所有层都缺失。如果无法确认,标记为 MEDIUM(需要验证)。对于令牌/凭证签发流程,还需检查签发的凭证在使用时是否被阻止,并根据强制范围分类:集中式强制(检查在所有端点继承的权限类中运行)→ 凭证实际无效 → LOW(不报告);分散式强制(仅部分端点或序列化器检查)→ MEDIUM(报告为需要验证)。非 DRF 视图(如 OAuth 视图)是普通 Django 视图,7 层 DRF 模型不适用于视图本身,需检查视图自身的装饰器和处理程序逻辑。

步骤 4:报告发现。报告格式包含:发现编号、标题、严重性、类别、位置、置信度、问题描述、追踪步骤、影响、修复代码。修复建议必须包含实际的强制代码,绝不能建议注释或文档字符串作为修复。

置信度标准

  • HIGH:追踪了流程,确认不存在检查 → 报告并附修复。
  • MEDIUM:检查可能存在但无法确认 → 报告为需要验证。
  • LOW:理论性或在其他地方已缓解 → 不报告。

适用场景

适用于审查 Sentry 的端点、序列化器或视图中的安全问题。当用户提供文件、差异或端点进行安全审查时触发。

限制

该技能是 Sentry 专属的,不适用于其他代码库。它只报告 HIGH 和 MEDIUM 置信度的发现,不报告理论性问题。如果代码没有匹配这些模式的漏洞,空结果就是正确的输出。