SuperAPI AI 工具集

cryptographic-failures

安全与审计

查看项目

更新于 10-16 02:23

技能介绍

用途

本技能用于检测、审计和修复 Python Web 应用(FastAPI 与 Flask)中的 OWASP A04:2025「加密失败」(Cryptographic Failures)。该类别在 OWASP 排名第 4(因 TLS 采用率提升从第 2 位下降),影响约 3.80% 的应用,超过 160 万次出现,涉及 32 个 CWE。加密失败指保护静态与传输中数据的加密措施缺失、误用或强度不足。Python 存在区别于 Java/.NET 的特定陷阱。

主要能力

技能覆盖以下风险领域及其 Python 特有陷阱:

  • 密码哈希:弱算法或缺失算法,如使用 hashlib.md5/sha1 而非 bcrypt/Argon2。
  • 随机性:可预测值,如使用 import random 而非 import secrets。
  • 硬编码密钥:密钥泄露,如源码中的 SECRET_KEY = "..." 字面量。
  • TLS/SSL:证书绕过,如 requests/httpx 中的 verify=False。
  • JWT 密钥:密钥强度与算法,如弱密钥、缺少算法固定。
  • 对称加密:弃用模式,如 ECB 模式、无认证加密。

使用方式

1. 使用 Bandit 进行静态扫描

Bandit 是用于自动捕获加密问题的主要 Python SAST 工具:

pip install bandit
bandit -r . -t B303,B304,B305,B306,B311,B324,B501,B502,B503,B504,B505,B506 -f json -o bandit_crypto.json

关键 Bandit 测试 ID:B303(MD5/SHA1 使用,中危)、B304/B305(弱密码模式 ECB、DES,高危)、B311(安全上下文中的 random 模块,低危)、B324(hashlib 使用弱哈希,中危)、B501(SSL 上下文中的 verify=False,高危)、B502/B503/B504(不安全的 SSL/TLS 版本,中到高危)、B105/B106(硬编码密码/密钥,中危)。

2. 手工代码模式审查

按优先级顺序检查以下模式:

严重 — 密码哈希:任何用于哈希密码或令牌的 hashlib.* 调用;缺少盐(未使用 hashlib.pbkdf2_hmac 的原始密码哈希);bcrypt rounds < 12(应 ≥12 以抵抗暴力破解)。推荐使用 passlib 配合 argon2 或 bcrypt。

严重 — 弱随机性(CWE-330):在涉及令牌、OTP、会话 ID、密钥或 nonce 的代码路径中,检查任何 random.random()、random.randint()、random.choice()、random.shuffle()。应改用 secrets 模块。

高危 — 硬编码加密密钥(CWE-321):源码中的密钥字面量。应从环境变量加载。最小密钥长度:Flask SECRET_KEY ≥32 随机字节(使用 secrets.token_hex(32));JWT HMAC 密钥 ≥32 字符;AES 密钥 128、192 或 256 位(16、24 或 32 字节)。

高危 — TLS/SSL 证书绕过(CWE-295):requests.get(url, verify=False)、httpx.get(url, verify=False)、ssl._create_unverified_context()、urllib3.disable_warnings()。应保持 verify=True 默认值或指定自定义 CA。

中危 — JWT 配置(CWE-327):算法混淆攻击,如 algorithms=["none"] 或未固定算法;弱密钥无验证加载。应显式允许列表(如 algorithms=["HS256"]),密钥缺失时硬失败,并校验 exp、aud、iss 声明。访问令牌有效期应为 15–30 分钟。

中危 — 弃用的对称加密(CWE-327):ECB 模式泄露数据模式;无认证的 CBC 易受篡改。应使用认证加密,如 cryptography 库的 AESGCM 或 ChaCha20-Poly1305。

3. FastAPI 专项检查

  • 验证 OAuth2/JWT 中间件的算法固定,ALGORITHM 必须显式且不可被配置篡改。
  • 验证用户创建/登录端点中的密码哈希,不得存储明文或 MD5。
  • 密码重置/邮箱验证的令牌生成应使用 secrets.token_urlsafe(32)。

4. Flask 专项检查

  • 会话 cookie 签名使用 SECRET_KEY,必须强健,从环境变量加载。
  • Flask-Login 密码验证使用 bcrypt,rounds≥12。
  • 通过 flask-talisman 强制 HTTPS 并添加 HSTS 头。

适用场景

适用于对 Python Web 应用(FastAPI、Flask)进行加密实现的安全审计、代码审查与加固,尤其适合在开发或上线前排查密码存储、令牌生成、密钥管理、传输安全与加密算法选择方面的缺陷。

限制

资料未提供该技能的安装方式、运行环境要求、自动化程度、收费模式或效果保证等信息。技能内容为审计与修复指导,不包含可直接运行的完整工具。供应链加密问题(依赖哈希固定)需参考 software-supply-chain 技能;JWT 认证逻辑(过期、声明)超出加密范畴的部分需参考 authentication-failures 技能。