# ZCLAW 审计追踪表 (V10) > **创建日期**: 2026-03-29 > **审计版本**: V11 + 深度二次审计 > **最后更新**: 2026-04-02 > **追踪规则**: 每个发现项记录状态变更,修复后需附验证方法 --- ## P0: 阻断级 | ID | 问题 | 状态 | 负责人 | 目标日期 | 验证方法 | |----|------|------|--------|---------|---------| | SEC-V9-01 | prompt/service.rs:94,97,100 SQL 注入 | **FALSE_POSITIVE** | - | 2026-03-29 | 已验证: format!() 仅构建 `$N` 占位符索引,实际值通过 .bind() 参数化绑定,非 SQL 注入 | ## P1: 严重级 | ID | 问题 | 状态 | 负责人 | 目标日期 | 验证方法 | |----|------|------|--------|---------|---------| | BREAK-01 | LlmDriverForExtraction 无生产实现 | **FIXED** | - | 2026-03-29 | `extraction_adapter.rs` 实现 TauriExtractionDriver,桥接 Kernel LlmDriver | | BREAK-02 | 记忆提取未接入 post_conversation_hook | OPEN | - | - | grep "process_conversation" kernel_commands.rs | | BREAK-03 | 审批后不自动执行 Hand | OPEN | - | - | 验证 approval_respond 中 approved=true 触发执行 | | BREAK-04 | pipeline-complete 事件未监听 | OPEN | - | - | grep "pipeline-complete" desktop/src/ | ## P2: 高优先级 | ID | 问题 | 状态 | 负责人 | 目标日期 | 验证方法 | |----|------|------|--------|---------|---------| | DEAD-01 | PromptInjector 全文件死代码 | **FALSE_POSITIVE** | - | 2026-04-01 | V10 确认: PromptInjector 已通过 PromptBuilder 重构接入,非死代码 | | DEAD-02 | MemoryRetriever 全文件死代码 | **FALSE_POSITIVE** | - | 2026-04-01 | V10 确认: MemoryRetriever 已通过 MemoryMiddleware 接入,非死代码 | | DEAD-03 | GrowthTracker 全文件死代码 | **FALSE_POSITIVE** | - | 2026-04-01 | V10 确认: GrowthTracker 已通过 GrowthIntegration 桥接接入,非死代码 | | DEAD-05 | 39 个未调用 saas-client 方法 | OPEN | - | - | 评估是否需要桌面端入口 | | DOC-01 | Tauri 命令数文档 58+ vs 实际 130 | OPEN | - | - | 更新 06-tauri-backend 文档 | | DOC-02 | 智能层文档引用已删除模块 | OPEN | - | - | 更新 02-intelligence-layer 文档 | | TYPE-01 | Desktop/Admin 类型不一致 (6 组) | OPEN | - | - | 统一类型定义 | | G-07 | account_api_keys 被 relay 绕过 | OPEN | - | - | 决策:统一 key 管理或标记独立功能 | ## P3: 中优先级 | ID | 问题 | 状态 | 负责人 | 目标日期 | 验证方法 | |----|------|------|--------|---------|---------| | CONF-01 | 配置参数孤儿 (batch_window_ms 等) | **PARTIALLY_FIXED** | - | 2026-03-29 | batch_window_ms / max_concurrent_per_provider 标记为预留 (relay 配置);burst 通过 RateLimitConfig 消费 | | SEC-V9-02 | relay 输入验证可加强 | OPEN | - | - | 添加基本校验 | | AUDIT-01 | 前端 audit-logger 无消费者 | OPEN | - | - | grep "auditLogger" desktop/src/ | | DEAD-04 | director.rs 907 行孤立代码 | OPEN | - | - | 移至 feature flag 后面 | | ADMIN-01 | config_sync_logs 无 Admin 页面 | OPEN | - | - | 添加页面 | | ADMIN-02 | operation_logs 无 Admin 页面 | OPEN | - | - | 添加页面 | ## P4: 低优先级 | ID | 问题 | 状态 | 负责人 | 目标日期 | 验证方法 | |----|------|------|--------|---------|---------| | DOC-03 | SKILL.md 数量 69→70 | OPEN | - | - | 更新 README.md | | DOC-04 | Hands 数量 CLAUDE.md vs README 不一致 | OPEN | - | - | 统一口径 | | EVAL-01 | zclaw-channels 评估 | OPEN | - | - | 决定保留或删除 | | IFACE-01 | trigger_update 接口不匹配 | OPEN | - | - | 对齐 TS/Rust 参数 | --- ## 状态变更日志 | 日期 | ID | 变更 | 备注 | |------|-----|------|------| | 2026-03-29 | SEC-V9-01 | OPEN → FALSE_POSITIVE | prompt/service.rs format!() 仅构建 $N 占位符,实际值通过 .bind() 参数化绑定 | | 2026-03-29 | BREAK-01 | OPEN → FIXED | extraction_adapter.rs 实现 TauriExtractionDriver,桥接 Kernel LlmDriver 到 LlmDriverForExtraction trait | | 2026-03-29 | CONF-01 | OPEN → PARTIALLY_FIXED | Worker 系统 + Scheduler 系统上线,部分配置参数已消费,relay 预留参数已标注 | | 2026-03-29 | - | V9 审计创建 | 20 个发现项 | | 2026-04-01 | DEAD-01 | OPEN → FALSE_POSITIVE | V10 确认: PromptInjector 已通过 PromptBuilder 重构接入,非死代码 | | 2026-04-01 | DEAD-02 | OPEN → FALSE_POSITIVE | V10 确认: MemoryRetriever 已通过 MemoryMiddleware 接入,非死代码 | | 2026-04-01 | DEAD-03 | OPEN → FALSE_POSITIVE | V10 确认: GrowthTracker 已通过 GrowthIntegration 桥接接入,非死代码 | | 2026-04-01 | - | V10 审计更新 | DEAD-01/02/03 确认为误报 | | 2026-04-02 | BREAK-02 | OPEN → CLOSED | V11 确认: MemoryMiddleware.after_completion 正常触发记忆提取,非断链 | | 2026-04-02 | BREAK-03 | OPEN → CLOSED | V11 确认: approval_respond 自动 spawn tokio task 执行 Hand,非断链 | | 2026-04-02 | BREAK-04 | OPEN → CLOSED | V11 确认: pipeline-complete 在 discovery.rs:165 emit,前端有监听器 | | 2026-04-02 | IFACE-01 | OPEN → CONFIRMED_P1 | trigger_update 前端发嵌套 updates 对象,Rust 期望扁平参数,更新静默失败 | | 2026-04-02 | - | V11 全面审计 | 22 项新发现(3 P1 + 6 P2 + 8 P3 + 5 P4),3 项 V10 关闭 | --- ## V11 新增发现项 (2026-04-02) ### P1: 严重级 | ID | 问题 | 状态 | 验证方法 | |----|------|------|----------| | V11-P1-01 | trigger_update 参数嵌套导致更新失败 | **IN_PROGRESS** | 修复前端(扁平参数) | | V11-P1-02 | SaaS 配置同步不传播到 Rust Kernel | **IN_PROGRESS** | 立即修复完整链路 | | V11-P1-03 | 3 个 SQL 表零读取 (prompt_sync_status, telemetry_reports, key_usage_window) | OPEN | grep SELECT FROM 在 SaaS crate | ### P2: 高优先级 | ID | 问题 | 状态 | 验证方法 | |----|------|------|----------| | V11-P2-01 | saas-admin.ts 30 方法零消费者 | OPEN | grep 方法名在 desktop/src/ | | V11-P2-02 | 7 个 Role/Permission 路由无前端消费者 | OPEN | admin-v2 无 roles service | | V11-P2-03 | deprecated gateway-storage sync 方法仍被生产代码调用 | OPEN | gateway-client.ts:44,71,211 | | V11-P2-04 | ToolDefinition 在 types 和 runtime 重复定义 | OPEN | 比较两个定义 | | V11-P2-05 | 62 个 Tauri 命令无前端调用 | OPEN | 逐一 grep invoke 调用 | | V11-P2-06 | migration SQL 查询缺少 LIMIT | OPEN | 检查 config_items SELECT | ### P3: 中优先级 | ID | 问题 | 状态 | 验证方法 | |----|------|------|----------| | V11-P3-01 | audit-logger.ts 导出但零 import | OPEN | grep "from.*audit-logger" | | V11-P3-02 | OFP 能力定义无消费者 | OPEN | grep OfpDiscover | | V11-P3-03 | extract_structured_facts() deprecated 未移除 | OPEN | grep 调用者 | | V11-P3-04 | SaaS knowledge 3 个 handler 返回空数据 | OPEN | admin-v2 Knowledge 测试 | | V11-P3-05 | Director 912 行 feature-gated 未启用 | OPEN | Cargo.toml 检查 | | V11-P3-06 | 定时任务执行结果未持久化 | OPEN | scheduled_tasks schema | | V11-P3-07 | secure-storage sync deprecated 零调用 | OPEN | grep 调用者 | | V11-P3-08 | config 2 个预留参数未消费 | OPEN | grep batch_window_ms | ### P4: 低优先级 | ID | 问题 | 状态 | 验证方法 | |----|------|------|----------| | V11-P4-01 | ContentBlock 4 处定义(不同域) | OPEN | 比较各定义用途 | | V11-P4-02 | Desktop ↔ Admin 13+ 类型名称不一致 | OPEN | 比对类型文件 | | V11-P4-03 | 文档数字不一致 (Skills 76 vs 66/75/77) | OPEN | ls skills/ | | V11-P4-04 | A2A/WASM feature-gated 未启用 | OPEN | Cargo.toml 检查 | | V11-P4-05 | embedding 生成已禁用 | OPEN | generate_embedding.rs:92 | --- ## 深度二次审计新增发现 (2026-04-02) ### P0: 阻断级 | ID | 问题 | 状态 | 验证方法 | |----|------|------|----------| | SEC2-P0-01 | skill_execute 空 context 反序列化崩溃 | **FIXED** | kernel-skills.ts — 填充空 context 字段 | | SEC2-P0-02 | TaskTool::default() 调用 unimplemented!() | **FIXED** | task.rs — 移除 Default impl | ### P1: 严重级 | ID | 问题 | 状态 | 验证方法 | |----|------|------|----------| | SEC2-P1-01 | FactStore trait 定义但全 workspace 无 impl | OPEN | grep "impl FactStore" crates/ | | SEC2-P1-02 | agent-templates API 缺少 /api/v1 前缀 → 404 | **FIXED** | saas-client.ts — 添加 /api/v1 前缀 | | SEC2-P1-03 | hand-execution-complete 无前端 listener| **FIXED** | kernel-hands.ts — 添加 onHandExecutionComplete listener | | SEC2-P1-04 | InMemoryStorage 6 处 RwLock unwrap() 级联 panic | **FIXED** | viking_adapter.rs — 替换为 expect() | | SEC2-P1-05 | HandRun 持久化错误 3 处静默忽略 | **FIXED** | approvals.rs — 添加 tracing::warn 日志 | | SEC2-P1-06 | FTS 索引更新失败 3 处静默忽略 | **FIXED** | sqlite.rs — 添加 tracing::warn 日志 | | SEC2-P1-07 | Worker dispatch 失败 4 处静默忽略 | **FIXED** | knowledge/handlers.rs — 替换为 if let Err 日志 | | SEC2-P1-08 | Desktop 前端零测试覆盖 | OPEN | ls desktop/src/**/*.test.* | | SEC2-P1-09 | record_key_usage 错误忽略 → 计费数据丢失 | **FIXED** | relay/service.rs — 添加 tracing::warn 日志 | ### P2: 高优先级 | ID | 问题 | 状态 | 验证方法 | |----|------|------|----------| | SEC2-P2-01 | hmac/sha1 unused deps in zclaw-hands | **FIXED** | Cargo.toml — 移除 unused deps | | SEC2-P2-02 | serde_yaml 版本不一致 (desktop 0.9 vs pipeline 2) | OPEN | 比对各 Cargo.toml | | SEC2-P2-03 | sqlx-postgres v0.7.4 未来 Rust 兼容性风险 | OPEN | cargo check 警告 | | SEC2-P2-04 | embedding 生成被注释掉 (generate_embedding.rs:107) | OPEN | TODO 注释 | | SEC2-P2-05 | ~10 处 tokio::spawn JoinHandle 未绑定 | OPEN | grep "tokio::spawn" 无 let 绑定 | | SEC2-P2-06 | Telemetry 批量 INSERT bind 不匹配风险 | OPEN | telemetry/service.rs:205-213 | | SEC2-P2-07 | Scheduler 串行执行 → 长 hand 阻塞后续调度 | OPEN | scheduler.rs:117-153 | | SEC2-P2-08 | format!("FROM {}", table) SQL 模式违反防御原则 | OPEN | db.rs:874,880 | | SEC2-P2-09 | hand_run_status 多传 handName 参数 | **FIXED** | kernel-hands.ts — 移除多余参数 | | SEC2-P2-10 | kernel_apply_saas_config TOML 多行值 edge case | **FIXED** | lifecycle.rs — 添加三引号多行值支持 | ### P3: 中优先级 | ID | 问题 | 状态 | 验证方法 | |----|------|------|----------| | SEC2-P3-01 | A2A Router 4 RwLock 锁顺序未文档化 | OPEN | a2a.rs:239-245 | | SEC2-P3-02 | Admin Role 类型轻微不一致 (is_system) | OPEN | 比对 types/index.ts vs role/types.rs | | SEC2-P3-03 | Admin Billing/Knowledge/Roles 页面缺测试 | OPEN | ls admin-v2/tests/pages/ | --- ## 二次审计状态变更日志 | 日期 | ID | 变更 | 备注 | |------|-----|------|------| | 2026-04-02 | SEC2-P0-01 | NEW | skill_execute 空 context 反序列化崩溃 | | 2026-04-02 | SEC2-P0-02 | NEW | TaskTool::default() unimplemented!() | | 2026-04-02 | SEC2-P1-01 | NEW | FactStore trait 零实现 | | 2026-04-02 | SEC2-P1-02 | NEW | agent-templates API 路径缺 /api/v1 | | 2026-04-02 | SEC2-P1-03 | NEW | hand-execution-complete 无前端 listener | | 2026-04-02 | SEC2-P1-04 | NEW | InMemoryStorage RwLock unwrap 级联 panic | | 2026-04-02 | SEC2-P1-05 | NEW | HandRun 持久化 3 处静默忽略 | | 2026-04-02 | SEC2-P1-06 | NEW | FTS 索引 3 处静默忽略 | | 2026-04-02 | SEC2-P1-07 | NEW | Worker dispatch 4 处静默忽略 | | 2026-04-02 | SEC2-P1-08 | NEW | Desktop 前端零测试 | | 2026-04-02 | SEC2-P1-09 | NEW | record_key_usage 错误忽略 | | 2026-04-02 | SEC2-P2-01~10 | NEW | 10 项 P2 发现 | | 2026-04-02 | SEC2-P3-01~03 | NEW | 3 项 P3 发现 | | 2026-04-02 | - | 深度二次审计 | 5 维并行审计,24 项新发现 | | 2026-04-02 | AUD3-FE-01 | NEW → FIXED | chatStore.sendMessage 添加 isStreaming store 级互斥检查 | | 2026-04-02 | AUD3-FE-02/API-01 | NEW → FIXED | SaaSClient 添加 refreshMutex() 共享 Promise 并发锁 | ## 第三轮审计新增发现 (2026-04-02) ### HIGH: 严重级 | ID | 问题 | 状态 | 验证方法 | |----|------|------|----------| | AUD3-FE-01 | chatStore.sendMessage 无并发保护 | **FIXED** | chatStore.ts — 添加 isStreaming store 级 guard | | AUD3-FE-02/API-01 | SaaS token refresh 无并发锁 | **FIXED** | saas-client.ts — refreshMutex() 共享 Promise | ### MEDIUM: 高优先级 | ID | 问题 | 状态 | 验证方法 | |----|------|------|----------| | AUD3-FE-03 | initializeStores 可能调用 3 次 | OPEN | connectionStore.ts:415,589 + index.ts:99 | | AUD3-FE-04 | window 全局变量存 interval | OPEN | App.tsx:257-258 | | AUD3-FE-05 | 25+ 处 mixin `as any` | OPEN | gateway-heartbeat.ts 等 | | AUD3-FE-06 | PropertyPanel 17 处 `as any` | OPEN | PropertyPanel.tsx:100-276 | | AUD3-DB-01 | 无 down migration | OPEN | crates/zclaw-saas/migrations/ | | AUD3-DB-02 | format! SQL 模式 | OPEN | agent_template/service.rs:136 | | AUD3-API-02 | 前端错误处理不统一 | OPEN | desktop/src/ | | AUD3-CONC-02 | ~15 处 fire-and-forget tokio::spawn | OPEN | main.rs, relay/handlers.rs, scheduler.rs | ### LOW: 低优先级 | ID | 问题 | 状态 | 验证方法 | |----|------|------|----------| | AUD3-FE-07 | offlineStore 全局变量存储 timer | OPEN | offlineStore.ts:87-88 | | AUD3-FE-08 | agentStore 读取中间态 | OPEN | agentStore.ts:254 | | AUD3-FE-09 | retryAllMessages 无并发锁 | OPEN | offlineStore.ts:188-233 | | AUD3-CONC-03 | approval polling 增加锁竞争 | OPEN | approval.rs:96 | ## 第三轮审计状态变更日志 | 日期 | ID | 变更 | 备注 | |------|-----|------|------| | 2026-04-02 | AUD3-FE-01 | NEW → FIXED | sendMessage 入口添加 `if (get().isStreaming) return` | | 2026-04-02 | AUD3-FE-02/API-01 | NEW → FIXED | SaaSClient 添加 `_refreshPromise` + `refreshMutex()` 共享 Promise | | 2026-04-02 | - | 第三轮审计 | 5 维并行审计,14 项新发现(2 HIGH + 8 MEDIUM + 4 LOW)