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%
This commit is contained in:
1 parent
d3158c2420
commit
5fbe3ed5e4
14 files changed
+899
-457
No files matched your search
@@ -6,45 +6,80 @@
|
||||
|
||||
---
|
||||
|
||||
## 修复进度
|
||||
## 代码验证记录
|
||||
|
||||
| 优先级 | 总数 | 已修复 | 待修复 |
|
||||
|--------|------|--------|--------|
|
||||
| P0 | 1 | 0 | 1 |
|
||||
| P1 | 1 | 0 | 1 |
|
||||
**验证日期**: 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`
|
||||
- **问题**: BotOps 作为运维管理客户端,连接后端 WebSocket 时:
|
||||
- 若连接 aibox/core 的 WebSocket 管理接口,需要确认 TLS 证书验证是否启用
|
||||
- Token/认证凭据存储方式需审计
|
||||
### P0-1: WebSocket 客户端无认证机制 ❌
|
||||
|
||||
- **位置**: `ws_client.py` L45, L141
|
||||
- **问题**: `websockets.connect(uri)` 直接连接,无 TLS 证书验证、无 token 认证
|
||||
- **影响分析**:
|
||||
- 默认 `ws://localhost:8765`:风险低,仅本机访问
|
||||
- 远程连接场景(如 `ws://remote-server:8765`):无 MITM 防护,无身份认证
|
||||
- **修复建议**:
|
||||
1. 启用 TLS 证书验证,不使用 `verify=False`
|
||||
2. 认证 Token 安全存储(系统钥匙串而非明文配置文件)
|
||||
1. 远程连接时启用 WSS(`wss://`),配置 SSL context
|
||||
2. 支持 token 认证(URL query 参数或 Authorization header),与 gateway 认证机制对齐
|
||||
|
||||
---
|
||||
|
||||
## 🟠 P1 — 高危问题
|
||||
|
||||
| # | 问题 | 说明 |
|
||||
|---|------|------|
|
||||
| P1-1 | 命令执行权限 | BotOps 作为运维工具,可执行系统命令,需确认是否限制了可执行命令范围 |
|
||||
### P1-1: 命令执行权限(不适用)
|
||||
|
||||
- **审计报告原描述**: "BotOps 作为运维工具,可执行系统命令"
|
||||
- **代码验证结论**: 不成立。BotOps 是纯 TUI 客户端,本地命令仅限 UI 操作(连接/断开/清屏/状态/帮助/退出),不执行系统命令。所有 `/` 命令透传给 aibox 服务器处理。
|
||||
|
||||
---
|
||||
|
||||
## ✅ 已有安全机制
|
||||
|
||||
1. ✅ **桌面客户端架构**: 本地运行应用,天然隔离
|
||||
2. ✅ **WebSocket 通信**: 与后端实时通信
|
||||
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)
|
||||
|
||||
---
|
||||
|
||||
## 修复路线图
|
||||
|
||||
### 短期
|
||||
- [ ] 审计 ws_client.py 的 TLS 配置
|
||||
- [ ] 确认命令执行白名单
|
||||
- [ ] 远程连接场景添加 WSS 支持和 token 认证
|
||||
|
||||
### 中期
|
||||
- [ ] 支持从 gateway 获取认证 token,统一接入
|
||||
Reference in new issue
Block a user