Skip to content

Security: do not auto-discover adapters from untrusted eval bundles #103

Description

@ComicBit

Summary

The bmad-eval-runner scripts automatically load adapter.json or .bmad-eval-adapter.json from beside the cases/queries file. An adapter controls the executable argv and optional host-environment forwarding, and the runner passes it to subprocess.run.

A developer who runs an untrusted evaluation bundle can therefore execute arbitrary local commands as the evaluator user, with any environment values requested by the bundle's adapter. The same root cause exists independently in both run_evals.py and run_triggers.py.

Affected paths

  • skills/bmad-eval-runner/scripts/run_evals.py
  • skills/bmad-eval-runner/scripts/run_triggers.py
  • skills/bmad-eval-runner/references/platform-adapter.md
  • skills/bmad-eval-runner/SKILL.md

Proposed fix

  • Remove sibling adapter-file auto-discovery.
  • Keep only explicit --adapter and BMAD_EVAL_ADAPTER configuration paths.
  • Centralize adapter resolution so both runners share the same trust-boundary behavior.
  • Add regression tests for sibling-file rejection and trusted explicit configuration.

Impact

This is untrusted-file-assisted arbitrary command execution. It requires a developer to run the bundle; it is not a network-exposed or zero-click service.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions