2026.05.18 发布 v0.2.2
🛡️ 安全修复
hypervisor:vmm-sys-util升级至 0.12.1(CVE-2023-50711, GHSA-875g-mfp6-g7f9):FamStructWrapper::deserialize未验证 header 长度与柔性数组长度是否匹配,可导致 safe Rust 代码触发越界内存访问。现已固定为 hypervisor workspace 所有 crate 共享的版本。agent/hypervisor:bytes和env_logger安全依赖升级,作为同批依赖刷新的一部分。- 回滚
timecrate 升级(CVE-2026-25727):CubeSandbox 仅使用Rfc3339进行时间戳格式化输出,从不对不可信输入执行Rfc2822解析,攻击面不可达。该升级已回滚,待 MSRV 就绪后单独跟进处理。
🛠️ 关键修复
- 修复 CubeMaster 模板镜像任务重复创建问题:在
template_image_job表新增request_id字段并添加(request_id, operation)唯一索引,使任务提交具备幂等性,彻底消除并发或重试 API 调用引发的重复构建任务。 - 修复
cubecli exec在 stdin EOF 时的 nil 指针 panic:StdinCloser.Read在 stdin 到达 EOF 时触发 nil 指针解引用,导致 exec 生命周期被静默中断。修复后改用errors.Is(err, io.EOF)进行正确的错误包装比对,shim 日志现可正常输出成对的 exec 生命周期记录。 - 修复 PVM 模板的 ext4 artifact 运行时文件物化问题:简化
RefreshArtifactRuntimeFiles、validateArtifactRuntimeFilesPresent和ensureArtifactRuntimeFiles,使其仅处理内核文件;将copyKernelFileAtomically重命名为CopyFileAtomically,支持在包外复用。
✨ 功能增强
- E2B 兼容默认暴露端口:默认沙箱暴露端口由 8080/32000 改为 49983,与 E2B 沙箱协议对齐。
CubeMaster成为默认端口的唯一权威来源,Cubelet和network-agent中的硬编码默认值已移除。 - Cubelet 存储插件支持配置
cmdTimeout:在存储插件 TOML 配置中新增可选cmd_timeout字段,替代原有硬编码的 3 秒超时,允许运维人员在高并发负载下提高大文件 ext4 操作的超时限制,无需重新编译。字段缺省时行为不变。 - Cubelet
newExt4RawByReflinkCopy错误诊断增强:错误信息现在包含操作耗时、目标/基础文件大小及可用磁盘空间,格式为[step=N/4 cmd="…" elapsed=…ms target=size=… base=size=… free=…B]。 - 部署脚本支持从
.env同步 CubeMaster 自定义端口:cubemaster.yaml引入__CUBE_SANDBOX_MYSQL_PORT__/__CUBE_SANDBOX_REDIS_PORT__占位符,由install.sh从.env文件自动替换,无需手动修改 YAML。
⚙️ 工程改进
cubecli: 移除废弃的listmd命令:删除无法访问的listmd子命令及其 128 行实现代码。
🤖 CI / DevOps
- Claude 驱动的 AI 代码审查与 issue 分类自动化:在
.agents/agents/下引入五个 AI 审查 Agent(代码质量、性能、安全、测试覆盖率、文档准确性)。自动化工作流负责 PR 代码审查、重复 issue 检测和 issue 标签分类。新增scripts/gh.sh和scripts/edit-issue-labels.sh辅助脚本。
📚 文档更新
- 新增
CONTRIBUTING_zh.md:CONTRIBUTING.md的完整中文翻译版本。 - 社区文档 PR 要求放宽:
CONTRIBUTING.md和CONTRIBUTING_zh.md均改为支持单语种提交,双语文档为可选项。 - 计算节点端口分配范围文档化:
docs/architecture/network.md(中英文)新增三段端口范围说明:10000–19999(network-agent)、20000–29999(CubeProxy 沙箱访问)、30000–65535(CubeVS SNAT)。 - 新增社区文档章节:VitePress 新增双语故障排查、用例和集成三个章节,并配置 CI 工作流强制执行双语一致性检查。
- 域名更新:CNAME 从
docs.cubesandbox.ai切换至cubesandbox.com。 - 修复
browser-sandbox示例:新增缺失的load_dotenv()调用和python-dotenv依赖,确保.env变量在脚本运行前正确加载。 - 微信群二维码更新。