Netwrix 1Secureは、データとアイデンティティ全体にわたる統合された可視性を提供します。14日間の無料トライアルでフルアクセス可能です。無料トライアルを開始

リソースセンターブログ

あなたの AI コーディング支援ツールが秘密情報を漏えいしています

あなたの AI コーディング支援ツールが秘密情報を漏えいしています

May 12, 2026

AI デスクトップアシスタントやコーディングツールは外部サービスに接続するために認証情報(credentials)が必要で、多くの場合、それらの認証情報をユーザーのホームディレクトリ内の予測可能なパスに平文(plaintext)の JSON として保存しています。 この調査では、14 の人気 AI ツールにおける認証情報の保存がどのように機能するか、OS のキーチェーン統合が存在する場合/存在しない場合の違い、そして、マルウェアによる窃取からリモートセッションのハイジャック、MCP サーバー経由のサプライチェーン侵害まで、露出(exposure)を実際のリスクに変える 8 つの攻撃シナリオを扱います。

Claude、Copilot、Cursor などの AI ツールが認証情報を平文(plaintext)で保存する方法と、攻撃者がそれを悪用する 8 つの例

問題

AI デスクトップ アプリケーションは外部サービスで認証する必要があります。Claude Code は OAuth トークンを必要とします。GitHub Copilot は GitHub の認証情報を必要とします。Continue.dev は API キーを必要とします。MCP サーバーは、Azure DevOps、Slack、データベース、そしてあなたが接続したその他すべてのサービスに対するトークンを必要とします。これらの資格情報はどこに保存されるのでしょうか?ほとんどの場合、ホームディレクトリ内の平文 JSON ファイルに保存されます。これらのファイルはよく知られた場所、または予測可能な場所にあるため、システムへの読み取りアクセス権さえあれば見つけやすくなっています。

わかったこと

私は Windows、macOS、Linux のそれぞれで、14 の人気 AI ツールを調査しました(ブログ末尾の参照情報をご覧ください)。特に印象に残ったのは、以下の点です。

Claude Code CLI

~/.claude/.credentials.json には、OAuth のアクセス トークンとリフレッシュ トークンが プレーンテキストの JSON として保存されています:

      { 
  "claudeAi": { 
    "type": "oauth", 
    "access": "sk-ant-oat01-...", 
    "refresh": "sk-ant-ort01-...", 
    "expires": 1776098433694 
  } 
} 
      

Linux では、そのファイルは 0600 の権限(所有者のみが読み取り/書き込み可能)で作成されます。macOS では、認証情報は Keychain に保存されます。しかし WSL では、Windows 側のファイルがマウントのデフォルト 0777 の権限を継承してしまい、Claude の OAuth トークンが 全てのプロセスから読み取れる状態 になります。ここで特に危険なのはリフレッシュ トークンです。これは長期間有効で、アクセス トークンを無期限に新たに生成できます。攻撃者がそれを入手すると、あなたが明示的に取り消すまで Claude アカウントへの継続的なアクセスが可能になります。

MCP サーバー設定:集約(aggregation)の問題

Model Context Protocol (MCP) サーバーにより、AI アシスタントが外部ツールに接続できます。各接続には認証が必要で、こうしたトークンは通常、次のような単一の設定ファイルにまとめて保存されます:

      { 
  "mcpServers": { 
    "github": { "env": { "GITHUB_TOKEN": "ghp_realToken..." } }, 
    "azure": { "env": { "ADO_MCP_AUTH_TOKEN": "eyJ0eX..." } }, 
    "slack": { "env": { "SLACK_BOT_TOKEN": "xoxb-..." } }, 
    "database": { "env": { "DB_PASSWORD": "prod_password" } } 
  } 
} 
      

1 つのファイルに複数のサービス。1 回の読み取り操作で全部を危険にさらせます。 Trend Micro は 19,402 件の MCP サーバー実装のうち 48% が、プレーンテキストで認証情報を保存することを推奨していることを発見しました。

Continue.dev: API キーがプレーンテキスト

Continue.dev は設定されたすべての API キーを ~/.continue/config.json に直接保存します:

      { 
  "models": [{ 
    "provider": "anthropic", 
    "apiKey": "sk-ant-api03-YOUR-ACTUAL-KEY" 
  }] 
} 
      

