Skip to content

fix: 收紧 iOS 配置路径并补齐同步/签名器生命周期 - #107

Merged
kairowan merged 1 commit into
mainfrom
fix/mcp-third-audit-20261112
Nov 12, 2026
Merged

kairowan merged 1 commit into
mainfrom
fix/mcp-third-audit-20261112

Conversation

@kairowan

Copy link
Copy Markdown
Owner

来源

修复 2026-11-12/MCP第二轮复审/复审报告.md 中的 4 项问题。

修复内容

P1 iOS 配置引用绕过允许目录

  • protect_ios 解析 iOS TOML 后,对真正消费的路径执行同一 --allow-root 约束:
    • project.path
    • project.entrypoint(相对工程根解析)
    • confidential.config(启用时,相对配置目录解析)
  • 符号链接通过 canonicalize 后校验,配置在允许目录内也不能引用外部工程
  • 真实 CLI 探针确认外部工程返回“iOS 工程不在允许的目录内”

P2 顶层 apksigner 未进入自动签名

  • 自动签名时若 sign.apksigner 为空,继承顶层 apksigner
  • 预检与最终签名使用同一个有效工具路径
  • 真实隔离 CLI 探针确认“仅顶层指定”也能完成加固、签名并返回成功

P2 同步检查孙进程未回收

  • run_sync 与异步任务一样在 Unix 创建独立进程组
  • kill_tree 的进程组终止现在对同步检查同样有效
  • 新增超时与关闭 stdin 两种场景的孙进程标记文件测试

P2 相对 --cli 路径失效

  • Server::new 在切换子进程工作目录前,把带目录的相对 CLI 路径解析为基于 MCP 启动目录的绝对路径
  • 仅程序名仍保留 PATH 查找语义
  • 新增 --cli ./bin/fake-shield.sh 从其他工作目录启动的回归测试

验证

  • cargo fmt --all --check
  • 全量 clippy -D warnings
  • cargo test -p shellsmith-mcp:26 passed
  • cargo test -p shield-cli:22 passed
  • cargo test -p shield-core:263 passed, 8 ignored
  • python3 -m unittest discover -s scripts/tests:48 passed
  • 真实 CLI 探针:
    • iOS 外部工程被拒绝
    • 仅顶层 apksigner 的加固+签名成功
    • 恢复副本和普通签名报告行为保持通过

未实机验证

  • 未新增 Windows 实机、APK 安装启动、iOS Archive 或 16KB 运行验证
  • 同步孙进程测试为 macOS/Unix;Windows 走 taskkill /T

- iOS 配置的 project.path、entrypoint、confidential.config 统一受允许目录约束
- 顶层 apksigner 自动回退到自动签名阶段,预检与最终签名使用同一工具
- 同步检查创建独立进程组,超时或 MCP 退出时回收孙进程
- 相对 --cli 路径在切换子进程工作目录前按 MCP 启动目录解析
- 补充 iOS 越界、顶层签名器、同步孙进程和相对路径回归测试
@kairowan
kairowan merged commit de6c758 into main Nov 12, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant