release: nexus btpanel session fix and app-v2

This commit is contained in:
Codex Release Bot
2026-07-08 22:31:31 +08:00
commit 1933f0af6e
2457 changed files with 350105 additions and 0 deletions
@@ -0,0 +1,87 @@
# Nexus SSH 命令执行安全巡检阶段 3:跨服务器文件传输与项目专用 Skill
日期:2026-07-07
分支:`audit/security-review`
范围:跨服务器文件传输、BT 面板直链下载投递、远程归档压缩/解压、项目专用审查 Skill。
## 1. 本阶段结论
本阶段补齐了跨服务器文件传输链路中遗留的高风险边界:
- 传输包在目标服务器解压时,复用了统一的安全解压流程,先列成员、校验路径和类型,再解压。
- 远程 `mkdir``mv``rm`、归档 staging move 增加 `--` 参数终止符,避免以 `-` 开头的路径被当成命令选项。
- `pull_transfer_package` 与 BT 直链投递目标路径改为统一 `normalize_remote_abs_path` 校验,拒绝 `..` 与反斜杠。
- 新增 `.skills/` 下 Nexus 专用安全巡检规范,后续每轮审查可按固定规则执行。
完整测试结果:`748 passed, 1 skipped`
## 2. 调用链
### 2.1 Nexus 代理下载投递
```mermaid
flowchart TD
A["API: transfer package/deliver"] --> B["server_file_transfer_service.create_transfer_package"]
B --> C["run_remote_compress(source)"]
C --> D["Redis transfer_package_store: token/meta/ttl"]
D --> E["pull_transfer_package(dest)"]
E --> F["curl Nexus signed transfer URL to /tmp staging"]
F --> G["mv -- staging -> dest archive path"]
G --> H["run_remote_decompress(dest): list members"]
H --> I["validate names/types"]
I --> J["safe tar/unzip extract"]
J --> K["apply_transfer_permissions"]
```
### 2.2 BT 面板直链下载投递
```mermaid
flowchart TD
A["deliver_transfer_package"] --> B["source has BT API credentials"]
B --> C["_deliver_via_btpanel_download"]
C --> D["run_remote_compress(source)"]
D --> E["signed_download_url(BT)"]
E --> F["dest curl BT download URL to /tmp staging"]
F --> G["mv -- staging -> dest archive path"]
G --> H["run_remote_decompress(dest)"]
H --> I["validate archive member names/types"]
I --> J["extract + permissions"]
```
## 3. 修复点
| 文件 | 修复 |
|---|---|
| `server/application/services/server_file_transfer_service.py` | `_extract_archive_on_server()` 改为调用 `run_remote_decompress()`,解压前校验归档成员;目标路径使用 `normalize_remote_abs_path()``mkdir/mv/rm` 增加 `--`。 |
| `server/infrastructure/ssh/remote_archive.py` | tar/zip staging 压缩后的 `mv` 改为 `mv -f -- ...`。 |
| `tests/test_server_file_transfer.py` | 新增安全解压委托、解压校验错误、目标路径穿越拒绝、下载 staging move/rm 参数终止符测试;更新旧的 tar overwrite 行为测试。 |
| `tests/test_remote_archive_commands.py` | 新增 tar/zip staging move 参数终止符测试。 |
| `.skills/nexus-security-review/SKILL.md` | 固化 Nexus 安全巡检总规则。 |
| `.skills/nexus-ssh-safety/SKILL.md` | 固化 SSH 命令、路径、归档安全规则。 |
| `.skills/nexus-btpanel-review/SKILL.md` | 固化宝塔一键登录/凭据/会话修复审查规则。 |
## 4. 边界说明
- `script_service` 是管理员显式远程 shell 能力,本阶段没有把它作为命令注入漏洞处理;后续只审查鉴权、审计、超时、输出截断和脱敏。
- 文件传输仍允许管理员选择任意绝对目标路径,但不允许路径字符串中包含 `..`、反斜杠或非绝对路径。
- 归档解压会拒绝绝对路径、父目录穿越、Windows 反斜杠、符号链接、硬链接和设备/FIFO/socket 等特殊条目。
- 未在报告中记录任何密码、token、cookie、SSH key 或 BT API key。
## 5. 验证记录
```bash
.venv/bin/python -m pytest tests/test_server_file_transfer.py tests/test_remote_archive_commands.py -q
# 40 passed
.venv/bin/python -m pytest -q
# 748 passed, 1 skipped
git diff --check
# pass
```
## 6. 下一步建议
1. 继续审查 `server/api/servers.py` 的 agent 安装/升级/回滚命令拼接与超时边界。
2. 审查 `remote_shell.py` / `asyncssh_pool.py` 的 stdout/stderr 截断、敏感输出脱敏和 sudo fallback 一致性。
3. 审查 API 鉴权覆盖:确认所有管理接口均有管理员依赖,公开下载类接口只暴露必要的 token 校验。