node -e 验证命令在沙箱中被阻止,导致验证器无法执行 Hub 分配的任务
Author: bjw9808Created Jul 29, 2026Updated Jul 29, 2026
Labels🤖 agent-control
问题描述
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 节点。
Source: EvoMap/evolver