merge(chv-muse-round12): 合入 P6 privsep worker + 确定性安全检查层 (81e4eaf)
唯一冲突是文档 §15 撞号:P6 一节顺延为 §17,基线说明更新 (P3 已在树里,接线走真实代码)。chv-sync.sh 自动合入正确: P6 的 worker 路径与 P3 的 authd 路径(useHttpPath)都在。 P6 测试 43 项全过(skipped=1 是 root 下 uid 否定测试)。
This commit is contained in:
commit
b0b9f5ed9d
10 files changed
+2072
No files matched your search
@@ -938,3 +938,63 @@ docs/chv-muse-p2-gap.md(现状 vs Muse、改了什么、诚实边界、
|
||||
`test_open_returns_a11y_snapshot_with_fake_playwright`(合入 P4 后
|
||||
`BrowserAgent` 不再直连 Playwright,改为走假 CDP broker)。
|
||||
|
||||
## 17. 对齐 Muse P6 轨 feat-chv-muse-p6(privsep worker + 确定性安全检查层)
|
||||
|
||||
本节是准备工作,不是启用结论。本轨只到本地提交,不合并、
|
||||
不部署、不推;生产就绪与动态安全的外部关卡原样未动。
|
||||
基线 06c3e17(P1/P2/P3 之前的基线,不含 P3 的 authd/sentinel
|
||||
代码——本轨与 P3 的接线走文件/socket 协议;round-12 合入后 P3
|
||||
已在树里,接线走真实 P3 代码,见集成说明)。
|
||||
|
||||
### 17.1 本轨改动
|
||||
|
||||
- `cloud/chv/safety.py`(新):`UntrustedData` 来源标记、
|
||||
`InjectionScanner` 确定性规则(阻断/标记/放行三档)、
|
||||
`redact_secrets`(审计前脱敏)、`AuditLogger`(只记指纹,
|
||||
永不记值)、`audit_inference_request/response`(进出核心推理
|
||||
的审计入口)。规则覆盖:指令覆盖(中英)、shell 执行链、
|
||||
可疑 URL、分隔符隐藏指令;不覆盖:改写/编码指令、图片/
|
||||
附件/二进制内指令、上下文相关社会工程(见 §17.3)。
|
||||
- `cloud/chv/privsep.py`(新):`ConnectorSpec` 凭证白名单
|
||||
(gitea 只含 GITEA_TOKEN)、`WorkerRequest/Response` 类型化
|
||||
协议(request_id 绑定 + 64KB 上限 + 未知操作/字段拒绝)、
|
||||
`PrivsepServer`(Unix socket,SO_PEERCRED 只放 root/chv,
|
||||
仓目录限定 ~/workspace,git 只走 authd 凭证 helper,绝不
|
||||
直读真 token)、`PrivsepClient`(薄客户端,响应再扫一遍,
|
||||
取 worker 与客户端两者中更严的裁决)。
|
||||
- `chv-guest/chv-gitea-worker.py`(新):systemd 沙箱化 worker
|
||||
守护进程(`chv-guest/chv-gitea-worker.service`,NoNewPrivileges
|
||||
+ ProtectSystem + PrivateTmp + 凭证白名单环境变量)。
|
||||
- `chv-guest/chv-sync-worker-client.py`(新):agent 侧薄 CLI
|
||||
(只解析参数、传类型化参数,走 Unix socket)。
|
||||
- `chv-guest/chv-sync.sh`:pull/push/status 走 worker(socket
|
||||
在时),否则旧直连路径 + stderr 警告(不静默回落)。
|
||||
- `cloud/chv/executor.py`:`_run_guest` 前后加审计钩子
|
||||
(`_audit_inference_request/_audit_inference_response`),
|
||||
钩子失败不影响主流程。
|
||||
|
||||
### 17.2 本轨量化结果(实测)
|
||||
|
||||
- 新测试 `cloud/tests/test_chv_muse_p6.py` 43 项,全过
|
||||
(root 身份跑时 uid 否定测试 skip 1 项——该测试只在
|
||||
非 root 身份下才有意义)。
|
||||
含否定测试:worker 越权取凭证被拒、worker 直连外网被拒
|
||||
(无直连代码路径)、注入文本被标注/阻断、审计里无密钥值、
|
||||
仓目录越界被拒、request_id 错配被拒、worker 崩溃不拖垮
|
||||
agent(失败分类 WorkerRefusal)。
|
||||
- 差距表:`docs/chv-muse-p6-gap.md`(现状 vs Muse 官方要求、
|
||||
改什么、诚实边界、真机待验证清单)。
|
||||
- mypy 在新增文件上干净;剩余报错 4 处全是基线旧错
|
||||
(executor.py:1396/1401 的 `out` 未注解、
|
||||
marker_tools.py:142),未动。
|
||||
|
||||
### 17.3 确定性检查层的覆盖边界(诚实版)
|
||||
|
||||
能拦:字面指令覆盖(中英)、shell 执行链、可疑 URL、
|
||||
分隔符隐藏指令、git 输出里的注入文本(worker 侧与客户端
|
||||
双重扫描)。不能拦:改写/编码后的指令、图片/附件/二进制
|
||||
内指令、上下文相关的社会工程、需要理解语义的间接注入。
|
||||
这些需要模型分类器,本轨不冒充。真机待验证清单见差距表
|
||||
§4(worker 真实沙箱、SO_PEERCRED 真实 uid、超时/崩溃、
|
||||
auditd 审计、与 P3 authd/Sentinel 的真接线)。
|
||||
|
||||
Reference in new issue
Block a user