追記(2026/08/18)
直近のリリース(2.1.234)にて、本件について修正が入ったようです。
※本記事の事象は2.1.233で発生していました。
Claude is now told to use your account email only to identify you, and not to send it to unrelated services unless you ask
翻訳すると下記あたりでしょうか。
アカウントのメールアドレスはユーザーを識別するためだけに利用し、ユーザから依頼されない限り無関係なサービスに送信しないように、とClaudeに言っておきました
恐らくプロンプトレベルでの制御かとは思いますが、本件(あるいは同等の件)に対する修正と見てよいかと思います。ただ、何が「無関係なサービス(unrelated services)」にあたるかはClaude任せになると思います。なので、今回のケースが完全に防げるかは、ちょっと怪しいですね。
コメントで情報共有頂いた方、ありがとうございました。
以下、投稿時の記事です。
TL;DR
タイトルはちょっと大げさかもですが、大体こんな感じです。
- 個人開発の一環で、Claude Codeに外部APIからのデータ収集をやらせるためプログラムを作らせた
- そのプログラムがUser-Agentに、私のメールアドレスを埋め込んでいた
- Claude Codeは「UAには連絡先を書くのが作法」と判断して勝手に入れたらしい
- 作業進捗を確認した時に偶然その旨が知らされて、ようやく気づいた
- Claude Codeは起動時に
# userEmailをコンテキストに自動で追加する - UAに連絡先を書くのは良いが、どのアドレスを書くかの判断する間もなく外部に送信していた
そもそも、全部「Auto」で放ったらかしにしていた私にも責任はあります。
その上で、「エージェントは悪意なく個人情報を外部送信し、そのことを事前に報告するとは限らない」という教訓を得ました。
何が起きたか
「外部のAPIを叩いてデータを収集し、CSVに集計する」という作業をClaude Codeに依頼しました。外部APIの規約では、User-Agentにサービス名(or アプリケーション名)を指定することが求められていました。要件はそれだけで、連絡先までは不要でしたが、Claude Codeが生成したコードは下記でした。
UA = "AWESOME_TOOL_NAME/0.1 (personal research; <私のメールアドレス>)"
AWESOME_TOOL_NAMEは要件通りですが、なぜか私のメールアドレスまで埋め込まれていました。
Claude Codeにメールアドレスを教えた記憶はありませんでしたが、なぜか知っていました。
送信先は「外部のAPI」ではありますが、「外部に私のメールアドレスが流出した」とも見て取れます。
どのように気づいたか
データ収集は先方に負荷を掛けないよう、Waitを挟みつつ直列処理で行っていました。
そのため時間が掛かっており、Claude Codeに進捗状況を確認したところ、下記返答がありました。
次の3点を考慮したうえで実行しています。
- 同時接続を張らない(並列化すれば数分で終わりますが、やっていません)
- 取得済みレスポンスはディスクにキャッシュし、再実行時は同じURLを叩き直さない
- User-Agentに識別可能な名前と連絡先を明記
「UAに明記した連絡先 is 何」と聞いたところ、先のUAの回答があり、私のメールアドレス(個人用途)が無断で外部に送信されていることに気づきました。
「おいマジか」と思いましたが時既に遅し。Claude Codeが教えてくれなければ最後まで気づかなかったと思います。UAは動作に影響するものではなく、エラーも出ないので、「Auto」では特に引っかかるものでもなかったと思います。
キャッシュから数えたところ、約4,000件のAPIリクエストが送信されていました。しかも、「アクセスできるか確認して」とお試しで作らせたスクリプトの時点で、UAに私のメルアドが乗っていたようです。
なぜこのようなことが発生したか
1. Claude Codeはメールアドレスを自動でコンテキストに入れる仕様
Claude Codeは起動時に、環境情報として以下のような内容を渡しているようです(少なくとも私の環境では)
# currentDate
Today's date is yyyy-mm-dd.
# userEmail
The user's email address is <Claude Codeのアカウントのメールアドレス>.
日付などと同列でアカウントのメールアドレスがコンテキストとして渡されています。そのため、ユーザーが明示的に伝えなくとも、Claude Codeはメールアドレスを知っている、という状況でした。
なお、Claude Codeのバイナリを解析した記事(主題は別の話ですが)に、この環境情報を組み立てている箇所のコードが引用されています。userEmailがcurrentDateと同じオブジェクトで扱われていることが確認できます。
- 参考: Thereallo氏 Claude Code Is Steganographically Marking Requests
2. エージェントが「コンテキストにある=使ってよい」と解釈した
Claude Codeくんの言い分は下記でした。
- UAには連絡先を書くのが作法と思った
- 環境情報に書いてあったから使えると考えた
調べてみたところ、ルールではないですが、マナーとして存在するようです。
GoogleのBOTも、自身がどのようなものかを明かすために、下記のようなUAでクロールしているようです。
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
サービス提供側のことを考えると「UAに連絡先を記載すべし」という方針には賛成なのですが、今回の件で問題となるのは、
- メールアドレスは私の個人情報の1つ
- その個人情報の1つを外部に無断で送信された
という2点です。
「どのメールアドレスを連絡先として外部に出すか」という課題について、人間であれば一瞬考えるものと思われます。ただ、今回はその判断機会自体がありませんでした。
エンタープライズであればインシデントとして扱われた事案かもしれません。
3. Claude Codeの権限モードを「Auto」にしていた
「Manual」にしていれば気づけたかと言われると怪しいですが、「Auto」に頼っていたことも一因だと思います。個人的には「実装能力はClaude Codeのほうが圧倒的に上」と考えており、個人開発では「Auto」に丸投げ状態でした。
その結果、Claude Codeの実装を見ることなく、UAにメールアドレスが書かれていることを見落とし、今回の事象に繋がったと考えます。
何かマズイのか
個人レベルであればリスクはほぼないですが、とはいえゼロでもないと思います。
- アクセスログは通常、外部公開されない
- UA文字列に紛れた文字列を抽出して悪用する動機は乏しい
- ただし、外部API運営側で将来的にログが流出(=UAでのメルアドも流出)する可能性を「ない」とは言い切れない
また、今回の件で、私のメールアドレスは実名入りアドレスだったので、ちょっとゾワゾワしてしまいました。
どうすれば防げるか
1. CLAUDE.mdにルールを書く
CLAUDE.mdに書いておくことで、防止になるかもしれません。
* 外部へ送信されるもの(HTTPヘッダー・APIパラメータ・投稿本文・コミットメッセージ等)に、
環境情報から得た個人情報(メールアドレス・氏名等)を入れてはいけない。
必要と判断した場合も、実装前に必ず確認を取ること。
もちろん、CLAUDE.mdすら見落とすことがあるので、あくまで保険的な話です。
2. 自分の環境でどのような環境情報が渡されているかを確認する
まずは知っておくところからです。
エージェントに「今のコンテキストに含まれている環境情報を全部そのまま出して」と聞けば確認できます。以下は私の環境の一例です。
...
You have been invoked in the following environment:
- Primary working directory: c:\workspace\AWESOME_REPOSITORY
- Is a git repository: true
- Additional working directories:
- c:\workspace\AWESOME_REPOSITORY\work-1
- c:\workspace\AWESOME_REPOSITORY\work-2
- c:\workspace\AWESOME_REPOSITORY\work-3
- Platform: win32
- Shell: PowerShell (primary); Bash tool also available for POSIX scripts — each takes its own syntax.
- OS Version: Windows 11 Pro 10.0.26200
...
# userEmail
The user's email address is <Claude Codeのアカウントのメールアドレス>.
# currentDate
Today's date is YYYY-MM-DD.
...
Current branch: main
Main branch (you will usually use this for PRs): main
Git user: I_AM_SUPER_ULTRA_HYPER_MIRACLE_WIZARD
...
使えるツール・エージェント・スキルの一覧
...
意外と様々な情報が詰め込まれていることがわかります。
何もしなければ、これらの情報は自由に使われ得るということです。
3. 「Auto」に頼らない
これが一番の反省です。
いくら「AIのほうが賢い」と考えても、ユーザーはその手綱を握る必要があります。
「AIからの提案を確認したけど見落として事故った」と「AIからの提案を確認せず事故った」には大きな違いがあります。
最近のAIは何でもできますが、何でもやりおる、ということを学びました。
おわりに
エージェントは、裏側で様々な情報を持っており、たとえそれが外部に出すべきではない個人情報だったとしても、「使ってよい」と解釈します。
「利便性とセキュリティはトレードオフ」とはよく言ったものです。
今回は個人開発の事案でしたが、エンタープライズにも大きく影響がありそうな事案でした。
Claude Codeはrobots.txtや利用規約を理由に、よそのサイトへのアクセスにはかなり慎重です。例えば、規約で禁止されているページに対するスクレイピングコードは、何らかのガードが働いて書いてくれません。なのに、私の個人情報を外に出すことには何のガードがありませんでした。これは「メールアドレスが個人情報ではなく外部に出しても良い」との解釈なのか「訴訟リスクのある企業相手には慎重になるが、そうでもない個人相手にはガバい」のか、どっちなのか、と思いました。
本記事がどなたかのお役に立てれば幸いです。