Files
Nexus/docs/security/Nexus-SSH鍛戒护鎵ц瀹夊叏宸℃闃舵3-鏂囦欢浼犺緭涓庝笓鐢⊿kill-20260707.md
2026-07-08 22:31:31 +08:00

4.1 KiB
Raw Permalink Blame History

Nexus SSH 命令执行安全巡检阶段 3:跨服务器文件传输与项目专用 Skill

日期:2026-07-07 分支:audit/security-review 范围:跨服务器文件传输、BT 面板直链下载投递、远程归档压缩/解压、项目专用审查 Skill。

1. 本阶段结论

本阶段补齐了跨服务器文件传输链路中遗留的高风险边界:

  • 传输包在目标服务器解压时,复用了统一的安全解压流程,先列成员、校验路径和类型,再解压。
  • 远程 mkdirmvrm、归档 staging move 增加 -- 参数终止符,避免以 - 开头的路径被当成命令选项。
  • pull_transfer_package 与 BT 直链投递目标路径改为统一 normalize_remote_abs_path 校验,拒绝 .. 与反斜杠。
  • 新增 .skills/ 下 Nexus 专用安全巡检规范,后续每轮审查可按固定规则执行。

完整测试结果:748 passed, 1 skipped

2. 调用链

2.1 Nexus 代理下载投递

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 面板直链下载投递

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. 验证记录

.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 校验。