コミュニティでは、これが問題であることを認めています(GitHub issue #1729)。環境変数の置換はサポートされています(${VAR_NAME})が、デフォルトの動作ではありません。

Cline:認証情報がクラウドに同期される

Cline の MCP 設定は、VS Code の globalStorage 内にある暗号化されていない JSON ファイルに保存されます。問題は、VS Code の Settings Sync がこのファイルを自動的に GitHub にアップロードしてしまうことです Settings Sync を有効にしている場合、MCP の認証情報は GitHub のクラウド上に置かれたままになります。

VS Code SecretStorage の混乱

GitHub Copilot、Cline、そしてその他の VS Code 拡張機能は SecretStorage API を使用しており、SQLite データベース内でシークレットを暗号化します(state.vscdb)。AES-128-CBC を使います。安全に聞こえますが、次に気づくまでです:

  • VS Code の拡張機能はサンドボックスなしで実行されます
  • 暗号化キーは OS のキーチェーンにあり、あらゆるユーザーレベルのプロセスからアクセスできます
  • 悪意のある拡張機能なら、他の拡張機能のシークレットを読み取れます
  • 拡張機能の識別システムはスプーフィングに対して脆弱です

暗号化はオフラインのディスクアクセスに対しては防御になりますが、同じユーザーとして実行される任意のプロセスからの防御にはなりません。

攻撃対象面(Attack surface)の例

AI の認証情報(資格情報)の露出によって可能になる、実際の攻撃シナリオを 8 つ特定しました。

1. マルウェアによる認証情報(資格情報)の窃取

ファイルパスはインストール環境を通じて予測可能で、一貫しています:

      ~/.claude/.credentials.json 
~/.continue/config.json 
~/.aws/credentials 
~/.config/gcloud/application_default_credentials.json 
~/Library/Application Support/Claude/claude_desktop_config.json 
~/.claude.json 
      

Infostealer マルウェアはすでにブラウザの Cookie、SSH キー、クラウドの認証情報を狙っています。AI ツールのパスをターゲット一覧に数個追加するのは簡単です。権限昇格は不要で、標準的なユーザーレベルのファイル読み取りで十分です。

マルウェアに一度感染すると、Claude の OAuth トークン、Continue.dev のすべての API キー、すべての MCP サーバートークン、そして AWS の認証情報が得られる可能性があります。パスは、すべてのツールのすべてのインストールで同じです。

リスク:CRITICAL。 発生の可能性が高く、影響も大きいです。

2. Claude Code のリモート制御セッションをハイジャックする

これは、あなたを怖がらせるべきシナリオです。Claude Code には Remote Control 機能(claude remote-control)があり、ユーザーは claude.ai/code 経由でスマホ、タブレット、またはブラウザからローカルの Claude Code セッションを操作できます。コードの実行はすべてローカルのマシン上で行われます。リモート端末は単なる操作用インターフェースです。

問題はこれです:リモート接続には再認証が不要です。 セッションが有効になると、セッションURLを知っている誰でも指示を送れます。そして、その指示はすべて開発者のマシン上でローカルに実行されます。

そしてそれを --dangerously-skip-permissions.

このフラグは、すべてのインタラクティブな権限プロンプトを無効にします。ファイル書き込み、シェルコマンド、ネットワーク要求、MCP ツール呼び出しなど、すべてがユーザーに確認せず自動的に実行されます。これは隔離された CI/CD コンテナ向けに意図されていますが、時にはユーザーが利便性のためにワークステーションで使ってしまうことがあります。さらに settings.json"defaultMode": "bypassPermissions" として永続的なデフォルトに設定することもできます。

攻撃チェーン:

  1. 攻撃者が次の場所から OAuth トークンを盗みます: ~/.claude/.credentials.json(マルウェア、SSRF、またはファイル読み取りの脆弱性経由)
  2. トークンは持ち運び可能なので、どのマシンでも利用できます
  3. 被害者にアクティブなリモートコントロール セッションがある場合、攻撃者が接続して乗っ取ります
  4. 被害者が --dangerously-skip-permissions で実行している場合、攻撃者は現在 被害者のユーザーとして、制限のないシェル(shell)アクセス権
    • システム上の任意のファイルを読み書きできます
    • 任意のコマンドを実行します(curlsshdocker、パッケージマネージャーなど)
    • バックドアをインストールし、データを持ち出し、他のマシンへ横展開する
    • SSH キー、クラウド認証情報、そしてシステム上のその他のすべての秘密情報にアクセスする
    • Git リポジトリ、CI/CD パイプライン、およびデプロイ設定を変更する

たとえ --dangerously-skip-permissions がなくても、acceptEdits モードの Claude Code はファイルの編集や一般的なファイルシステムコマンドを自動で承認します。これは依然として危険になり得ます。権限モデルは、セッションを操作する悪意のある人物から守るためではなく、偶発的な操作を防ぐために設計されています。

リスク:CRITICAL--dangerously-skip-permissions を使用)、HIGH(デフォルト権限)。

3. Claude OAuth トークンを介した横方向への移動

攻撃者が ~/.claude/.credentials.json から Claude OAuth のリフレッシュ トークンを入手すると、次のことができます。

  1. リモートで新しいアクセス トークンを生成する(アクセス トークンは約 60 分で期限切れになりますが、リフレッシュ トークンは長寿命です)。
  2. 被害者の Claude の会話およびワークスペースのファイルにアクセスする
  3. 被害者が設定している任意の MCP サーバーを使用する(AI アシスタントをプロキシとして、GitHub リポジトリ、Azure DevOps プロジェクト、Slack ワークスペース、データベースにアクセスする)

トークンは持ち運び可能です。認証情報ファイルを別のマシンにコピーすれば、Claude Code がそれを使用します。Anthropic はリフレッシュトークンのローテーションを実装しているため、盗まれたトークンを使うと最終的に元のトークンが無効になる可能性があります。ただし最初の利用は成功するため、ローテーションが発動する前に攻撃者がアクセス権を得ることがあります。

