Files
blackbird/docs/security/gateway_SECURITY_AUDIT_20260801.md
T
qing a7a78d1424 docs: aggregate project documentation under docs/ with unified index
- Move all per-module security audit reports to docs/security/
- Move code review logs to docs/reviews/, analysis reports to docs/reports/
- Add docs/INDEX.md as single entry point for all project documentation
- Add documentation management conventions section to README.md
- Clean up empty per-module docs/ directories
2026-08-03 13:21:48 +08:00

3.0 KiB
Raw Blame History

gateway 模块安全审计报告

审计日期: 2026-08-01
审计范围: src/main.cpp、src/shared/(libth、libhttp、libcrypt、libsqlite3)
代码版本: dev_qing 分支


修复进度

优先级 总数 已修复 待修复
P0 1 0 1
P1 5 部分 3
P2 2 0 2

🔴 P0 — 严重问题

P0-1: RSA 私钥存储在仓库中/硬编码

  • 位置: Token 签名相关代码
  • 问题: RSA 私钥若硬编码在代码中或随仓库分发:
    • 所有部署使用同一密钥对,私钥泄露即全局沦陷
    • 任何有代码访问权限的人都可伪造 Token
  • 修复建议:
    1. 私钥从文件路径加载(启动参数或环境变量),不硬编码
    2. 每个部署实例生成独立密钥对
    3. 私钥文件权限 0600,仅服务运行用户可读
    4. 公钥分发机制:dnfs、aibox 等需要验签的服务可访问公钥

🟠 P1 — 高危问题

# 问题 说明
P1-1 Token 吊销机制缺失 当前无 Token 黑名单/吊销列表,修改密码/注销后旧 Token 仍然有效直到过期
P1-2 登录失败次数限制需确认实现 是否有 IP/账户级别的失败锁定
P1-3 上游代理超时配置需验证 反向代理超时过短导致大文件上传失败,过长导致 Slowloris
P1-4 C++ HTTP 解析器缓冲区溢出审计 libhttp 库需全面 fuzz 测试
P1-5 请求体大小限制需确认 是否配置了合理的上限(如 10MB)

🟡 P2 — 中危问题

# 问题
P2-1 错误页面可能泄露版本号/堆栈信息
P2-2 HTTPS 配置(如使用)需确认 TLS 版本和密码套件安全

✅ 已有安全机制

  1. ✅ PBKDF2 密码哈希: 慢哈希算法防彩虹表,使用唯一盐值
    bool auth_ok = PBKDF2Hasher::verify_password(password, stored_hash);
    
  2. ✅ RSA Token 签名: Token 使用 RSA 私钥签名,防伪造
  3. ✅ 反向代理架构: 统一入口,隐藏后端服务拓扑
  4. ✅ 速率限制: 邮件轰炸多层防护(gateway+smtp 双窗口限流、60秒冷却、失败锁定)
  5. ✅ 防用户名枚举: 登录失败返回统一消息(需确认实现)
  6. ✅ WAF 前置防护: Go WAF 处理 SQLi/XSS/CC/协议解析
  7. ✅ C++ 高性能实现: 避免 Python GIL 瓶颈,抗并发能力强
  8. ✅ 依赖审计: 使用项目自带的 libcrypt 加密库(PBKDF2、RSA)

修复路线图

立即(24小时)

  • 确认 RSA 私钥不从仓库/硬编码加载,改为外部文件
  • 验证请求体大小限制已启用(参考 waf 的 10MB 配置)

短期(72小时)

  • 实现 Token 吊销列表(密码修改时注销旧 Token)
  • 确认登录失败锁定机制生效
  • 验证代理超时配置(防 Slowloris + 支持大文件上传)
  • libhttp 解析器 fuzz 测试

中期

  • 错误页面脱敏
  • TLS 安全配置(HTTPS 场景)
  • 管理操作审计日志