逐模块对照实际代码验证审计报告中的问题修复状态,添加代码验证记录、逐条验证结果、修复率统计。合并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%
3.4 KiB
3.4 KiB
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.pyL45, L141 - 问题:
websockets.connect(uri)直接连接,无 TLS 证书验证、无 token 认证 - 影响分析:
- 默认
ws://localhost:8765:风险低,仅本机访问 - 远程连接场景(如
ws://remote-server:8765):无 MITM 防护,无身份认证
- 默认
- 修复建议:
- 远程连接时启用 WSS(
wss://),配置 SSL context - 支持 token 认证(URL query 参数或 Authorization header),与 gateway 认证机制对齐
- 远程连接时启用 WSS(
🟠 P1 — 高危问题
P1-1: 命令执行权限(不适用)
- 审计报告原描述: "BotOps 作为运维工具,可执行系统命令"
- 代码验证结论: 不成立。BotOps 是纯 TUI 客户端,本地命令仅限 UI 操作(连接/断开/清屏/状态/帮助/退出),不执行系统命令。所有
/命令透传给 aibox 服务器处理。
✅ 已有安全机制
- ✅ 桌面客户端架构: 本地运行,不监听端口,不对外提供服务
- ✅ WebSocket 通信: 与后端通过 JSON 消息交互
- ✅ 断线自动重连: 指数退避 2s→30s,手动断开抑制重连(
ws_client.pyL129-148) - ✅ CancelledError 正确处理:
_listen中CancelledError向上传播(ws_client.pyL111-112) - ✅ 连接关闭异常安全:
_close_ws捕获所有异常(ws_client.pyL68-72) - ✅ JSON 解析容错: 非法 JSON 作为 chunk 处理(
ws_client.pyL105-106) - ✅ 未知消息类型隔离: 不认识的 type 仅记入侧栏,不污染 AI 聊天区(
app.pyL255-257)
修复路线图
短期
- 远程连接场景添加 WSS 支持和 token 认证
中期
- 支持从 gateway 获取认证 token,统一接入