リスク:高。 中程度〜高い可能性、影響は大きい。

4. MCP トークンの集約:横方向への移動

1 つの MCP 設定ファイルが 複数の 外部サービス向けのトークンを集約します。たとえば、1 つのファイルで次のような内容が得られる場合があります:

  • GITHUB_PERSONAL_ACCESS_TOKEN → コードリポジトリ、PR、CI/CD
  • ADO_MCP_AUTH_TOKEN → Azure DevOps のプロジェクト
  • SLACK_BOT_TOKEN → 社内の Slack ワークスペース
  • データベースのパスワード → 本番データ
  • JIRA_API_TOKEN → プロジェクト管理、社内チケット

1つのチャネルの侵害が、限られた一部の資格情報だけを露出させる分散型の資格情報ストレージとは異なり、MCP の集約(aggregation)パターンでは、単一ファイルの開示(漏えい)が連鎖して、接続されているすべてのサービスの侵害につながります。

リスク:CRITICAL。 発生可能性が高く、影響も大きい。

5. 悪意のある VS Code 拡張機能:資格情報の流出(exfiltration)

VS Code の拡張機能はサンドボックス化なしで実行されます。すべての拡張機能が同じプロセス権限を共有しています。悪意のある、または侵害された拡張機能は、次のことができます:

  1. state.vscdb の SQLite データベースに直接アクセスする
  2. OS のキーチェーンから暗号化キーを取得します(あらゆるユーザーレベルのプロセスからアクセス可能)
  3. すべての拡張機能のシークレットを復号します:Copilot トークン、Cline API キー、MCP 認証情報

Cline の cline_mcp_settings.json はそもそも復号する必要がありません。VS Code の globalStorage 内に未暗号化の平文として保存されており、Settings Sync によりクラウドへ同期されます。

拡張機能を識別する package.json の publisher および name フィールドはスプーフィングに対して脆弱であり、正規の拡張機能になりすますことが可能になります。

リスク:高。 発生可能性は中程度、影響は大きい。

6. WSL 権限エスカレーション

WSL を使う開発者は、両側から攻撃を受けます。Windows にインストールされた AI ツールは認証情報を C:\Users\<you>\ の下に保存しており、これは WSL では /mnt/c/Users/<you>/ としてマウントされ、既定で 0777 の権限が付与されます。Windows 側で NTFS により保護されている同じ認証情報ファイルは、Linux 側からは world-readable になります。

マルチユーザーの WSL 環境や侵害されたコンテナでは、これは悪用しやすいです。WSL システム上で動作する任意のプロセスが、Windows 側に保存されている Claude OAuth トークンや MCP 設定などを読み取れます。

リスク:高(HIGH)(WSL ユーザー向け)。発生可能性は高く、影響は中〜中高です。

7. .mcp.json を git にコミット:認証情報の持ち出し(credential exfiltration)

リポジトリのルートにある Claude Code の .mcp.json は、チームが MCP サーバー設定を共有できるように、バージョン管理されることを目的に設計されています。開発者が env var 参照の代わりにインライン トークンを含めた場合:

  1. トークンが git の履歴に表示されます
  2. 削除した後でも git log -p .mcp.json がそれらを明らかにします
  3. 自動スキャナー(TruffleHog、GitLeaks など)は、GitHub/GitLab 全体で大規模にそれらを見つけられます

Anthropic と GitHub の secret scanning 連携では、一部の露出した API キーを検知できますが、他のサービス(Azure DevOps、Slack、データベース)の MCP 設定トークンは not 自動スキャンの対象になっていません。JSON の env ブロックに埋め込まれた ADO_MCP_AUTH_TOKEN または SLACK_BOT_TOKEN に対応する GitHub の secret scanner パターンはありません。

リスク:MEDIUM。 発生の可能性は中程度、影響は中〜高。

8. MCPサーバーを介したサプライチェーン攻撃

MCPサーバーは多くの場合 npm パッケージです。サプライチェーンのリスクは、あらゆる npm の依存と同じですが、決定的な違いがあります。 MCPサーバーは起動時に認証情報を受け取ります。

  1. npm 上の人気 MCP サーバーパッケージが侵害される(またはタイポスクワットが公開される)
  2. ユーザーはそれを自分の claude_desktop_config.json に、実際のトークンを env ブロック内で設定します。
  3. MCP サーバープロセスは、トークンを含む、プロセスに渡されたすべての環境変数にアクセスできます。
  4. 侵害されたサーバーがトークンを攻撃者のインフラへ流出します。

適切な OAuth 2.1 の audience 検証(RFC 8707)がない場合、悪意のある MCP サーバーがアクセス トークンを受け取り、他のサービスに対してそれらをリプレイする可能性があります(token passthrough attack)。

48% という平文(plaintext)の認証情報の割合は、すべての MCP サーバー設定のほぼ半数が、起動時に認証情報をサーバープロセスへ直接渡していることを意味します。もしそのサーバープロセスが侵害されれば、それをインストールしたすべてのユーザーも同様に侵害されます。

リスク:MEDIUM。 発生可能性は低〜中、影響は大きい。

ボーナス:CI/CD トークン窃取

