Skip to content

[tools] Bash の cd の行き先が決められないとき、コマンドの名前まで読み取りとして数え、普通のコマンドを誤って拒否する(#568 のレビューで発見) #580

Closed

Description

@Kewton

背景

#568(PR #579)の直した箇所の再確認(2026-10-03、H-03)で見つかった誤拒否です。どちらも拒否が増える側(厳しい側)で、安全性には関係しません。記録に残る agent の Bash コマンドでは、相対の cd・CDPATH・DIRSTACK を使うものは 0 件なので、今は起きにくい形です。判定の関数を呼んで確かめただけです。

問題

  1. 決められない状態では、コマンドの名前も読み取りの語として数える
    [security][tools] Bash の書き込み検査が同じコマンドの cd・pushd の後の cwd を追わず、symlink を通ってワークスペース外へ書き込める(#509 の調査で発見) #568 は、cd・pushd の行き先が決められないとき(CDPATH・DIRSTACK が出る、cd とループ・関数の組み合わせ、候補が 64 を超える)、2 段目で相対の読み取りの語が 1 つでもあれば拒否します。このとき、ファイルを指さない語(コマンドの名前、予約語、option)まで読み取りの語として数えるため、ほぼすべてのコマンドが拒否されます。

    入力(例) 今の判定 望ましい判定
    CDPATH= cd sub && cargo test 拒否 許可(相対のファイルを読まない)
    for d in a b; do (cd sub && cargo test); done 拒否 許可
    cd を 7 つ重ねた後の tee $ROOT/a.txt 拒否 許可(絶対 path は root の中)
    CDPATH=sub cd link && cat secret 拒否 拒否のまま
  2. 語の一部に DIRSTACK を含むだけで決められないとする
    cd sub && echo MYDIRSTACK は拒否されます。CDPATH も同じく部分一致です。

根拠(PR #579 の HEAD 175b61da。merge 後は develop の同じ箇所)

対処の方向(案。着手前に設計を決める)

受け入れ条件

関連(参考)

対象ファイル(2026-10-17 追記。develop 61cd5afa で再確認)

  • src/tools/bash.rs(決められない場合の拒否::862-876)
  • src/tools/bash_write_guard/working_directory.rs(word.contains("CDPATH")・word.contains("DIRSTACK")::219-222)
  • tests/issue580_bash_undecidable_read_words.rs(新規)

進め方の注意(2026-10-17 追記)

#568・#635・#643 の既存の試験(tests/issue568_bash_cwd_write_targets.rs・tests/issue635_bash_glob_cd_destination.rs ほか)は変えない。変える必要が出たら、着手を止めて PM に返す。

Activity

  1. added a commit that references this issue on Oct 17, 2026
  2. Kewton commented on Oct 17, 2026

    @Kewton
    OwnerAuthor

    PR #691 で merge しました(develop 6f86b0cb、CI・acceptance・Next.js domain oracles すべて success)。

    後続の論点(non-blocker):存在しない相対の行き先を root の中と扱う点、popd・pushd +N を候補にしない点、裸の CDPATH の語が echo の引数でも拒否になる点(develop も同じ)。

    🤖 Generated with Claude Code

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

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions