Claude Codeには、起動時のメモリ読み込み処理においてシンボリックリンク(symlink)の扱いに関する欠陥があり、クローンしたリポジトリの外部にある読み取り可能なファイルが、明示的なユーザー承認を経ることなく意図せず露出してしまう可能性があることがわかりました。
この問題は、ツールがシンボリックリンクをたどること自体(ファイルシステムでは標準的な挙動です)に起因するのではなく、セキュリティ分類とファイル読み取りロジックがそれぞれ異なるパスを評価してしまう不整合に起因しています。
Securitytraining courses
Claude Codeのシンボリックリンクの欠陥
リポジトリ内では、CLAUDE.mdファイルや.claude/rules/ディレクトリ内のファイルが@importディレクティブを使用して、ドキュメントやプロジェクトの指示をClaude Codeの初期コンテキストに取り込むことができます。

例えば、@./docs/setup.mdを使用すると、モデルとの最初のやり取りの前にそのファイルが読み込まれます。しかし研究者たちは、インポートがリポジトリ内のシンボリックリンクを参照している場合、分類は字面上のパス(例: ./link)に基づいて行われる一方、その後の読み取り処理はシンボリックリンクをたどって実際の参照先に到達してしまうことを発見しました。
これにより、同意と出所(プロベナンス)の不整合が生じます。あるシンボリックリンク(ここでは「link」と呼びます)が外部の読み取り可能なファイルを指している場合でも、そのシンボリックリンク自体はリポジトリ内に存在するため、Claude Codeはそのインポートを「内部」として分類してしまう可能性があります。
その後、読み取り処理の際にオペレーティングシステムがシンボリックリンクを解決するため、プロジェクトのルート外にあるコンテンツが意図せず起動時のメモリコンテキストに取り込まれてしまう可能性があります。
通常であれば、同じ外部の参照先を直接インポートした場合、Claude Codeから外部インポートに関する警告がトリガーされます。しかし、シンボリックリンク経由の場合はこの警告が表示されません。
重要な違いはタイミングにあります。インポートされたコンテンツは、Claude Codeのモデルが何らかの操作を実行したり、ファイル読み取りツールを呼び出したりする前に、初期プロンプトに読み込まれてしまいます。
実際にキャプチャされたリクエストでは、インポートされた内容はたとえプロジェクト外部を出所とするデータであっても「コードベースにチェックインされたプロジェクトの指示」というラベルが付けられていました。解決済みのファイルシステムパスはそのコンテキストブロック内に表示されないため、ファイルの本当の出所がわかりにくくなっています。
Tegoの研究者たちはこの挙動を検証し、Claude Codeバージョン2.1.215において、無害なアカウントデータベースファイルのコピーを使って再現に成功しました。彼らは、絶対パスのシンボリックリンク参照先、相対パスのディレクトリトラバーサルのいずれも、ユーザーアカウントに読み取り権限がある限り、リポジトリ外部のファイルにアクセスできることを確認しています。

開発者のワークステーション、CIランナー、コンテナ、標準イメージなどでは、機密性の高いファイルの場所がある程度予測可能な場合があります。ただし、「~」のようなシェルの省略記法はファイルシステムAPIでは展開されない点には注意が必要です。
今回の発見は、Claude Codeで過去に確認された2件のシンボリックリンク関連の脆弱性、CVE-2025-59829とCVE-2026-25724に類似しています。いずれのケースでも、セキュリティプロトコルが未解決のパスを評価する一方で、ファイルシステム操作はシンボリックリンクをたどって別の参照先に到達していました。
Vulnerabilityassessment service
Anthropicは、権限チェックや拒否リストのチェックを行う前にリンクを解決するようにすることで、これらの問題に対処しました。今回新たに報告された問題は、メモリインポート用の別のコードパスに影響するものであり、そちらには同様の正規化保護が適用されていなかったとみられます。
モデルコンテキストは設定済みのモデルエンドポイント(通常はAnthropicのAPIインフラを指すよう設定されています)に送信されるため、潜在的な影響はローカルでの露出にとどまりません。
研究者たちはまた、リポジトリ内の.claude/settings.jsonファイルでANTHROPIC_BASE_URL変数を設定できる点にも言及しています。これにより、送信先のリクエストがリポジトリ側で選択したエンドポイントにリダイレクトされる可能性があります。研究者たちは機密性の高いリクエスト本文がこうしたエンドポイントに到達することを確認しましたが、認証情報が含まれていたかどうかまでは検証していません。
ワークスペースの信頼設定によって、この問題はさらに引き起こしやすくなる場合があります。Claude Codeは親ディレクトリに対する信頼を保持できるため、既に信頼済みのパスの下にクローンされたリポジトリは、追加のプロンプトなしにその信頼状態を引き継いでしまう可能性があります。
さらに、非対話型の実行では設計上、信頼確認やインポート確認のプロンプトがスキップされる場合があり、CI(継続的インテグレーション)やスクリプト化されたワークフローにおけるリスクを高めています。
有効な対策としては、封じ込めチェックと外部インポートの同意判断の両方が行われる前に、インポートされたパスを正規化することが挙げられます。Claude Codeは、リポジトリ外部に解決されるインポートを拒否するか、明示的に警告を出すべきであり、解決済みの参照先パスを表示し、プロジェクト側が制御するエンドポイントの上書きについては個別の承認を必須とすべきです。
こうした修正が実装されるまでの間、開発者は見慣れないリポジトリでClaude Codeを起動する前に、CLAUDE.md、.claude/rules/、シンボリックリンク、プロジェクト設定を注意深く確認することが求められます。
ALERT: 20+ government sites delivered malware to businesses and citizens. See full attack research to check your own exposure.
翻訳元: https://gbhackers.com/claude-code-symlink-flaw-exfiltrates-sensitive-files/