コマンド claude setup-token は、1年間有効な OAuth トークン(CLAUDE_CODE_OAUTH_TOKEN)を CI/CD パイプライン向けに生成します。これにより、固有のリスクが生じます:

  • このトークンは どのマシンからでも 最長1年間使えます
  • CI/CD システムでは、シークレット管理が弱いことが多く、ジョブの分離(isolation)も限定的です。
  • ビルドログによって、環境変数の値が意図せず公開される可能性があります。
  • 侵害された CI/CD runner により、パイプラインが実行される任意の権限で Claude への長期間のアクセスが可能になります

CI/CD パイプラインが --dangerously-skip-permissions を付けて(自動化のために多くの人がそうしています)Claude Code を実行している場合、盗まれた CLAUDE_CODE_OAUTH_TOKEN により、そのトークンが使用される任意のマシンで制限のないシェル実行が許可されます。

リスク:高。 発生確率は中程度、影響は大きい。

変更が必要な点

ユーザー向け(今すぐ)

  • AIHoundを実行してください。 自分のマシンで何が公開されているのかを把握しましょう。
  • 権限を修正します: chmod 600 を認証情報ファイルに適用してください。
  • 実際の認証情報やネットワークアクセスがある **--dangerously-skip-permissions** を絶対に使わないでください。 必要であれば、マウントした secrets(機密情報)がない隔離されたコンテナ内で使用してください。
  • インラインのトークンの代わりに MCP の設定で環境変数参照を使ってください:
      "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" } 
      
  • 誰でも読めるファイルや git の履歴に含まれていたトークンはローテーションしてください。
  • VS Code の設定同期(Settings Sync)を無効にする MCP サーバーで Cline を使う場合。
  • Treat **CLAUDE_CODE_OAUTH_TOKEN** を root パスワードのように扱ってください。定期的にローテーションし、ビルドログに絶対に入れず、CI/CD の権限は必要最小限に絞りましょう。
  • Add **.mcp.json** to **.gitignore** インラインのシークレットが含まれている場合。

ツールビルダー向け

  • OS のキーチェーンを使いましょう。 macOS Keychain、Windows Credential Manager、Linux libsecret はまさにこの用途のために用意されています。資格情報を平文の JSON で保存しないでください。
  • 次の権限でファイルを作成します: **0600**. 0644 または 0777 は使用しないでください。
  • ユーザーに警告 MCP 設定でインラインのシークレットを検出した場合。
  • 認証情報(資格情報)をクラウドへ同期しないでください 設定同期の仕組みを通じて。
  • OAuth 2.1 を実装し 遠隔の MCP サーバーに対して適切なトークンの audience 検証を行います。
  • リモート コントロール(Remote Control)セッションでは再認証を必須にします。 セッション URL を、任意のコード実行のためのベアラートークンにしてはいけません。
  • MCP サーバーパッケージを監査 。インストールを許可する前に実施し、サーバーの allowlisting をサポートします。

エコシステムのために

OWASP MCP Top 10 では「Token Mismanagement and Secret Exposure」を MCP01-2025 として挙げています。GitHub 上で API キーを自動検出するための Anthropic と GitHub の提携は素晴らしい出発点ですが、対象は公開リポジトリ内の Anthropic キーに限られます。Azure DevOps、Slack、データベース、その他のサービス向けの MCP トークンには、それに相当する保護がありません。

必要です:

  • シークレットスキャン(Secret scanning) 。API キーの形式だけでなく、MCP の設定パターンも対象にする必要があります。
  • 資格情報ヘルパー(MCP 用。git の資格情報ヘルパーと同様)で、実行時に安全なストレージからトークンを取得します
  • OS のキーチェーン連携を必須にする をデフォルトとして
  • VS Code 拡張機能のサンドボックス化
  • トークンスコープのリモート制御 - リモートセッションは、それ自体の認証を要求し、ローカルセッションのフル機能を引き継がないようにすべきです

要するに

AI ツールのエコシステムは、機能を素早く出荷することに勢いがあり、資格情報(クレデンシャル)のセキュリティは、少し後回しにされてしまいました。MCP サーバーのほぼ半数は、資格情報をプレーンテキストで保存しています。AI アシスタントは、OAuth トークンをディスク上の JSON ファイルに保持します。リモートコントロール機能(Remote Control)によって、これらのトークンがリモートコード実行(remote code execution)につながります。そして --dangerously-skip-permissions は、盗まれた資格情報を他人のマシンでの完全なシェルアクセスに変えてしまいます。接続するツールが増えるほど、リスクも大きくなります。多くの AI の資格情報は安全に保存されていないため、資格情報の保存に関するベストプラクティスを必ず実装してください。AIHound のようなツールは、システム内のこれらのプレーンテキスト資格情報を見つけるのに役立ちます。

参考:AI デスクトップ アプリケーションの資格情報(クレデンシャル)保存場所

この参照資料は、人気の高い AI デスクトップ アプリケーション、コーディング支援ツール、CLI ツールの一部について、すべての資格情報(クレデンシャル)の保存場所をカタログ化しています。

Claude Code CLI

開発元: Anthropic 認証方法: OAuth 2.0(Claude.ai サブスクリプション)または API キー

