広告

Claude Codeのソースは漏えいしていなかった。すでに何年も前から公開されていた。

Dev.to / 2026/4/2

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical Usage

要点

  • この記事は、いわゆる「Claude Codeの漏えい」は実際には新たな侵害ではなく、同梱されたCLIのソースが、リリース以来ずっとnpm/unpkgで公開されていたためだと主張している。
  • 具体的な問題は、@anthropic-ai/claude-code のバージョン 2.1.88 に、誤って含まれてしまったソースマップだったことだと説明する。ソースマップは標準的なデバッグ用の成果物であり、研究者がそれを発見した。
  • ソースマップが見つかった後、クリーンルーム方式のRustによる書き直しが急速に広まり、各サイトが隠れた機能をカタログ化した。これにより、ソースマップが意図以上に情報を露出しうることが示された。
  • この記事では、今回が類似した出来事としては2回目であり、2025年2月にもほぼ同一のソースマップ漏えいが報告されていたことに触れている。
  • 著者はAfterPackのブログ記事で独自の分析を共有し、「実際に守られていたもの」と「すでに見えていたもの」の違いに焦点を当てている。

私は JavaScript の難読化ツール(AfterPack)を作っています。なので、今週 Claude Code の「リーク」が VentureBeatFortune、そして 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 に自分自身の難読化解除を頼んだ

ここが私を引きつけました。私は ClaudeAnthropic の自社モデル)に、自分自身の難読化(実際には 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_flinttengu_cobalt_frost のようなコードネーム付きの機能フラグ
  • KAIROS — リリース前の、自律デーモンモード
  • 学習データを汚染するためにデコイツールを注入する、蒸留対策メカニズム

これは現実の露出です。しかし、実際のコードロジック自体は cli.js の中に最初からありました。

これはどこでも起きる

私はSecurity ScannerGitHub.com に対して実行し、本番の JavaScript と ソースマップ の中に、メールアドレスや内部 URL が含まれているのを見つけました。claude.ai でも同様です。露出の種類は同じで、ただの見出しゼロ。

AI によってこの問題は緊急性を増した

現実はシンプルです。minification はそもそもセキュリティではありません。これは単に、esbuildWebpackRollup のようなバンドラがデフォルトで行う「サイズ最適化」です。変数名の置き換えは人間の読み手を遅くしますが、LLM は、整形されたコードを読むのと同じように、minified なコードを読みます。

システムプロンプトが新しい企業秘密です。テレメトリ名が製品ロードマップを示します。環境変数が、まだ出荷する準備ができていないものを露出させます。そしてあらゆる JavaScript アプリケーション—React のフロントエンド、Electron のアプリ、Node.js の CLI—は、AI がいまや取るに足らない手間で解析できるような形でコードを出荷しています。

あなたのサイトが何を公開しているか確認するには:npx afterpack audit https://your-site.com

もともとは AfterPack で公開されました。

広告