Files
micro_servers/smtp/docs/SECURITY_AUDIT_20260801.md
T

2.2 KiB
Raw Blame History

smtp 模块安全审计报告

审计日期: 2026-08-01
审计范围: smtp.py(旧版)、smtp_v2.py(新版)
代码版本: dev_qing 分支


修复进度

优先级 总数 已修复 待修复
P0 2 1(v2已修复) 1(旧版需下线)
P1 2 部分 1

🔴 P0 — 严重问题

P0-1: 旧版 smtp.py 存在大量致命漏洞(需立即下线)

  • 位置: smtp.py
  • 问题: 旧版 smtp.py 缺乏关键防护:
    1. 无发送速率限制(可被用于邮件炸弹)
    2. 无同邮箱 60 秒发送冷却
    3. 无验证码过期清理机制
    4. 无连续失败锁定机制
  • 修复建议:
    1. 确认 _run.sh 使用的是 smtp_v2.py
    2. 删除或重命名旧版 smtp.py 防止误用
    3. 在代码注释中明确标记废弃

P0-2: 依赖 pymsg 无认证(缓解:绑定 127.0.0.1)

  • 说明: 与其他 pymsg 服务相同,当前依赖网络层隔离

🟠 P1 — 高危问题

# 问题 说明
P1-1 验证码存储在进程内存,服务重启后所有未使用验证码失效 可被利用造成拒绝服务(频繁重启导致用户无法注册)
P1-2 全局发送熔断配置需确认生效(SMTP_HOURLY_LIMIT) smtp_v2 已有但需验证环境变量正确加载

✅ 已有安全机制(smtp_v2.py)

  1. ✅ 同邮箱 60 秒发送冷却: 冷却期拒绝并返回 retry_after
  2. ✅ 邮箱级限流(gateway 层双窗口:3次/小时 + 10次/天)
  3. ✅ 验证码一次性消费: 校验通过立即删除,防重放
  4. ✅ 连续失败 5 次自动作废: 防暴力破解验证码
  5. ✅ 10 分钟有效期: 惰性过期清理
  6. ✅ 发送失败不计入冷却: 防止网络错误误限制
  7. ✅ 全局熔断(可选): SMTP_HOURLY_LIMIT 默认 100 封/小时
  8. ✅ fail-closed: SMTP 异常时验证码校验失败

修复路线图

立即(24小时)

  • 确认 smtp 服务运行的是 smtp_v2.py,旧版下线
  • 删除或隔离 smtp.py 防止误用

短期

  • 验证全局熔断配置生效
  • 验证码存储考虑持久化(可选,当前内存实现适合单实例)