認証情報ファイル

Platform

Path

Format

Encryption

Contents

Linux

~/.claude/.credentials.json

JSON

Plaintext (mode 0600)

OAuth access/refresh tokens, multi-provider auth

macOS

Keychain: Claude Code-credentials

Keychain

OS Keychain (encrypted)

OAuth access/refresh tokens

Windows

%USERPROFILE%\.claude\.credentials.json

JSON

Plaintext (NTFS ACLs)

OAuth access/refresh tokens

WSL

Both Linux path AND /mnt/c/Users/<user>/.claude/.credentials.json

JSON

Plaintext (often 0777 via mount)

Same as above

認証情報ファイルの構造

      { 
  "claudeAi": { 
    "type": "oauth", 
    "access": "sk-ant-oat01-...", 
    "refresh": "sk-ant-ort01-...", 
    "expires": 1776098433694 
  } 
} 
      

各 OAuth 接続は、それぞれ独自のエントリを保存します。このファイルには、ユーザーが設定した内容に応じて、Claude.ai、Claude API、Azure Auth、Bedrock Auth、Vertex Auth の認証情報が含まれます。

重要な指摘: WSL では、Windows 側の認証情報ファイルがマウントのデフォルト権限(0777)を継承するため、誰でも読み取れてしまいます。これは CRITICAL なリスクであり、ファイルが 0600 で作成されるネイティブ Linux には存在しません。

機密情報の可能性がある設定ファイル

Path

Contents

~/.claude.json

Global MCP server configurations (may contain inline tokens)

.mcp.json (repo root)

Project-scoped MCP server configs

~/.claude/settings.json

User preferences and permissions

認証の優先順位

