Files
CyberStrikeAI/docs/bug-sheet-review.md
T

12 KiB
Raw Blame History

Bug 表核对与修复

范围:2026-10-06 用户提供的 Bug记录表.xlsx。只修复当前仓库已有功能的已确认缺陷。表内命令和建议只作为待核实证据。

工作流与维护门禁

  • 阶段:P10 缺陷修复。既有代码、接口、测试为上游依据。
  • 分支:codex/bug-sheet-fixes;完成验证后合入 main。
  • 维护策略:narrow_fix。对大文件仅做局部修复,新增测试放独立文件,不做广泛重构。
  • 验收:复现/代码证据确认问题;针对性回归通过;相关包和全仓检查;提交仅包含修复、测试、文档,不包含真实配置或凭据。
  • 生命周期记录合并到本文,避免针对同一缺陷制造无关阶段提交。

已确认待修复

表内条目 证据 修复计划
C2 wait/cancel 资源权限 handler 直接按 ID 查询和取消,缺少 c2ResourceAllowed 与同模块接口一致,先校验任务访问权限,再执行
32 纯文本批量/机器人任务缺少执行证据 batch_queue_executor 和 finalizeRobotAgentSuccess 显式传 true 与普通对话的默认策略一致,允许无工具文本回复,保留 pending/HITL 检查
30、31 角色名路径字符/长度 名称未校验,文件名会转换,存在碰撞 拒绝路径和控制字符、首尾空格、超过 64 字符及文件名碰撞
工作流悬空引用 角色保存与工作流删除均未检查引用 保存时验证存在;删除引用中的工作流返回冲突
4 登录用户名为空 前端无 required,后端空用户名默认 admin 登录接口及页面拒绝空白/超过 64 字符用户名
Profile UA/响应头/Jitter 保存丢失 前端 snake_case 与后端 camelCase 不一致 对齐 JSON 字段;保留 0;拒绝负值/倒置范围
22 取消后显示成功 回传结果无条件更新任务终态 终态保持不变;取消和结果写入使用状态条件检查
同 UUID 旧连接断开误判离线 WS defer 无条件删当前连接及标记 dead 仅当前登记连接可以删除并退役会话,结束心跳 goroutine
23 WebShell 目录路径及假条目 normalizeWebshellPath 删除根斜杠;权限兜底正则接受 ls 错误行 保留 Unix 绝对路径;树/面包屑/父级保持绝对路径;只接受权限格式目录项
6 查看通知未清计数 查看回调只跳转 查看普通事件后标记已读并刷新;待审批通知仍保留待处理状态
13 配置接口明文返回 API Key GetConfig 序列化真实配置 返回掩码;保存时按原配置路径还原;模型测试在服务端解析指定通道凭据
19 WebShell 口令明文回显 列表和创建/更新响应返回 Password 响应掩码;保存时保留/替换/清空;执行按有权限的 connection_id 取服务端凭据
Markdown 智能体字段与重复 ID 保存缺少关键字段和 ID 唯一性检查 创建/更新统一校验 name、ID、指令;ID 不允许文件间重复;创建使用排他文件写入
辅助文件编辑描述丢失 辅助文件保存接口不更新 SKILL.md 元数据 辅助文件禁用描述编辑;描述未保存时阻止切换文件,提示先保存 SKILL.md
C2 终端输出粘连/尾部分号语法错误 Unix 探测直接追加 && pwd,结果按最后一行切分 使用随机分隔标记和换行探测,保留用户命令的输出及退出状态
事实正文的关系语法未生成图谱 关系字段是显式结构化输入,普通正文不是通用关系解析器 按问题表给出的替代方案,明确提示关系应填写到关系字段;保持既有正文语义

不适用

当前仓库未实现的用户容器并发配额、容器生命周期和容器释放后重新调度,不添加对应实现。

