OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  insecure-defaults:检测不安全的默认开放配置

insecure-defaults:检测不安全的默认开放配置

 
  container ·  2026-02-07 10:47:53 · 3 次点击  · 0 条评论  

名称: insecure-defaults
描述: "检测允许应用在生产环境中不安全运行的'故障开放'不安全默认配置(硬编码密钥、弱身份验证、宽松安全设置)。适用于安全审计、配置管理审查或环境变量处理分析。"
允许工具:
- Read
- Grep
- Glob
- Bash


不安全默认配置检测

发现因配置缺失导致应用不安全运行的故障开放漏洞。区分可被利用的默认配置与安全崩溃的故障安全模式。

  • 故障开放(严重): 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.*\) 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

3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor