Skip to content

brownfield_orchestrator分割後フォローアップ: セキュリティ指摘(旧コード由来) + _do_phase バグ + テスト拡充 #104

Description

@fukukei23

背景

God file 分割(v3レビュー P1)完了: tools/brownfield_orchestrator.py 485行 → tools/brownfield/ パッケージ5モジュール + thin shim(commit 9578e6c・push 済)。振る舞い保存(baseline 前後比較 PASS)で後方互換維持。

本リファクタは「純粋構造リファクタ(A案)」であり、旧コード由来のセキュリティ指摘・バグは C案 として明示的に scope-out。本Issueに集約する。

詳細spec: docs/superpowers/specs/2026-07-01-brownfield-orchestrator-split-design.md

セキュリティ指摘(すべて旧コード由来・ロジット不改で転記)

HIGH

  • path traversal / 認可不足: tools/brownfield/ui.py _kick_orchestrator(out_root_dir, ...)detect_latest_snapshot(out_root_dir) を呼ぶ際、out_root_dirDEFAULT_OUT 配下にあることを検証していない
    • 修正方向: Path(out_root_dir).resolve().is_relative_to(DEFAULT_OUT.resolve()) チェック追加
  • path traversal via symlink: _sync_picker(selection) が選択パスを resolve するが PICKER_ROOT 配下の検証なし
    • 修正方向: resolve 後に PICKER_ROOT 配下か検証
  • Missing Auth / B104: build_uiauto_launch_with_incrementserver_name='0.0.0.0'(share時)に bind。Gradio 認証なし
    • 修正方向: launch(auth=...) or localhost 制限・ネットワーク保護(B104 は debug 用・切替機構化)

MEDIUM

  • TOCTOU: _sync_picker で resolve したパスを _run_snapshotrun_brownfield_stream で使用。間に symlink 操作可能性
  • 入力検証不足: _kick_orchestrator の branch/qg/policy_override が無検証で runner に渡る
    • 修正方向: re.match(r'^[a-zA-Z0-9_\-/]+$', branch_final)
  • B602: utils.py stream_run が cmd 文字列時に shell=True(docs/security/phase1/REPORT.md で要精査判定)
    • 修正方向: cmd 出所の trust boundary 確認・引数リスト形式への統一

既知バグ(振る舞い保存のため保持)

  • _do_phase フェーズ未実行: core.py run_brownfield_stream 内で _do_phase(...)yield from _do_phase(...) でなく未消費呼出。structure/snapshot 等のフェーズ処理が一切走らない(generator が生成されるだけ)。baseline 4イベントはこのバグ挙動を含む
    • 修正方向: yield from _do_phase(...) に修正後、baseline 再取得

テスト拡充

  • 現状: smoke + baseline 比較(13テスト)のみ。各モジュールの単体テスト薄い
    • 拡充: utils/core の純粋関数・streaming契約・エッジケース

関連

  • v3レビュー P1(本リファクタ): 完了
  • 監査ベースライン: docs/security/baseline/REPORT.mddocs/security/phase1/REPORT.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions