不安全默认值检测Skill insecure-defaults

该技能用于检测和识别应用程序中的不安全默认设置,如硬编码密钥、弱认证机制和宽松安全配置,帮助在安全审计、配置审查和环境变量处理分析中预防生产环境漏洞。关键词:安全审计、漏洞检测、默认设置、配置管理、环境变量。

安全审计 0 次安装 0 次浏览 更新于 3/14/2026

name: insecure-defaults description: “检测失败开放的不安全默认设置(硬编码密钥、弱认证、宽松安全),这些设置允许应用程序在生产环境中不安全地运行。在审计安全、审查配置管理或分析环境变量处理时使用。” allowed-tools:

  • 读取
  • Grep
  • Glob
  • Bash

不安全默认值检测

找到失败开放漏洞,其中应用程序在缺少配置的情况下不安全运行。区分可被利用的默认值与安全崩溃的失败安全模式。

  • 失败开放(严重): 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.*=.*trueAUTH.*=.*falseCORS.*=.*\*
  • 加密算法: MD5|SHA1|DES|RC4|ECB 在安全上下文中

根据发现结果定制搜索方法。

关注生产可达代码,而非测试固定装置或示例文件。

2. 验证:实际行为

对于每个匹配,追踪代码路径以理解运行时行为。

需要回答的问题:

  • 何时执行此代码?(启动时 vs. 运行时)
  • 如果配置变量缺失会发生什么?
  • 是否有验证强制执行安全配置?

3. 确认:生产影响

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

如果生产配置提供变量 → 较低严重性(但仍然是代码级别漏洞) 如果生产配置缺失或使用默认值 → 严重

4. 报告:带证据

示例报告:

发现:硬编码 JWT 密钥备用
位置:src/auth/jwt.ts:15
模式:const secret = process.env.JWT_SECRET || 'default';

验证:应用程序在没有 JWT_SECRET 时启动;密钥用于第 42 行的 jwt.sign()
生产影响:Dockerfile 缺少 JWT_SECRET
利用:攻击者使用 'default' 伪造 JWT,获得未授权访问

快速验证清单

备用密钥: 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