9.2 KiB
AI 合同平台 V2 特权身份与支持访问安全评审
日期:2026-08-09 范围:固定锁复核、确定性身份计划、隔离 PostgreSQL 事务演练、support access validation-only 策略 发布结论:No-Go,真实身份执行器与 support access 不得启用
1. 已验证的安全属性
- 运行态不存在 execute、rollback、merge、split、recover、grant、revoke、support-access、retry、requeue 或 ack 路由;execution-attempts 仍为 GET-only。
- 固定锁和锁内二次 preflight 已在真实 PostgreSQL 隔离 schema 验证,revision 漂移、审批过期、审批人失权和锁超时均 fail closed。
- 确定性计划只保存 target ref 指纹,正向/补偿步骤和双 hash 可检测篡改;support access 不生成身份 mutation plan。
- 隔离事务演练覆盖身份更新后故障和 event/outbox 后故障,身份、event、outbox 同时回滚;随机 schema 清理后残留为 0。
- support access 策略只允许固定 read/comment scope,逐次检查主体、工作空间、scope、状态、revision、时间、policy hash 和 revocation hash;所有结果固定
access_granted=false。
2. P0 发布阻断项
状态说明:本节保留首次评审时的历史阻断基线,不随代码整改直接改写。后续关闭或部分关闭状态以第 6、7 节复核为准;基础设施或 validation-only 验收不得被解释为真实 support access 发布批准。
- 无运行时可信授权源:当前策略材料是纯内存输入,没有持久化 grant、撤销记录、单一真相版本或跨实例一致性协议。任何接入都可能读取陈旧授权。
- TOCTOU 未闭合:validation-only 检查与未来资源访问不在同一受控事务/策略执行点;检查后账号、工作空间、scope、revision 或撤销状态仍可能变化。
- 可信时间未定义:
checked_at由内部调用方传入,尚未绑定数据库时间或受保护的服务端时钟;不能作为真实自动到期依据。 - 强认证与会话绑定缺失:没有 step-up/MFA、设备与会话绑定、短时凭证、不可转移 audience、网络/设备约束或重认证窗口。
- 撤销传播缺失:紧急撤销只有纯函数语义,没有 durable revoke、缓存失效、跨节点传播 SLA、拒绝列表或 kill switch 演练。
- 逐请求审计缺失:没有对每次支持访问记录资源、scope、决策、策略版本、操作者、时间、结果和关联工单的不可变审计/outbox;也没有异常访问告警。
- 授权执行面缺失:没有专用 policy enforcement point,无法证明所有合同、审查、模板和审计读取路径均经过同一 deny-by-default 检查。
- 隐私与法律门禁未完成:支持人员可见字段、最小数据集、数据驻留、客户通知、保留期、导出/下载限制和具名法务批准尚未验收。
3. 后续实现准入标准
- 加法迁移建立不可变 grant/revocation 状态、版本与审计模型;任何 UPDATE/DELETE、过期或撤销竞争均有数据库约束和并发测试。
- enforcement point 使用服务端/数据库可信时间,在每个受保护请求上在线读取或验证当前 grant、scope、revision、撤销和会话绑定;默认拒绝,依赖不可用时不得降级放行。
- 支持人员使用独立平台身份和强认证,不共享用户密码、cookie、refresh token 或现有会话;不得伪装成用户主体。
- 短时凭证具备固定 audience、workspace、scope、grant ID、策略版本和不可转移绑定;自动到期和紧急撤销在所有节点达到明确 SLA。
- 每次授权检查和资源访问生成最小披露、不可变、可关联的审计事件;告警、人工复核、导出管控、保留和删除策略通过运营演练。
- 独立渗透/越权测试覆盖跨 workspace、scope 提升、时钟偏移、缓存陈旧、撤销竞态、重放、并发和依赖故障;全部 P0 阻断关闭后再进行发布评审。
4. 回归清单
- 有效材料仍不得在 validation-only 模式返回
access_granted=true。 - 到期边界使用
checked_at >= expires_at,时区缺失或时钟异常 fail closed。 - 账号/工作空间停用、revision 漂移、主体或 scope 不匹配立即拒绝。
- policy hash、grant ID、revocation code/hash、scope 顺序、TTL 或时间篡改均拒绝。
- 相同撤销重放幂等,不同材料不能改写历史撤销。
- API/OpenAPI 不出现 support access、grant、revoke、execute 或 rollback 写入口。
- 真实 PostgreSQL 演练只使用随机 schema,异常和成功路径后均精确清理,凭据不得落盘。
- Web 不出现执行、代入、重试、撤销或共享会话控件。
5. 证据摘要
- Contract API 全量基线:
250 passed, 1 skipped;真实 PostgreSQL stage 19 专项随后单独1/1通过。 - 确定性计划:
9/9;计划/投递/反滥用组合:54/54。 - 隔离 PostgreSQL 原子性演练:
1/1,残留 schema:0。 - support access validation-only:
15/15;与计划层组合:24/24。 - Python compileall、
git diff --check、三服务健康检查通过;运行态危险身份路由0、plan 路由0。
本报告批准继续开发安全基础设施,不批准启用真实身份执行、支持访问、transport、共享会话或人工绕过入口。
6. 第一次整改复核(2026-08-09)
20260809_0044 已完成不可变 validation policy/revocation 持久化、数据库可信时间、并发幂等和数据库硬关闭,关闭了第 2 节第 1 项的 durable state 基础缺口,并部分关闭第 3 项可信时间缺口。SQLite 专项、迁移和真实 PostgreSQL 隔离并发均通过,运行时仍无 support access 路由且 access_enabled=false 由数据库约束。
发布结论仍为 No-Go。尚未关闭的 P0 包括:授权检查与资源读取 TOCTOU、统一 deny-by-default enforcement point、强认证与会话/设备绑定、撤销跨节点传播 SLA 与 kill switch、逐请求不可变审计/告警,以及隐私与法律门禁。真实 support access、身份执行器和共享会话不得启用。
7. 第二次整改复核:锁内 deny-only enforcement(2026-08-09)
第 25 阶段已完成统一 deny-only validation enforcement point、固定动作到 scope/resource 的服务端映射、PostgreSQL 锁后 clock_timestamp() 复核,以及合同/审查资源锚点的同事务锁定。所有决策仍固定 enforcement_status=denied、access_granted=false、executor_enabled=false,未增加 API、资源内容读取、token/session 或 impersonation。
历史 P0 状态更新如下:第 1 项 durable policy/revocation 基础和第 3 项 validation 使用的数据库可信时间已关闭;第 2 项 TOCTOU 与第 7 项统一 enforcement point 只在 deny-only validation 和当前可锁资源锚点范围内部分关闭,尚未覆盖真实资源读取与使用;第 4 项强认证/会话绑定、第 5 项跨节点撤销传播与 kill switch、第 6 项逐请求不可变审计/告警、第 8 项隐私与法律门禁仍未关闭。
新增的内部 enforcement contract 只允许固定资源动作,并在 policy、审批/主体、撤销记录和可锁定资源锚点全部取得行锁后刷新状态。即使 policy_satisfied=true,决策仍固定 enforcement_status=denied、access_granted=false、executor_enabled=false;模板等缺乏稳定资源锚点的动作直接拒绝。该实现未增加路由、transport、凭据、session 或 impersonation。
本阶段已完成验证,但不能宣称完整 check-use TOCTOU 已关闭;真实资源读取尚未接入同一事务,强认证/MFA、设备/会话绑定、撤销传播 SLA、逐请求审计/告警及隐私/法律门禁仍未完成。发布结论继续为 No-Go。
具名法务批准必须来自实际法务责任人对正式版本的可核验证据;AI、研发、测试或运营不得代签、推定、补写或伪造姓名、日期、签名、批准记录及生效版本。没有真实批准证据时,隐私与法律门禁必须保持未完成。
8. 第三次整改复核:安全控制账本与逐请求审计(2026-08-10)
20260809_0045 已补齐 deny-only 内部路径的 fail-closed control、revocation epoch、默认启用的 kill switch、受信认证断言契约、资源锁内 anchor、逐请求不可变 audit 和同事务 outbox。PostgreSQL 并发启动只创建一个 baseline control event,audit 在 outbox 前 flush 以满足即时外键,两者仍在同一事务中原子提交或回滚。
历史 P0 状态再次更新:第 5 项的 durable revocation epoch 和默认 kill switch、第 6 项的逐请求不可变审计/outbox 已在内部 deny-only 范围部分关闭;第 2、4、5、6、7、8 项仍不能整体关闭。原因是当前没有真实资源内容读取、外部 IdP/WebAuthn/硬件 OTP/session 集成、多节点传播测量、kill switch 运维控制面与告警演练、审计消费/告警链路以及具名隐私法律批准。
发布结论继续为 No-Go。运行态不存在 support access API,危险身份写路由为 0,所有决策和数据库约束保持 access_granted=false、executor_enabled=false。revocation_sla_seconds<=5 是待验证的目标,不是已通过的跨节点 SLA;内部请求中的 assertion/hash 也不是认证系统签发或验证证据。