Files
micro_servers/docs/security/BotOps_SECURITY_AUDIT_20260801.md
qing 5fbe3ed5e4 docs(security): 更新全部模块审计报告,添加代码验证记录
逐模块对照实际代码验证审计报告中的问题修复状态,添加代码验证记录、逐条验证结果、修复率统计。合并aibox两份审计报告,删除重复文件。修复率:confs 61% > dnfs 60% > ai_review 50% > smtp 37.5% > db 33% > core 12.5% > gateway 12.5% > pymsg 6.25% > static 5% > captcha/aibox/BotOps 0%
2026-08-03 14:12:45 +08:00

3.4 KiB
Raw Permalink Blame History

BotOps 模块安全审计报告

审计日期: 2026-08-01
审计范围: app.py、ws_client.py、commands.py、widgets/
代码版本: dev_qing 分支


代码验证记录

验证日期: 2026-08-03
验证方式: 逐条对照审计报告与当前代码(app.py、ws_client.py、commands.py)

验证结果汇总

等级 总数 已修复 未修复 修复率
P0 1 0 1 0%
P1 1 0 0 0%(不适用)
合计 2 0 1 0%

逐条验证

编号 状态 代码位置 验证说明
P0-1 ❌ 未修复 ws_client.py L45, L141 websockets.connect(uri) 无 TLS 证书验证、无 token 认证;默认 localhost 风险低,但远程连接时无防护
P1-1 ❌ 不适用 整个模块 审计报告声称 BotOps 可执行系统命令,实际代码是纯 TUI 客户端,仅作消息收发,不执行系统命令。此问题不成立

注意: P1-1 在审计报告中被描述为"命令执行权限"问题,经代码验证,BotOps 是 Textual TUI 前端客户端,本地命令仅限 /connect /disconnect /clear /status /help /quit,其余 / 命令透传给 aibox 服务器,模块本身不执行任何系统命令。


模块性质

BotOps 是 本地桌面 TUI 客户端(基于 Textual 框架),而非服务端模块。其安全面与服务器模块不同:

  • 默认连接 ws://localhost:8765(本机 aibox)
  • 所有操作在用户本地桌面环境运行
  • 不监听任何端口,不对外提供服务

🔴 P0 — 严重问题

P0-1: WebSocket 客户端无认证机制 ❌

  • 位置: ws_client.py L45, L141
  • 问题: websockets.connect(uri) 直接连接,无 TLS 证书验证、无 token 认证
  • 影响分析:
    • 默认 ws://localhost:8765:风险低,仅本机访问
    • 远程连接场景(如 ws://remote-server:8765):无 MITM 防护,无身份认证
  • 修复建议:
    1. 远程连接时启用 WSS(wss://),配置 SSL context
    2. 支持 token 认证(URL query 参数或 Authorization header),与 gateway 认证机制对齐

🟠 P1 — 高危问题

P1-1: 命令执行权限(不适用)

  • 审计报告原描述: "BotOps 作为运维工具,可执行系统命令"
  • 代码验证结论: 不成立。BotOps 是纯 TUI 客户端,本地命令仅限 UI 操作(连接/断开/清屏/状态/帮助/退出),不执行系统命令。所有 / 命令透传给 aibox 服务器处理。

✅ 已有安全机制

  1. ✅ 桌面客户端架构: 本地运行,不监听端口,不对外提供服务
  2. ✅ WebSocket 通信: 与后端通过 JSON 消息交互
  3. ✅ 断线自动重连: 指数退避 2s→30s,手动断开抑制重连(ws_client.py L129-148)
  4. ✅ CancelledError 正确处理: _listen 中 CancelledError 向上传播(ws_client.py L111-112)
  5. ✅ 连接关闭异常安全: _close_ws 捕获所有异常(ws_client.py L68-72)
  6. ✅ JSON 解析容错: 非法 JSON 作为 chunk 处理(ws_client.py L105-106)
  7. ✅ 未知消息类型隔离: 不认识的 type 仅记入侧栏,不污染 AI 聊天区(app.py L255-257)

修复路线图

短期

  • 远程连接场景添加 WSS 支持和 token 认证

中期

  • 支持从 gateway 获取认证 token,统一接入