Skip to content

security: subprocess.run の env を allowlist 方式に統一し子プロセスへのシークレット継承を制御 #22

Description

@shigel

Priority

HIGH

背景

Python `subprocess` はデフォルトで親プロセスの環境変数を完全継承する。エージェントが実行する任意コマンド(`run-cmd`)に `ANTHROPIC_API_KEY` / AWS 資格情報 / `HF_TOKEN` 等が自動で流れ込み、子プロセスが `env` をログ出力すれば即座に LLM コンテキストへ到達しうる。GitGuardian 2025 は「long-lived secrets が違反の 60%」で、最小権限・最短寿命の原則から env allowlist 方式が必須。

現状(未検証 — 実装着手前に要確認)

  • `autoforge/harness/tools/run_cmd.py` 相当の実装 未検証(ファイル配置自体を要確認)
  • 未検証: `subprocess.run` 呼び出しで `env=` が明示されているか(デフォルトなら親プロセス env 全継承)
  • 未検証: Docker 実行時の env 受け渡し(`docker-compose.yml:5,14,22` で `ANTHROPIC_API_KEY` / `GITHUB_TOKEN` 経由)

提案

  • `run-cmd` で `env=` を明示し allowlist(`PATH`, `HOME`, `LANG`, プロジェクトが明示許可した key)のみ継承
  • ステージ単位で env 注入を分岐: `Survey`/`Idea`/`Security` 等ピュア LLM ステージには外部インフラ資格を渡さない
  • `edit` / `view` はクラウド資格から完全切り離し
  • allowlist は `autoforge.yml` で宣言、実行時に diff を警告

完了条件

  • `subprocess.run` 呼び出しの棚卸し(全箇所)
  • allowlist 実装 + config
  • test: 許可外 env が子プロセスから見えない
  • ステージ別の env 分離
  • 未検証項目の再確認結果を PR で記録

参考

Part of #17

Metadata

Metadata

Assignees

No one assigned

    Labels

    securityセキュリティ関連の issue / PR

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions