mcpField
I
insecure-defaults

insecure-defaults

github.com/trailofbits安全7.9k6.5k 次安装今天更新
代码仓库

关于 insecure-defaults

用于安全审计的技能,可发现配置缺失时仍以弱安全或宽松设置运行的默认值问题。它强调追踪实际运行行为和生产影响,并区分失效开放与安全失败,排除测试和示例代码。

主要功能

  1. 01搜索回退密钥和凭据
  2. 02检查薄弱安全默认值
  3. 03追踪缺少配置时的行为
  4. 04评估生产环境影响
  5. 05排除测试夹具和示例文件

适用场景

  1. 01审计生产环境的身份验证设置
  2. 02审查部署和基础设施配置
  3. 03检查环境变量与密钥处理
  4. 04部署前检查不安全默认值

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/trailofbits/skills --skill insecure-defaults

安装后在 Claude Code 中输入/insecure-defaults确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
assets/
trail-of-bits-mark.svg
references/
examples.md

详细介绍

不安全默认值检测

查找因缺少配置而导致应用以不安全方式运行的失效开放漏洞。区分可被利用的默认值与会安全崩溃的失效安全模式。

  • 失效开放(严重): SECRET = env.get('KEY') or 'default' → 应用会使用弱密钥运行
  • 失效安全(安全): SECRET = env['KEY'] → 缺少配置时应用会崩溃

适用场景

  • 对生产应用进行安全审计(身份验证、加密、API 安全)
  • 配置审查,检查部署文件、IaC 模板和 Docker 配置
  • 代码审查,检查环境变量处理和密钥管理
  • 部署前检查,排查硬编码凭据或弱默认值

不适用场景

请勿在以下情况下使用此技能:

  • 明确限定用于测试环境的测试夹具(位于 test/、spec/、__tests__/ 中的文件)
  • 示例/模板文件(后缀为 .example、.template、.sample 的文件)
  • 仅用于开发的工具(用于开发环境的本地 Docker Compose、调试脚本)
  • README.md 或 docs/ 目录中的文档示例
  • 部署时会被替换的构建时配置
  • 缺少配置时会崩溃的行为,即应用无法在缺少正确配置时启动(失效安全)

如有疑问:跟踪代码路径,确定应用是使用默认值运行,还是会崩溃。

应当驳斥的托词

  • “这只是开发环境的默认值” → 如果它会进入生产代码,就应记录为问题
  • “生产配置会覆盖它” → 确认生产配置确实存在;若不存在,代码层面的漏洞依然存在
  • “没有正确配置就绝不会运行” → 通过跟踪代码证明;许多应用会静默失效
  • “它在身份验证之后” → 纵深防御;会话遭到入侵后,仍可利用弱默认值
  • “发布前会修复” → 现在就记录;“以后再说”很少兑现

工作流

对每个潜在问题都遵循以下工作流:

1. 搜索:执行项目探查并查找不安全默认值

确定语言、框架和项目惯例。使用这些信息进一步查找密钥存储位置、密钥使用模式、需要凭据的第三方集成、加密方式以及其他相关配置。进一步利用这些信息分析不安全的默认配置。

示例 在 **/config/、**/auth/、**/database/ 和 env 文件中搜索以下模式:

  • 回退密钥: getenv.*\) or ['"]、process\.env\.[A-Z_]+ \|\| ['"]、ENV\.fetch.*default:
  • 硬编码凭据: password.*=.*['"][^'"]{8,}['"]、api[_-]?key.*=.*['"][^'"]+['"]
  • 弱默认值: DEBUG.*=.*true、AUTH.*=.*false、CORS.*=.*\*
  • 加密算法: 在安全相关上下文中搜索 MD5|SHA1|DES|RC4|ECB

根据探查结果调整搜索方法。

重点检查可在生产环境中执行的代码,而非测试夹具或示例文件。

2. 验证:实际行为

对每个匹配项,跟踪代码路径以了解运行时行为。

需要回答的问题:

  • 这段代码何时执行?(启动时还是运行时)
  • 缺少配置变量时会发生什么?
  • 是否有验证逻辑强制要求使用安全配置?
3. 确认:生产影响

确定此问题是否会影响生产环境:

如果生产配置提供了该变量 → 严重程度较低(但仍是代码层面的漏洞) 如果生产配置缺少该变量或使用默认值 → 严重

4. 报告:提供证据

报告示例:

Finding: Hardcoded JWT Secret Fallback
Location: src/auth/jwt.ts:15
Pattern: const secret = process.env.JWT_SECRET || 'default';

Verification: App starts without JWT_SECRET; secret used in jwt.sign() at line 42
Production Impact: Dockerfile missing JWT_SECRET
Exploitation: Attacker forges JWTs using 'default', gains unauthorized access

快速验证清单

回退密钥: SECRET = env.get(X) or Y → 验证:没有环境变量时,应用能否启动?密钥是否用于加密或身份验证? → 跳过:测试固件、示例文件

默认凭据: 硬编码的 username/password 组合 → 验证:是否在已部署的配置中启用?运行时能否覆盖? → 跳过:已禁用的账户、文档示例

默认放行的安全配置: AUTH_REQUIRED = env.get(X, 'false') → 验证:默认值是否不安全(false/已禁用/宽松)? → 安全:应用会崩溃,或默认配置安全(true/已启用/受限)

弱加密算法: 在安全场景中使用 MD5/SHA1/DES/RC4/ECB → 验证:是否用于密码、加密或令牌? → 跳过:校验和、非安全用途的哈希

宽松访问权限: CORS *、权限 0777、默认公开 → 验证:默认是否允许未经授权的访问? → 跳过:有明确理由的显式宽松配置

调试功能: 堆栈跟踪、内省、详细错误 → 验证:是否默认启用?是否在响应中暴露? → 跳过:仅用于日志记录、不会向用户展示的内容

详细示例和反例请参阅 examples.md。

评论

支持 Markdown