验证

  • go test ./internal/handler ./internal/app ./internal/agentfinalizer 通过。
  • 新增 C2 跨用户禁止等待/取消、所有者正常操作、机器人纯文本交付、角色名称边界、工作流引用、登录用户名测试。
  • 前端已有测试存在 HITL 断言失败,正在核实基线;未修改 HITL 脚本。
  • 当前尚未完成全部表内条目核对,也尚未合入 main。
  • go test ./internal/c2 ./internal/database 通过;新终态保护及连接替换测试通过。
  • Profile API 持久化/无效 Jitter 测试和前端实际提交字段测试通过。
  • 前端 HITL 断言问题在原始提交 82b0af1 的隔离导出目录也可复现,属于基线问题。
  • go test ./... 全仓通过。
  • WebShell 路径、错误输出、目录树测试与通知查看/待审批区分测试通过。
  • 配置凭据处理保留既有字段与空字符串清除语义;掩码标记只用于已保存的同路径凭据,新通道不能直接保存掩码。通道探活新增可选 channel_id,模型列表/审查测试支持可选凭据范围,避免同 URL 多密钥选择错误。
  • 新增 GET 配置不泄漏/不变更内存、掩码保留/替换/清空、歧义拒绝、WebShell 回显及执行凭据、Markdown 创建/更新唯一性、技能描述切换测试。
  • C2 Shell 回归只提取模板中的 Shell 辅助函数,不运行传输循环。验证无换行、有换行、尾部分号、注释、失败退出、带空格目录切换;Unix 系统通过,Windows 路径未修改。模板修复适用于重新生成的客户端。

追加:输入校验、权限入口与回传归属

  • Excel 第 40 行:权限管理页三个新建角色/添加成员按钮补上 rbac:write 标记,复用现有隐藏、禁用与点击守卫。前端用权限被拒绝的真实守卫验证入口不可见且不可点击。
  • Excel 第 41 行:并发数内联编辑对空值、小数、0、9 等明确报错并保留编辑框,不发送请求;队列元数据更新在任何修改前拒绝越界值。保留旧配置加载时的归一化行为。
  • Excel 第 42 行:项目设置前端和更新 API 均拒绝空/纯空格名称;API 省略名称仍允许部分更新,拒绝时描述等字段不发生部分保存。
  • Excel 第 44 行:后端 URL 补齐使用 IP 非空 作为分支条件,导致已由前端解析的 IP 被再填入 Domain。改为先判别 URL 主机类型再补齐缺失 IP;IPv4、IPv6 预填及仅 URL 三条数据库保存回归通过。第 22 行截图与第 25 行为同一 WebShell 路径丢失/错误文本条目问题。
  • Excel 第 36 行:WebSocket 与 TCP Beacon 回传按连接已登记的会话和监听器校验;HTTP 回传及取任务先校验监听器;已有 UUID 不允许通过其他监听器重新登记改变归属。未授权回传不能更改任务状态、结果或产生完成事件。HTTP 同监听器下的会话认证尚待继续核对,本项不标为全部完成。
  • 验证:form-validation.test.cjs 4 项通过;项目空名称无部分保存、并发数非法无修改、IP URL 入库及结果来源拒绝均新增回归。全部包回归在提交前再次执行。

追加:工作流与现有行为核对

  • Excel 第 26 行:新建工作流 ID 限制为以字母/数字开头,仅含字母、数字、下划线、连字符,最多 128 字节;重复 POST 使用数据库原子插入保护,返回 409 且不改变旧版本;PUT 不得更改 ID,不存在目标返回 404。已存储的旧格式 ID 仍可原位编辑。
  • Excel 第 31 行:工具 arguments 先解析 JSON,再递归展开字符串中的 {{inputs...}} 等模板,避免带引号/换行的值破坏 JSON;显式字段绑定保持优先。实际工作流调用测试工具,验证传入值已展开且原始引号完整保留。
  • Excel 第 45 行:流式和非流式入口统一使用工作流自身状态进行最终回复检查,不强制要求本来不应存在的工具执行记录;实际 start→output 流程能完成,真实 HITL 暂停/拒绝流程保留 awaiting_hitl/cancelled 和拒绝原因,不变成 missing_execution_evidence 或成功。
  • Excel 第 62 行:列表/详情 API 附带图校验错误;前端将错误显示为“校验未通过”及错误色,当前选中草稿的本地校验变化同步更新列表与画布标题。配置的 enabled 值保留,以免验证展示改变用户保存的数据。
  • Excel 第 11 行:当前 HTML 的 fact-modal-summary 标注“摘要(索引一行)”,saveFactModal 读取 summary 并必填检查,已存在原描述称缺失的字段。第 16 行是跨项目去重建议,当前 list_vulnerabilities 按授权项目/会话列举以避免重复,不新增跨项目合并。第 17 行原记录已注明没有点击保存;当前 tool-guard 草稿变更有未保存标识,只有保存动作 PUT 才改变服务端配置。
  • Excel 第 57 行:执行当前 resetAuditLogFilters 与查询参数构建函数,验证关键词、类别、动作、结果、时间条件全部清空,页码回到 1,模板按钮调用此函数。原描述在当前实现未复现。
  • 验证:新增工作流保存/API 校验、纯文本与 HITL 实际运行、实际工具参数传递、列表标记和审计重置回归;后端完整测试及新增前端测试在提交前执行。

