Skip to content

node -e 验证命令在沙箱中被阻止,导致验证器无法执行 Hub 分配的任务 #609

Description

@bjw9808

问题描述

Hub 分配的验证任务频繁包含 node -e 命令(例如 node -e 'if (1 + 1 !== 2) process.exit(1)'),这些命令被验证器节点的沙箱安全门(根据 GHSA-jxh8-jh77-xh6g)阻止,导致验证失败。验证器无法执行这些命令,因此无法获得奖励,尽管节点本身是健康、质押且在线的。

复现步骤

  1. 验证器节点运行 evolver 版本 1.85+,启用默认沙箱设置。
  2. Hub 分配包含 node -e 验证命令的任务。
  3. 验证器尝试执行验证命令。
  4. 沙箱安全门阻止 node -e 命令,返回 exitCode: 126[sandbox] rejected: blocked node flag -e
  5. 验证失败,验证器无法获得奖励。

预期行为

  • 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.tspackages/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.tspackages/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
  • 区分机制:验证器可以区分沙箱阻止和真正的验证失败。

建议的解决方案

  1. 扩展验证命令过滤:将 isValidationCommandAllowed 过滤器集成到发布流程中,拒绝包含 node -e 的验证命令。
  2. 更新示例文件:将 anti-gene-rollout-suite.json 中的 node -e 验证命令替换为更安全的替代方案(如 node --version)。
  3. Hub 端过滤:在 Hub 端添加验证命令语法检查,拒绝包含 node -e 的验证命令。
  4. 文档一致性:确保文档和示例保持一致,避免误导用户。

相关文件和代码

  • 示例文件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 节点。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions