SuperAPI AI 工具集

sharp-edges

安全与审计

查看项目

更新于 10-16 02:44

技能介绍

用途

sharp-edges 用于评估 API、配置和接口是否对开发者误用具有抵抗力。它关注的重点不是实现层面的 bug,而是设计层面的“陷阱”:当开发者走最容易的那条路时,会不会自然地写出不安全的代码。资料将其概括为“成功之坑”(pit of success)原则——安全用法应当是最省力的用法。如果开发者必须理解密码学、仔细阅读文档、或记住特殊规则才能避免漏洞,那么这个 API 设计就是失败的。

它适用于:审查 API 或库的设计决策、审计配置 schema 中危险选项、评估加密 API 的人机工程、评估认证/授权接口,以及任何把安全相关选择暴露给开发者的代码。资料明确指出它不适用于:实现 bug(应交由常规代码审查)、业务逻辑缺陷(应由领域特定分析处理)、性能优化(属于不同关注点)。

主要能力

资料归纳出六类 Sharp Edge 及检测模式:

  1. 算法/模式选择陷阱:允许开发者选择算法就等于邀请他们选错。典型是 JWT 模式:头部指定算法,攻击者可设置 "alg": "none" 绕过签名;或 RS256→HS256 切换时把 RSA 公钥当作 HMAC 密钥。检测特征包括名为 algorithm、mode、cipher、hash_type 的参数,选择加密原语的枚举/字符串,以及安全机制的配置选项。

  2. 危险默认值:不安全默认值,或零/空值导致安全被关闭。例如 lifetime=0 究竟表示“接受全部”还是“立即过期”语义不明。检测特征包括接受 0 的超时/生命周期、绕过检查的空字符串、跳过校验的 null、关闭安全功能的布尔默认值。

  3. 原语 API 与语义 API:暴露原始字节而非有意义的类型会引发类型混淆。Libsodium 的 sodium_crypto_box($message, $nonce, $keypair) 容易交换 nonce 与 keypair,而 Halite 用 EncryptionPublicKey 类型强制正确用法。常量时间比较 hmac.Equal 与普通 == 看起来几乎一样,但安全属性截然不同。

  4. 配置断层:一个错误设置就造成灾难性失败且无警告,例如 verify_ssl: fasle 拼写错误被静默接受、session_timeout: -1 含义不明、auth_required: true 与 bypass_auth_for_health_checks: true 组合出危险配置。构造函数参数虽有合理默认值但不做校验,调用方仍可传入不安全值。

  5. 静默失败:错误不上报,或用成功掩盖失败。例如无 key 时签名校验直接返回 True、校验函数返回布尔值而非抛错而开发者忘记检查返回值、解析错误时替换为默认值。

  6. 字符串化安全:把安全关键值当作普通字符串,导致注入与混淆。例如字符串拼接构造 SQL/命令、逗号分隔的权限字符串、任意字符串表示角色、拼接构造 URL。

使用方式

分析分为四个阶段:

  • 阶段一:表面识别。梳理安全相关 API(认证、授权、加密、会话管理、输入校验),找出开发者选择点(算法、超时、模式),定位配置 schema(环境变量、配置文件、构造参数)。
  • 阶段二:边界情况探测。对每个选择点追问:0、空字符串、null、空数组会发生什么?-1 表示无限还是错误?不同安全概念能否互换?默认值是否安全?错误路径是否会静默接受非法输入?
  • 阶段三:威胁建模。考虑三类对手:恶意开发者(能否通过配置关闭安全、降级算法、注入恶意值)、偷懒开发者(第一个示例是否安全、最省力路径是否安全)、困惑开发者(能否无类型错误地交换参数、误用错误密钥/算法/模式,失败模式是否明显)。
  • 阶段四:验证发现。对每个尖锐边缘写出最小复现代码,验证可利用性,检查文档是否已说明危险,测试能否以合理代价安全使用。若发现存疑,回到阶段二继续探测。

适用场景与限制

适用场景包括加密 API 设计评审、认证授权接口审计、配置 schema 审查,以及任何向开发者暴露安全相关选择的代码。资料提供按类别(crypto-apis、config-patterns、auth-patterns、case-studies)与按语言(C/C++、Go、Rust、Swift、Java、Kotlin、C#、PHP、JavaScript/TypeScript、Python、Ruby)的参考指南。

发现按严重程度分级:Critical 指默认或显然用法即不安全(如 verify: false 默认、允许空密码);High 指容易误配置即破坏安全(如算法参数接受 "none");Medium 指不常见但可能的误配置(如负超时含义意外);Low 指需要刻意误用(如生僻参数组合)。

限制方面:它不处理实现 bug、业务逻辑缺陷和性能优化;文档中列出的参考资料文件和语言指南在提供的文本中仅有文件名,具体内容暂未提供。该资料未提供收费、价格、平台或部署方式的信息。