Skip to content

security: .env / credentials / SSH 配下への read / edit を autoforge 側でも path allowlist で二重防御 #23

Description

@shigel

Priority

HIGH

背景

Claude Code Issue #11271 で「confused state で環境変数露出」、Knostic は Claude Code / Cursor で `.env` / credentials を誤って読み書きする事例を複数報告。dotclaude グローバルハーネス側では `settings.json` の `sandbox.filesystem.denyRead` で `/.aws`, `/.ssh`, `~/.config/gcloud`, `.env*`, `terraform.tfstate*` を保護済みだが、autoforge 側でも二重防御として path allowlist / denylist を設けるべき。他環境(dotclaude 未導入の CI、共同開発者)での安全性確保にも必要。

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

  • `autoforge/harness/tools/edit.py` / `view.py` 相当の実装 未検証
  • 未検証: autoforge 単独実行時(dotclaude の sandbox 保護なし)の挙動
  • dotclaude 側保護: `~/.claude/settings.json` で `denyRead` 設定済み

提案

  • `autoforge.yml` に `security.path_denylist` を新設: `.env*`, `/credentials*.json`, `/.aws/`, `/.ssh/`, `/id_rsa*`, `terraform.tfstate*`
  • `edit` / `view` / `search` 実行前にパスを検査、一致したらエラー
  • プロジェクトルート外への path traversal を阻止(`Path.resolve()` 後にルート配下チェック)
  • `--unsafe-paths` で明示オーバーライド可(警告付き、テスト用)

完了条件

  • path denylist 実装
  • path traversal 検査
  • test: denylist パス読み書き試行 → 拒否
  • test: path traversal(`../../../etc/passwd`)→ 拒否
  • 未検証項目の現状確認を 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