SuperAPI AI 工具集

analyzing-code-security

安全与审计

查看项目

更新于 10-15 13:51

技能介绍

用途

该技能用于在用户要求进行安全代码审查时提供可复用的方法论。触发场景包括:分析代码安全问题、检查 OWASP 漏洞、按 CWE Top 25 审查代码等。它面向手动安全代码审查,提供步骤、漏洞分类、推荐检查清单和代码示例参考。

主要能力

  • 识别攻击面:确定入口点,包括 API 端点、消息处理器、文件解析器、面向用户的表单;通过阅读路由定义和控制器注册来构建入口映射。
  • 追踪数据流:从来源到汇点,跟随不可信输入(HTTP 参数、请求头、请求体、文件上传、外部 API 响应)经过所有转换,直到危险操作(数据库查询、命令执行、HTML 渲染、文件系统访问)。
  • 检查信任边界穿越:在数据跨越信任边界处(客户端到服务器、服务到服务、用户输入到数据库),验证是否强制执行了验证、认证与授权。
  • 应用框架检查清单:参考 references/framework-checklists.md 中的 OWASP Web/API 移动 Top 10 和 CWE Top 25,逐一核对适用类别。
  • 对抗式思维:建立假设(如「我可以绕过 SSO」「我可以访问他人的保险库」),再反推使其可利用的条件。
  • 映射 CWE 编号:每个发现都必须包含具体 CWE 标识、代码位置以及使其可利用的数据流。
  • 按实际可利用性分类:区分实际可利用漏洞与理论风险并分别记录,据此排定优先级。

关键漏洞类别

技能列出 Bitwarden 技术栈中最常遇到的类别:

  • 注入(CWE-89、CWE-78、CWE-77):未净化输入到达 SQL 查询、操作系统命令或 LDAP 查询。应使用参数化查询,避免字符串拼接。
  • 访问控制缺陷(CWE-862、CWE-287、CWE-306):缺少授权检查、IDOR、权限提升。需在每个层验证按对象的所有权检查与角色约束。
  • XSS(CWE-79):用户输入未经编码即渲染进 HTML。在 Angular 中,避免对不可信内容使用 innerHTML 和 bypassSecurityTrust*。
  • SSRF(CWE-918):服务器端请求中使用用户可控 URL。应针对主机允许列表进行验证。
  • 不安全反序列化(CWE-502):对不可信输入启用类型处理。避免在 JSON.NET 中使用 TypeNameHandling.All。
  • 路径遍历(CWE-22):用户提供的路径到达文件系统操作。应规范化并基于基准目录进行验证。
  • 加密失败:弱算法、硬编码密钥、可预测 IV。相关批准算法参见 reviewing-security-architecture 技能。

完整的框架检查清单(全部 OWASP 与 CWE 类别)见 references/framework-checklists.md;C#、TypeScript 和 SQL 的正确/错误代码示例见 references/vulnerability-patterns.md。

使用方式

按工作流分步执行:识别攻击面 → 追踪来源到汇点的数据流 → 检查信任边界穿越 → 应用框架检查清单 → 采用对抗式思维形成并反推攻击假设 → 将发现映射到 CWE ID → 按实际可利用性分类。使用时可查阅随附参考文件获取详细清单与代码示例。

对抗式审查思维

安全代码审查中的对抗式思维不同于以增强代码为目标的常规审查。做法包括:

  • 建立假设,例如「我可以绕过 SSO」「我可以访问他人的保险库」「我可以从成员提升为管理员」。
  • 反推攻击成功所需条件,并判断这些条件能否被伪造。
  • 质疑假设:该授权检查是否总会被执行?中间件失败会怎样?令牌格式错误但未失效会怎样?
  • 考虑失败模式:失败时是失败开放(不安全)还是失败关闭(安全)?

核心规则

  • 先认证后授权:先确认用户身份,再检查其被允许做什么。绝不在「内部」端点跳过认证检查。
  • 在信任边界处验证:任何数据跨越信任边界处都必须验证,绝不只依赖客户端验证。
  • 映射 CWE ID:每个发现都必须包含具体 CWE 标识及证据(代码位置和使其可利用的数据流)。
  • 实际优先于理论:区分在本系统中实际可利用的漏洞与理论风险,据此排优先级,但两者都要记录。
  • 检查整条链路:漏洞不只是汇点,要从来源(用户输入)经过所有转换追踪到汇点(危险操作)。若链路被净化打断,则不可利用。

适用场景与限制

适用场景为人工主导的安全代码审查,尤其针对具有明确信任边界和数据流的代码库。资料未提供该技能的自动执行方式、具体命令、依赖环境或安装步骤;也未说明其收费方式、支持平台或版本要求,这些信息暂未提供。参考文件中 C#/.NET、TypeScript/Angular 与 SQL 的示例仅用于说明模式,不代表其他语言或框架同样适用。