私は JavaScript の難読化ツール(AfterPack)を作っています。なので、今週 Claude Code の「リーク」が VentureBeat、Fortune、そして The Register に出たとき、私がやったのは—当然のことに感じた—「本当に何が保護されているのか」を確かめるため、噂のリークコードを解析することでした。
私は AfterPack ブログで 詳細な解説 を書きました。以下がその要点です。
何が起きたのか
標準的なデバッグ用成果物である ソースマップ ファイル(ECMA-426 で定義されたもの)が、npm の @anthropic-ai/claude-code パッケージのバージョン 2.1.88 に誤って含まれていました。セキュリティ研究者 Chaofan Shou がそれを見つけ、24時間以内に、クリーンルームでの Rust への書き換え が 110K の GitHub スターを獲得し、さらに分解サイト(ccleaks.com)が、隠されたあらゆる機能をカタログ化しました。
これは 2025年2月に起きたことの2回目で、ほぼ同一のソースマップ漏えいが発生していました。
コード自体はすでにそこにあった
Claude Code は、npm では単一のバンドルされた cli.js として配布されています。サイズは 13MB、JavaScript の行数は 16,824 行です。これはリリース以来、公開されていました。いまでも unpkg.com で確認できます。
私はそれを解析しました。難読化されているのではなく、難読化(obfuscation) ではありません。つまり何が起きているのかを、現実的に言うとこうです。
| 手法 | 含まれている? |
|---|---|
| 変数名のマングリング | はい(標準的な minification) |
| ホワイトスペースの削除 | はい(標準的な minification) |
| 文字列の暗号化/エンコード | いいえ |
| 制御フローのフラット化 | いいえ |
| デッドコードの注入 | いいえ |
| 自己防衛/改ざん対策 | いいえ |
| プロパティ名のマングリング | いいえ |
148,000 個以上の文字列リテラルが、すべて平文のまま入っています—システムプロンプト、ツールの説明、振る舞いに関する指示です。
Claude に自分自身の難読化解除を頼んだ
ここが私を引きつけました。私は Claude(Anthropic の自社モデル)に、自分自身の難読化(実際には minified)の cli.js を向けたところ、単に……説明してくれました。
AST(抽象構文木)ベースの抽出を使うことで、13MB のファイル全体を 1.47 秒でパースし、147,992 個の文字列を取り出しました。システムプロンプト、ツールの説明、837 個のテレメトリイベント(すべて tengu_ でプレフィックス—Claude Code の 内部コードネーム)、504 個の環境変数、そして DataDog の API キーが見つかりました。
Geoffrey Huntley は、このリークの数か月前に、同様のアプローチ(LLM が minified な JS を読みやすい TypeScript に変換する)で、Claude Code の完全なクリーンルームでのトランスパイルを公開していました。彼の 難読化解除リポジトリ が、その手法を示しています。
ソースマップが実際に追加したもの
公平に言うと、ソースマップは確かにいくつかの「本当にセンシティブなもの」を表面化させました。
- 内部コードのコメントと TODO
- 元のファイル名付きの、1,884 ファイルからなるプロジェクトツリー全体
tengu_amber_flintやtengu_cobalt_frostのようなコードネーム付きの機能フラグ- KAIROS — リリース前の、自律デーモンモード
- 学習データを汚染するためにデコイツールを注入する、蒸留対策メカニズム
これは現実の露出です。しかし、実際のコードロジック自体は cli.js の中に最初からありました。
これはどこでも起きる
私はSecurity Scanner を GitHub.com に対して実行し、本番の JavaScript と ソースマップ の中に、メールアドレスや内部 URL が含まれているのを見つけました。claude.ai でも同様です。露出の種類は同じで、ただの見出しゼロ。
AI によってこの問題は緊急性を増した
現実はシンプルです。minification はそもそもセキュリティではありません。これは単に、esbuild、Webpack、Rollup のようなバンドラがデフォルトで行う「サイズ最適化」です。変数名の置き換えは人間の読み手を遅くしますが、LLM は、整形されたコードを読むのと同じように、minified なコードを読みます。
システムプロンプトが新しい企業秘密です。テレメトリ名が製品ロードマップを示します。環境変数が、まだ出荷する準備ができていないものを露出させます。そしてあらゆる JavaScript アプリケーション—React のフロントエンド、Electron のアプリ、Node.js の CLI—は、AI がいまや取るに足らない手間で解析できるような形でコードを出荷しています。
あなたのサイトが何を公開しているか確認するには:npx afterpack audit https://your-site.com
もともとは AfterPack で公開されました。