追加:密码表单反馈与传输核对

  • Excel 第 3、6 行:登录空密码通过自定义校验展示原因并聚焦字段,编辑后清除旧错误;显示/隐藏密码按钮在关闭或重新打开登录时恢复隐藏。修改密码显示当前密码必填、新密码长度与确认不一致的具体原因,服务端失败也保留在表单中。
  • 四项真实脚本回归通过;隔离预览使用实际模板片段与样式,在 375px 登录布局和桌面密码表单中验证提示、焦点和按钮。预览未使用真实账号凭据。
  • Excel 第 4 行:HTTP 下请求体可被截获,属于部署传输配置风险。当前服务已有 TLS、HTTP 到 HTTPS 重定向和同端口协议分流;现有 TLS/重定向测试通过。应在部署中启用 HTTPS,未加入额外客户端加密协议或改动凭据配置。

追加:资产语言与导入兼容

  • Excel 第 8、9 行:截图与模板对照证明灰色 CN/Beijing 是 placeholder,省市是手工输入,不是时区识别结果。示例增加中、英、俄翻译;不修改用户保存的地理字段,也不新增地区识别或联动能力。
  • Excel 第 10 行:CSV 与 XLSX 表头采用当前语言,环境、重要性、状态与已知风险等级显示本地化标签。原始地址、地区、项目、标签、未知枚举值保持原样。导入兼容旧英文列名与当前语言的导出列名、枚举值。
  • 验证:7 项测试通过,包含使用仓库内实际 SheetJS 生成和读取 CSV/XLSX,再调用真实导入解析;中、英、俄三种语言均验证地址、项目归属、带引号/换行标题、标签和枚举值不丢失。

追加:监听器表单与保存入口

  • Excel 第 50 行:编辑保存使用 document 点击委托,但 c2-modal 内层 inline stopPropagation 阻止按钮到达委托。移除内层阻断;背景关闭本来已检查 event.target===this,不会因内部点击关闭。验证实际委托分发到真实 saveListener 后发送 PUT 并在成功后关闭。
  • Excel 第 23 行:名称、类型、端口增加必填标识;创建/编辑均提示并聚焦具体错误字段,端口仅允许 1–65535 整数,不再接受 parseInt 的小数或尾随文本。网络/响应解析失败显示错误并保留表单。
  • 编辑 API 在修改字段前检查空名称和端口范围;数据库回归验证非法请求不部分保存、合法编辑正常落库。5 项前端测试和针对性后端测试通过。

追加:回连地址生成校验

  • Excel 第 52 行:截图中的 bad host/abc 原先会直接拼入 URL。单行生成与 Beacon 构建均在生成前校验 IP/DNS 主机名,拒绝协议、路径、端口、空格、非法数字 IP 与命令片段;不执行 DNS 查询,也不改变地址解析优先级。
  • URL 以监听器协议生成,HTTPS 使用 https;IPv6 使用 net.JoinHostPort 补齐方括号,普通域名及 IPv4 保持原格式。
  • 主机校验覆盖全部单行类型;真实 API 验证非法输入返回 400、合法域名与 IPv6 正常生成,测试仅使用 test-only-token。