用途
insecure-defaults 是一个用于检测源代码中不安全默认配置的安全扫描技能。它面向代码审查、安全审计、服务部署前检查以及对第三方或遗留代码的审阅,帮助在问题进入生产环境之前发现不安全的默认设置。
主要能力
该技能在五个风险类别中扫描源代码:
- 弱加密算法:标记 MD5、SHA1、DES、RC4 以及 AES ECB 模式等已损坏或弱算法。
- 默认与硬编码凭据:标记代码和配置文件中的字面密码、默认管理员凭据以及硬编码 API 令牌。
- Fail-open 模式:标记静默继续而非安全失败的宽泛异常处理,这类模式可能绕过认证、授权或校验逻辑。
- 不安全的框架默认值:检查常见的不安全框架设置,例如 Django DEBUG 模式、通配符 CORS、宽松的 Content-Security-Policy,以及被禁用的安全中间件。
- 不安全的 TLS/SSL 默认值:标记禁用的证书校验、接受过期证书,以及使用已废弃的 TLS 版本。
对每个发现项,技能会报告文件位置、解释风险,并推荐安全替代方案。最终输出包含风险汇总、修复优先级参考和安全默认值参考。
使用方式
前置条件:
- grep(标准、始终可用)
- semgrep(可选,通过结构匹配提升准确率):
pip install semgrep
# verify
semgrep --version
- 环境变量 SECSKILL_SCAN_PATH:要扫描的代码库根目录
输入变量:
SECSKILL_SCAN_PATH:必填,要扫描的代码库根目录SECSKILL_OUTPUT_DIR:可选,结果输出目录(默认:./output)SECSKILL_EXTENSIONS:可选,逗号分隔的包含文件扩展名(默认:py,js,ts,java,go,rb,php,cs,cpp,c,yaml,yml,toml,env,cfg,conf,ini,properties)SECSKILL_USE_SEMGREP:可选,设为 false 即使安装了 semgrep 也跳过(默认:自动检测)
工作流程:
- 环境设置:读取环境变量、校验扫描目录、创建输出目录、生成带时间戳的报告文件路径、构建 grep 的 include 标志、检测 semgrep 是否可用。
- 弱加密算法扫描:使用 grep 模式匹配以及可选的 semgrep 规则。
- 默认/硬编码凭据扫描:匹配字面密码、API key、默认凭据等,并在打印前对值进行掩码处理。
- Fail-open 模式扫描:匹配静默异常处理模式。
- 不安全框架默认值扫描:匹配 Django DEBUG、CORS 通配符、CSP、Cookie 安全开关、HSTS 等。
- 不安全 TLS/SSL 默认值扫描:匹配禁用校验、过期证书、旧协议版本等。
- 风险汇总与建议:统计各类别发现项,输出修复优先级与安全默认值参考,并保存报告文件。
完成条件:
- 五类均已扫描并打印结果
- 每个发现项包含文件路径和行号
- 生成风险汇总表
- 报告文件写入输出目录
适用场景
- 在代码审查期间捕捉不安全默认值,避免其进入生产环境
- 作为新代码库或不熟悉代码库安全审计的一部分
- 在部署服务前检查框架与运行时设置
- 审查团队继承的第三方或遗留代码
限制与注意事项
- 默认过滤 test/、spec/ 和 _test. 文件中的发现项,因为测试夹具会故意使用弱值;如需完整覆盖可重新包含它们。
- 该技能使用静态模式匹配,无法评估运行时配置或通过环境变量注入的值,应始终辅以对部署配置的人工审查。
- 该技能适合与 secret-scan(git 历史中的凭据泄露)和 security-headers(HTTP 层默认值)搭配使用。
- 已知失败模式包括:grep 选项无效(shell 兼容性问题,建议显式用 bash 运行)、测试文件误报过多(添加项目特定路径到 grep -v 排除)、semgrep 规则未找到(规则 ID 随版本变化,可用 semgrep --config auto 或访问 semgrep.dev 查询)、编译型语言缺少发现项(grep 无法检查字节码,应在编译前扫描源码并将 .class/.pyc 加入排除)、凭据值出现在报告中(掩码 sed 模式未匹配引号风格,需扩展 sed 掩码表达式)。