问题描述
Hub 分配的验证任务频繁包含 node -e 命令(例如 node -e 'if (1 + 1 !== 2) process.exit(1)'),这些命令被验证器节点的沙箱安全门(根据 GHSA-jxh8-jh77-xh6g)阻止,导致验证失败。验证器无法执行这些命令,因此无法获得奖励,尽管节点本身是健康、质押且在线的。
复现步骤
- 验证器节点运行 evolver 版本 1.85+,启用默认沙箱设置。
- Hub 分配包含
node -e 验证命令的任务。
- 验证器尝试执行验证命令。
- 沙箱安全门阻止
node -e 命令,返回 exitCode: 126 和 [sandbox] rejected: blocked node flag -e。
- 验证失败,验证器无法获得奖励。
预期行为
- Hub 应该在发布时过滤包含
node -e 的验证命令,或者不将这些任务分配给沙箱验证器。
- 验证器应该能够执行分配的任务,或者 Hub 应该提供沙箱安全的验证命令模板。
实际行为
- Hub 分配包含
node -e 的验证命令。
- 沙箱阻止这些命令,导致验证失败。
- 验证器无法获得奖励,尽管节点健康。
分析结果
通过对本仓库代码的分析,发现以下问题:
1. 代码库中存在 node -e 命令使用
- 示例文件:
docs/examples/anti-gene-rollout-suite.json 使用了 node -e 验证命令。
- 构建脚本:
packages/evolver-adapter-public/package.json 的构建脚本使用了 node -e 命令。
- 测试用例:
packages/evolver-core/src/verify/sandboxRunner.test.ts 和 packages/evolver-core/src/verify/sandboxedValidation.test.ts 包含 node -e 测试用例。
2. 验证命令过滤机制不完整
- 存在过滤器:
packages/evolver-cli/src/skill2gep.ts 中的 isValidationCommandAllowed 函数会拒绝 node -e 命令。
- 使用范围有限:该过滤器仅用于技能蒸馏(skill2gep),未在发布流程中使用。
- 缺失 Hub 端过滤:未找到 Hub 端在发布时过滤
node -e 验证命令的逻辑。
3. 文档与实现不一致
- 文档建议:
packages/evolver-cli/src/autoDistillLlm.ts 和 packages/evolver-cli/src/autoDistillTranscript.ts 明确建议不要使用 node -e。
- 示例矛盾:但示例文件
anti-gene-rollout-suite.json 却使用了 node -e 验证命令。
4. 沙箱安全机制已就位
- 阻止逻辑:
packages/evolver-core/src/verify/validation.ts 中的 BLOCKED_NODE_FLAGS 包含 -e、--eval 等标志。
- 沙箱执行器:
packages/evolver-core/src/verify/sandboxRunner.ts 会拒绝这些命令并返回 exitCode: 126。
- 区分机制:验证器可以区分沙箱阻止和真正的验证失败。
建议的解决方案
- 扩展验证命令过滤:将
isValidationCommandAllowed 过滤器集成到发布流程中,拒绝包含 node -e 的验证命令。
- 更新示例文件:将
anti-gene-rollout-suite.json 中的 node -e 验证命令替换为更安全的替代方案(如 node --version)。
- Hub 端过滤:在 Hub 端添加验证命令语法检查,拒绝包含
node -e 的验证命令。
- 文档一致性:确保文档和示例保持一致,避免误导用户。
相关文件和代码
- 示例文件:
docs/examples/anti-gene-rollout-suite.json 第4行
- 验证命令过滤器:
packages/evolver-cli/src/skill2gep.ts 第185-190行
- 沙箱阻止逻辑:
packages/evolver-core/src/verify/validation.ts 第27-38行
- 沙箱执行器:
packages/evolver-core/src/verify/sandboxRunner.ts 第95-100行
- 文档建议:
packages/evolver-cli/src/autoDistillLlm.ts 第224行
影响
- 验证器节点无法获得奖励,尽管节点健康、质押且在线。
- 消耗 CPU 和带宽,但没有收益。
- 可能影响所有运行 v1.85+ 版本且启用默认沙箱设置的 evolver 节点。
问题描述
Hub 分配的验证任务频繁包含
node -e命令(例如node -e 'if (1 + 1 !== 2) process.exit(1)'),这些命令被验证器节点的沙箱安全门(根据 GHSA-jxh8-jh77-xh6g)阻止,导致验证失败。验证器无法执行这些命令,因此无法获得奖励,尽管节点本身是健康、质押且在线的。复现步骤
node -e验证命令的任务。node -e命令,返回exitCode: 126和[sandbox] rejected: blocked node flag -e。预期行为
node -e的验证命令,或者不将这些任务分配给沙箱验证器。实际行为
node -e的验证命令。分析结果
通过对本仓库代码的分析,发现以下问题:
1. 代码库中存在
node -e命令使用docs/examples/anti-gene-rollout-suite.json使用了node -e验证命令。packages/evolver-adapter-public/package.json的构建脚本使用了node -e命令。packages/evolver-core/src/verify/sandboxRunner.test.ts和packages/evolver-core/src/verify/sandboxedValidation.test.ts包含node -e测试用例。2. 验证命令过滤机制不完整
packages/evolver-cli/src/skill2gep.ts中的isValidationCommandAllowed函数会拒绝node -e命令。node -e验证命令的逻辑。3. 文档与实现不一致
packages/evolver-cli/src/autoDistillLlm.ts和packages/evolver-cli/src/autoDistillTranscript.ts明确建议不要使用node -e。anti-gene-rollout-suite.json却使用了node -e验证命令。4. 沙箱安全机制已就位
packages/evolver-core/src/verify/validation.ts中的BLOCKED_NODE_FLAGS包含-e、--eval等标志。packages/evolver-core/src/verify/sandboxRunner.ts会拒绝这些命令并返回exitCode: 126。建议的解决方案
isValidationCommandAllowed过滤器集成到发布流程中,拒绝包含node -e的验证命令。anti-gene-rollout-suite.json中的node -e验证命令替换为更安全的替代方案(如node --version)。node -e的验证命令。相关文件和代码
docs/examples/anti-gene-rollout-suite.json第4行packages/evolver-cli/src/skill2gep.ts第185-190行packages/evolver-core/src/verify/validation.ts第27-38行packages/evolver-core/src/verify/sandboxRunner.ts第95-100行packages/evolver-cli/src/autoDistillLlm.ts第224行影响