原文(日本語に翻訳)
acceptEdits モードで、シンボリックリンクされた親ディレクトリを通じて新しいファイルを書き込む際に、作業ディレクトリ外に脱出できてしまうシンボリックリンクバイパスを修正しました
原文(英語)
Fixed symlink bypass where writing new files through a symlinked parent directory could escape the working directory in acceptEdits mode
概要
Claude Code の acceptEdits モード(ファイル編集を自動承認するモード)において、シンボリックリンクされた親ディレクトリを通じて新しいファイルを書き込む場合、書き込み先が作業ディレクトリ外になってしまうセキュリティ上のバイパスが可能でした。この脆弱性により、意図した作業ディレクトリの境界が破られる可能性がありました。修正後はシンボリックリンクを解決した上でパスの検証が行われます。
基本的な使い方
この修正はセキュリティ上重要です。自動的に適用されます。
bash
# acceptEdits モードでの安全な動作
claude --acceptedits
# 修正後: シンボリックリンク経由のパスバイパスが防止される実践例
問題のあったシナリオ
bash
# ディレクトリ構造
/safe-workdir/
└── link-to-outside -> /sensitive/directory/ # シンボリックリンク
# 修正前のバイパス手順:
cd /safe-workdir
claude --acceptedits
# Claude Code に以下のようなファイル作成を依頼
# → link-to-outside/malicious.sh を作成
# → 実際には /sensitive/directory/malicious.sh が作成される
# → 作業ディレクトリ外にファイルが書き込まれる(セキュリティ上の問題)
# 修正後:
# → link-to-outside を解決すると /sensitive/directory/ になると検知
# → 作業ディレクトリ外への書き込みをブロックシンボリックリンクと作業ディレクトリの境界
bash
# 安全な構成(修正後)
/project/
├── src/ # 通常のディレクトリ → 書き込み可
├── docs/ # 通常のディレクトリ → 書き込み可
└── external-link -> /other/project/ # シンボリックリンク
# 修正後: /other/project/ は /project/ の外なので書き込みブロックacceptEdits モードのセキュリティ設定
bash
# acceptEdits モードを安全に使用する場合
# 信頼できるプロジェクトディレクトリでのみ使用する
cd /trusted/project
claude --acceptedits
# シンボリックリンクが含まれる場合は注意が必要
ls -la # シンボリックリンクを確認注意点
- この修正はセキュリティ上重要なため、早急なアップデートを推奨します
acceptEditsモード以外でも同様の検証が行われる場合があります- シンボリックリンクを含むプロジェクトでの使用には引き続き注意が必要です
- この脆弱性は悪意あるプロジェクトがシンボリックリンクを仕込むことで悪用できました