逐模块对照实际代码验证审计报告中的问题修复状态,添加代码验证记录、逐条验证结果、修复率统计。合并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%
86 lines
3.4 KiB
Markdown
86 lines
3.4 KiB
Markdown
# 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,统一接入
|