返回 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