Insecure Defaults Detection
不安全默认配置检测
发现故障开放应用程序因配置缺失而以不安全方式运行的漏洞。区分可利用的默认配置与安全崩溃的故障安全模式。
- 故障开放(严重):
SECRET = env.get('KEY') or 'default'→ 应用程序使用弱密钥运行 - 故障安全(安全):
SECRET = env['KEY']→ 配置缺失时应用程序崩溃
使用场景
- 生产环境应用程序的安全审计(认证、加密、API安全领域)
- 配置文件审查部署文件、基础设施即代码模板、Docker配置
- 代码审查环境变量处理与密钥管理
- 部署前检查硬编码凭证或弱默认配置
禁用场景
以下情况请勿使用此技能:

- 测试夹具明确限定于测试环境(位于
test/、spec/、__tests__/目录中的文件) - 示例/模板文件(使用
.example、.template、.sample后缀的文件) - 仅用于开发的工具(本地开发用的Docker Compose、调试脚本)
- 文档中的示例位于README.md或docs/目录中
- 构建时配置在部署时会被替换
- 缺失即崩溃的行为指应用在缺少正确配置时无法启动(故障安全机制)
当有疑问时:追踪代码路径以确定应用是运行默认设置还是崩溃。
应拒绝的合理化借口
- "这只是一个开发环境的默认设置"→ 如果它进入生产代码,就是一个发现的问题
- "生产配置会覆盖它"→ 验证生产配置是否存在;如果不存在,代码层面的漏洞仍然存在
- "没有正确的配置,这永远不会运行"→ 通过代码追踪来证明;许多应用会静默失败
- "它在认证后面"→ 深度防御;会话一旦被攻破,仍然可以利用弱默认设置
- "我们会在发布前修复它"→ 现在就记录;"以后"很少会来
工作流程
对每一个潜在的发现问题,遵循以下工作流程:
1. 搜索:进行项目发现并查找不安全的默认设置
确定语言、框架和项目惯例。利用这些信息进一步发现如秘密存储位置、秘密使用模式、带凭证的第三方集成、加密技术以及其他相关配置。进一步利用信息分析不安全的默认配置。
示例在以下位置搜索模式:**/config/、**/auth/、**/database/以及环境文件中:
- 后备密钥:
getenv.*\) 或 ['"]、process\.env\.[A-Z_]+ \|\| ['"]、ENV\.fetch.*默认: - 硬编码凭据:
password.*=.*['"][^'"]{8,}['"]、api[_-]?key.*=.*['"][^'"]+['"] - 弱默认值:
DEBUG.*=.*true、AUTH.*=.*false、CORS.*=.*\* - 加密算法:
MD5|SHA1|DES|RC4|ECB在安全背景下
根据发现结果调整搜索方法。
关注生产环境可访问的代码,而非测试固件或示例文件。
2. 验证:实际行为
对于每个匹配项,追踪代码路径以理解运行时行为。
需要回答的问题:
- 这段代码何时执行?(启动时 vs. 运行时)
- 如果配置变量缺失会发生什么?
- 是否有强制安全配置的验证?
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→ 验证:应用是否在没有环境变量的情况下启动?密钥是否用于加密/身份验证?
→ 跳过:测试固件、示例文件
默认凭据:硬编码用户名/密码配对
→ 验证:在部署配置中是否活跃?运行时是否无覆盖?
→ 跳过:已禁用的账户、文档示例
故障开放安全: AUTH_REQUIRED = env.get(X, 'false')→ 验证:默认是否不安全(false/禁用/宽松)?
→ 安全:应用崩溃或默认安全(true/启用/限制)
弱加密:安全上下文中使用MD5/SHA1/DES/RC4/ECB → 验证:是否用于密码、加密或令牌? → 跳过:校验和、非安全哈希
宽松访问:跨域资源共享(CORS)*,权限0777,默认公开
→ 验证:默认是否允许未授权访问?
→ 跳过:经过明确配置且有正当理由的宽松设置
调试功能:堆栈跟踪、自省、详细错误信息 → 验证:是否默认启用?是否在响应中暴露? → 跳过:仅限日志记录、不面向用户
如需查看详细示例与反例,请参考examples.md文件。


微信扫一扫,打赏作者吧~