返回 Bug 清单
BUG-0980project-89高已修复python-logic

传输路径白名单按词法规范化判边界(防 `..` 绕过)

发现:2026-10-09验证:2026-10-09置信度:70%

症状

commit 0a8e4b7add32 (2026-10-05) fix(ssh): 传输路径白名单按词法规范化判边界(防 `..` 绕过)

根因

根因

修复方案

修复 409 行,删除 1 行。改动文件: pyproject.toml, src/project-89/ssh/servers.py, tests/conftest.py, tests/security/conftest.py, tests/security/test_redteam_ssh.py

错误签名

fix(ssh): 传输路径白名单按词法规范化判边界(防 `..` 绕过) 根因
  `SshServer.path_allowed()` 直接拿模型给的远端路径做前缀匹配,而远端路径最终由
  **远端 shell** 解析 ⇒ `/data/../etc/passwd` 会命中 `/data` 前缀并被放行,等于
  `allow_paths` 形同虚设。OH-DOC-071 §3「路径有边界」要防的正是"上传覆盖
  `/etc/passwd` 这类事故"——原实现挡不住同一目录的 `..` 上跳。

影响
  - `allow_paths: ["/data"]` 时,`/data/../../etc/shadow` 被判为"域内";
    `ssh_get` 可读取域外文件,`ssh_put`(在 `allow_write` 打开时)可覆盖域外文件。
  - 写这条红队用例(OH-DOC-082 §5.2 R-15)时暴露,非既有用户报告。

修复
  先 `posixpath.normpath()` 词法规范化,再按目录边界匹配;相对路径依旧一律拒绝
  (行为不变,`ap

技术信息

来源项目

project-89

涉及文件

pyproject.toml, src/project-89/ssh/servers.py, tests/conftest.py +2

标签

git-sweep, auto-ingested, project-89, mcp-reported, source-agent