Claude Code は次の順で資格情報を確認します(最初に一致したものが適用されます):

  1. クラウドプロバイダーの環境変数(CLAUDE_CODE_USE_BEDROCK, CLAUDE_CODE_USE_VERTEX, CLAUDE_CODE_USE_FOUNDRY
  2. ANTHROPIC_AUTH_TOKEN 環境変数
  3. ANTHROPIC_API_KEY 環境変数
  4. apiKeyHelper スクリプトの出力(動的/ローテーションする認証情報のため)
  5. CLAUDE_CODE_OAUTH_TOKEN 環境変数(長寿命で、claude setup-token から取得)
  6. OAuth 認証情報(~/.claude/.credentials.json または Keychain)

既知の不具合

ドキュメント化された不具合(GitHub issue #36779)では、OAuth 認証情報が macOS Keychain に適切に永続化されないことが示されています。主となる認証トークンが欠落している一方で、mcpOAuth フィールドのみが保存され、新しいセッションでは再認証が強制されます。

Claude Desktop

開発者: Anthropic 認証方法: Claude.ai セッション(macOS では Keychain によるバックアップ)

Platform

Paths

macOS

~/Library/Application Support/Cursor/, ~/.cursor/

Windows

%APPDATA%\Cursor\, %USERPROFILE%\.cursor\

Linux

~/.config/Cursor/, ~/.cursor/

Auth method: Claude.ai session (Keychain-backed on macOS)

設定ファイル

Platform

Path

Format

Encryption

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

JSON

Plaintext (often 0644)

Windows

%APPDATA%\Claude\claude_desktop_config.json

JSON

Plaintext

Linux

~/.config/Claude/claude_desktop_config.json

JSON

Plaintext

MSIX 仮想化の問題(Windows)

Windows では、MSIX インストーラーがファイルシステムの仮想化を作成します。「Edit Config」ボタンを開くと %APPDATA%\Claude\claude_desktop_config.json になりますが、アプリケーションは実際には MSIX コンテナ内の仮想化されたパスから読み取る可能性があります。つまり:

  • ユーザーが誤ったファイルを編集してしまう可能性があります
  • MCP サーバーの設定は何も通知されずに無視されます
  • エラーメッセージが問題を示しません

Pre-MSIX のインストールは既存のまま例外扱いされ、実際の AppData パスから読み取られます。

設定(config)には何が含まれていますか?

設定ファイルには主に MCP サーバー定義が含まれます:

      { 
  "mcpServers": { 
    "azure-devops": { 
      "command": "npx", 
      "args": ["-y", "@anthropic/azure-devops-mcp"], 
      "env": { 
        "ADO_MCP_AUTH_TOKEN": "actual-token-here" 
      } 
    } 
  } 
} 
      

env ブロックには外部サービス向けの 平文トークン が頻繁に含まれます。

GitHub Copilot

開発元: GitHub / Microsoft 認証方式: GitHub OAuth

認証情報の保存

Platform

Location

Format

Encryption

macOS

Keychain: copilot-cli

Keychain

OS Keychain

Windows

Credential Manager

Credential Manager

DPAPI

Linux (with libsecret)

GNOME Keyring / KWallet

libsecret

OS-level

Linux (no libsecret)

~/.copilot/config.json

JSON

Plaintext (fallback)

VS Code 拡張機能の保存領域

Platform

Path

Linux

~/.config/Code/User/globalStorage/state.vscdb

macOS

~/Library/Application Support/Code/User/globalStorage/state.vscdb

Windows

%APPDATA%\Code\User\globalStorage\state.vscdb

state.vscdb ファイルは、Electron の safeStorage API(AES-128-CBC)で暗号化された SQLite データベースです。 しかし、セキュリティ調査では、これは 悪意のある VS Code 拡張機能に対して脆弱であることが示されています。サンドボックスがないため、どの拡張機能でも他の拡張機能の secrets にアクセスできます。

暗号化キーは OS のキーチェーンに保存されます(Code Safe Storage / macOS)。ユーザー権限を持つあらゆるプロセスからアクセス可能です。

トークンの種類

Prefix

Type

Supported

gho_

OAuth token (default via copilot login)

Yes

github_pat_

Fine-grained PAT (needs "Copilot Requests" permission)

Yes

ghu_

GitHub App user-to-server token

Yes (env var only)

ghp_

Classic PAT

Not supported

GitHub CLI 認証(Copilot でも使用)

Platform

Path

Format

Linux

~/.config/gh/hosts.yml

YAML

macOS

~/Library/Application Support/gh/hosts.yml

YAML

Windows

%APPDATA%\GitHub CLI\hosts.yml

YAML

Cursor IDE

開発者: Anysphere 認証方法: Cursor アカウント + 任意の API キー

保存先

Platform

Paths

macOS

~/Library/Application Support/Cursor/, ~/.cursor/

Windows

%APPDATA%\Cursor\, %USERPROFILE%\.cursor\

Linux

~/.config/Cursor/, ~/.cursor/

MCP 設定

~/.cursor/mcp.json は、mcpServers と同じ JSON 構造を Claude Desktop と同様に採用しています。インライン認証トークンが含まれる場合があります。

既知の問題

Cursor は、誰でも読み取れる権限で会話ログを保存します。ユーザーがトークンをチャット インターフェイスに貼り付けた場合、これらのログに認証情報が含まれる可能性があります。

Continue.dev

開発者: Continue(オープンソース) 認証方式: 提供者ごとに直接 API キー

設定ファイル

Platform

Path

Format

Encryption

All

~/.continue/config.json

JSON

Plaintext

All

~/.continue/config.yaml

YAML

Plaintext

認証情報の形式

      { 
  "models": [ 
    { 
      "title": "Claude 3.5 Sonnet", 
      "provider": "anthropic", 
      "model": "claude-3-5-sonnet-20241022", 
      "apiKey": "sk-ant-api03-ACTUAL-KEY-HERE" 
    } 
  ] 
} 
      

すべての API キーはユーザールートに平文で保存されます。 これは Continue.dev コミュニティによってセキュリティ上の懸念として認識されています(GitHub issue #1729)。

緩和策

Continue.dev は環境変数の置換をサポートしています:

      "apiKey": "${CONTINUE_ANTHROPIC_API_KEY}" 
      

プロジェクトのルートにある .env で指定したカスタムの場所を確認します。envFilesただし、デフォルトの動作はプレーンテキスト(plaintext) です(env 変数が設定されていない場合)。

Cline(VS Code 拡張機能)

開発者: Saoud Rizwan 拡張機能 ID: saoudrizwan.claude-dev

MCP 設定(プレーンテキスト(plaintext))

Platform

Path

macOS

~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json

Windows

%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json

Linux

~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json

重大: これらのファイルは プレーンテキスト(plaintext)JSON であり、VS Code の Settings Sync によりクラウドへ自動同期されます。そのため、同期が有効になっている場合、API キーと MCP 認証情報が GitHub にアップロードされます。

API キーの保存

Cline は VS Code の SecretStorage API を通じて API キーを保存します(Copilot が使用しているのと同じ AES-128-CBC で暗号化された state.vscdb )。同じ悪意のある拡張機能の脆弱性の影響を受けます。

Windsurf / Codeium

開発者: Codeium 認証方法: Codeium アカウント

保存場所

Platform

Path

All

~/.codeium/windsurf/

このディレクトリ内で config.jsonauth.jsoncredentials.json を探してください。

MCP 設定

~/.codeium/windsurf/mcp_config.json と同じ mcpServers の構造にしてください。

資格情報の詳細は、公開情報として十分に文書化されていません。多くの場合、認証はローカルのトークン保存ではなく、Codeium の集中型バックエンドを通じて行われているようです。

ChatGPT Desktop

開発者: OpenAI 認証方法: OpenAI アカウントセッション

保存場所

Platform

Path

Encryption

macOS

~/Library/Application Support/ChatGPT/

Keychain for session

macOS

~/Library/Application Support/com.openai.chat/

Keychain for session

Windows

%APPDATA%\OpenAI\ChatGPT\

Credential Manager

Windows

%APPDATA%\com.openai.chat\

Credential Manager

ChatGPT Desktop は主に、OS の認証情報ストア(macOS の Keychain、Windows の Credential Manager)を使用してセッショントークンを保存します。アプリデータのディレクトリにある JSON 設定ファイルにも、セッションデータが含まれている場合があります。

Amazon Q Developer / AWS

開発者: Amazon Web Services 認証方法: IAM Identity Center / AWS Builder ID / IAM 認証情報

認証情報ファイル

Path

Format

Contents

~/.aws/credentials

INI

Plaintext access key ID, secret access key, session token (per profile)

~/.aws/config

INI

Region, output format, SSO configuration

~/.aws/sso/cache/*.json

JSON

Plaintext SSO access tokens (cached)

認証情報ファイルの構造

      [default] 
aws_access_key_id = AKIAIOSFODNN7EXAMPLE 
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY 
aws_session_token = FwoGZXIvYXdzEBY... 
      

注記

  • Amazon Q 自体はローカルのファイル ストレージではなく、IAM Identity Center または Builder ID を通じて認証します
  • デフォルトの SSO セッションの有効期間は 90 日です(2024 年 4 月以降に作成したセットアップの場合)
  • の静的クレデンシャル ~/.aws/credentials が主なリスクです。代わりに SSO/IAM Identity Center の使用を検討してください

Google Gemini CLI / GCloud

開発者: Google 認証方法: Google アカウントの OAuth、API キー、またはサービスアカウント

API キーの保存

Location

Format

Contents

$GEMINI_API_KEY env var

Environment variable

Gemini API key

$GOOGLE_API_KEY env var

Environment variable

Google API key

~/.gemini/.env

Dotenv

API keys

~/.env

Dotenv

API keys

アプリケーション デフォルト クレデンシャル(ADC)

Platform

Path

Format

Linux

~/.config/gcloud/application_default_credentials.json

JSON

macOS

~/Library/Application Support/gcloud/application_default_credentials.json

JSON

macOS (alt)

~/.config/gcloud/application_default_credentials.json

JSON

Windows

%APPDATA%\gcloud\application_default_credentials.json

JSON

ADC ファイルには client_secretrefresh_token、そして場合によっては private_key(サービス アカウント用)が plaintext JSON の形式で含まれます。

認証方式

Method

How

Local Storage

Sign in with Google

gemini auth login (browser flow)

Cached locally for future sessions

Gemini API Key

GEMINI_API_KEY env var

Environment or .env file

Service Account

GOOGLE_APPLICATION_CREDENTIALS env var pointing to key file

JSON key file on disk

ADC via gcloud

gcloud auth application-default login

application_default_credentials.json

Cloud Shell

Automatic (metadata server)

No local storage

OpenClaw

開発者: OpenClaw(オープンソース) 認証方式: 提供元ごとの OAuth 2.0、API キー、チャネル固有のトークン

概要

OpenClaw はローカルファーストの AI エージェントプラットフォームで、20 以上のメッセージングチャネル(WhatsApp、Telegram、Slack、Discord)に接続し、ローカルマシン上でツールを実行します。LLM プロバイダーとメッセージングチャネルの両方の認証情報を保存します。

認証情報ファイル

Path

Format

Encryption

Contents

~/.openclaw/agents/<agentId>/agent/auth-profiles.json

JSON

Plaintext (0600)

OAuth access/refresh tokens + API keys per LLM provider

~/.openclaw/credentials/whatsapp/<accountId>/creds.json

JSON

Plaintext

WhatsApp Baileys auth state

~/.openclaw/credentials/oauth.json

JSON

Plaintext

Legacy OAuth tokens (migration file)

~/.openclaw/credentials/<channel>-allowFrom.json

JSON

Plaintext

Channel pairing allowlists

~/.openclaw/secrets.json

JSON

Plaintext

Optional secrets payload for SecretRef resolution

~/.openclaw/openclaw.json

JSON5

Plaintext

Main config with gateway auth token, channel tokens, agent API keys

~/.openclaw/.env

Dotenv

Plaintext

Environment variable overrides (may contain API keys)

認証プロファイルの構造

各エージェントにはそれぞれ独自の auth-profiles.json があり、プロバイダーの認証情報が含まれます:

      { 
  "anthropic": { 
    "accessToken": "sk-ant-...", 
    "refreshToken": "sk-ant-ort01-...", 
    "expiresAt": 1776098433694 
  }, 
  "openai": { 
    "apiKey": "sk-proj-..." 
  } 
} 
      

すべてのトークンはデフォルトで plaintext JSON に保存されます。OS のキーチェーン連携はありません。

SecretRef システム(オプトイン)

OpenClaw はオプトイン SecretRef システムに対応しており、プレーンテキストの値を外部ソースへの参照に置き換えます:

Provider

Example

Description

env

env:ANTHROPIC_API_KEY

Reads from environment variable

file

file:~/.secrets/api-key.txt

Reads from file (JSON pointer or single value)

exec

exec:pass show openclaw/anthropic

Runs vault-like executable

ユーザーは openclaw secrets configure を実行して、既存のプレーンテキスト値を消去し、SecretRefs に移行する必要があります。 デフォルトの動作はプレーンテキストの保存です。

ゲートウェイ認証

ゲートウェイはローカルのアクセス制御にトークンを使用します:

      { 
  "gateway": { 
    "auth": { 
      "mode": "token", 
      "token": "long-random-string-here" 
    } 
  } 
} 
      

このトークンは SecretRef にすることもできますが、一般的には openclaw.json にハードコードされています。

既知のセキュリティ問題

Issue

Severity

Details

Plaintext credential storage

HIGH

OAuth tokens and API keys in auth-profiles.json with no keychain

Agent tool bypass

HIGH

Agents with filesystem/exec tools can cat credential files, bypassing config.get redaction (GitHub #11829)

Tailscale exposure

MEDIUM

Remote access via Tailscale could expose the local gateway if token auth isn't configured

OAuth refresh failures

MEDIUM

Silent token refresh failures, Anthropic token truncation bugs

Session persistence

LOW

WhatsApp sessions not always persisted across restarts

資格情報(クレデンシャル)の配置場所の概要

すべてのファイルは、すべてのプラットフォーム(Linux、macOS、Windows)で ~/.openclaw/ 配下にあります。WSL では、Linux ネイティブのパスと Windows のマウントパスの両方を確認してください。

MCP サーバーの設定

設定ファイルの場所

Tool

Path

Scope

Claude Desktop (macOS)

~/Library/Application Support/Claude/claude_desktop_config.json

Application

Claude Desktop (Windows)

%APPDATA%\Claude\claude_desktop_config.json

Application

Claude Code (local)

~/.claude.json

User (private)

Claude Code (project)

.mcp.json

Repository (shared)

Cursor

~/.cursor/mcp.json

User

VS Code

.vscode/mcp.json

Workspace

Cline

cline_mcp_settings.json in VS Code globalStorage

Extension

一般的な MCP 認証の環境変数

Variable

Service

ADO_MCP_AUTH_TOKEN

Azure DevOps

GITHUB_PERSONAL_ACCESS_TOKEN

GitHub

GITHUB_TOKEN

GitHub

SLACK_BOT_TOKEN

Slack

JIRA_API_TOKEN

Atlassian Jira

NOTION_API_KEY

Notion

LINEAR_API_KEY

Linear

環境変数

以下の環境変数は、ユーザーまたはツールによって一般的に設定され、AI 関連のシークレットを含みます。

Anthropic / Claude

Variable

Description

ANTHROPIC_API_KEY

Anthropic API key (sk-ant-api03-...)

ANTHROPIC_AUTH_TOKEN

Bearer auth token

CLAUDE_CODE_OAUTH_TOKEN

Long-lived OAuth token (from claude setup-token, valid ~1 year)

OpenAI

Variable

Description

OPENAI_API_KEY

OpenAI API key (sk-...)

OPENAI_ORG_ID

Organization identifier

Google

Variable

Description

GEMINI_API_KEY

Gemini API key

GOOGLE_API_KEY

Google API key (AIza...)

GOOGLE_APPLICATION_CREDENTIALS

Path to service account JSON key file

GitHub

Variable

Description

GITHUB_TOKEN

GitHub token

GH_TOKEN

GitHub CLI token

GITHUB_PERSONAL_ACCESS_TOKEN

GitHub PAT

COPILOT_GITHUB_TOKEN

Copilot-specific token

AWS

Variable

Description

AWS_ACCESS_KEY_ID

AWS access key (AKIA...)

AWS_SECRET_ACCESS_KEY

AWS secret key

AWS_SESSION_TOKEN

Temporary session token

Azure

Variable

Description

ADO_MCP_AUTH_TOKEN

Azure DevOps MCP token

AZURE_OPENAI_API_KEY

Azure OpenAI key

その他のAIプロバイダー

Variable

Description

HF_TOKEN / HUGGING_FACE_HUB_TOKEN

Hugging Face

COHERE_API_KEY

Cohere

REPLICATE_API_TOKEN

Replicate

TOGETHER_API_KEY

Together AI

GROQ_API_KEY

Groq

MISTRAL_API_KEY

Mistral AI

DEEPSEEK_API_KEY

DeepSeek

XAI_API_KEY

xAI / Grok

PERPLEXITY_API_KEY

Perplexity

FIREWORKS_API_KEY

Fireworks AI

プレーンテキストの YAML に oauth_token フィールドが含まれています。

共有する

もっと詳しく

著者について

Darryl baker

Darryl Baker

シニアスタッフ セキュリティリサーチャー

Darryl G. Baker は Netwrix のシニアスタッフセキュリティリサーチャーであり、Identity および Active Directory のセキュリティ分野で広く認められた権威者です。10年以上にわたるアイデンティティシステムの経験をもとに、彼は Active Directory、Entra ID、Azure 環境に焦点を当てたエンタープライズ向けのセキュリティ評価、アイデンティティセキュリティ研修、そして脅威のエミュレーション(threat emulations)を主導してきました。Darryl は BlueTeamCon、BSidesCT、The Experts Conference、Wild Wild West Hackin’ Fest にて高い評価を受けた研修やデモを提供しています。彼は、現在のレッドチーム/ブルーチームのツールを活用し、防御側が攻撃経路分析から脅威ハンティング(threat hunting)までを習得できるよう支援する、多数のハンズオン攻撃エミュレーションラボのアーキテクトです。彼のセッションでは、Darryl が深い技術的洞察と実世界のケーススタディを融合させ、ブルーチームのプロフェッショナルが Identity セキュリティ体制を強化し、進化し続ける攻撃者の手口に対して防御できるようエンパワーします。