[緊急警報] Claude Code Templates の認証不要RCE脆弱性 (GHSA-79wm-x847-7cvg / CVE-2026-73222)
はじめに:開発ツールに潜むRCEの脅威
皆さん、日々の開発お疲れ様です。フロントエンド開発において、`npm` や `npx` といったツールは不可欠な存在です。しかし、これらのツールやそれに付随するライブラリにも、深刻なセキュリティ脆弱性が潜んでいることがあります。今回は、AIによるコード生成・支援ツール「Claude Code Templates」の `--studio` モードに発見された、認証不要のOSコマンドインジェクション(Remote Code Execution: RCE)脆弱性 (GHSA-79wm-x847-7cvg / CVE-2026-73222) について、フロントエンドエンジニアの視点から詳しく解説します。
この脆弱性は深刻度 'High' と評価されており、もし皆さんが `npx claude-code-templates --studio` を実行している場合、認証なしで外部から皆さんの開発マシン上で任意のOSコマンドを実行される可能性があります。これは、皆さんの大切なソースコード、SSHキー、クラウド認証情報などが漏洩する可能性を意味します。いますぐ確認と対策が必要です。
脆弱性の概要:なぜ危険なのか?
この脆弱性は、`npx claude-code-templates --studio` コマンドで起動される「Claude Code Studio」というExpress HTTPサーバーに存在します。このサーバーは、デフォルトでポート3444にて起動しますが、以下のような問題点がありました。
<ul><li><b>全インターフェースへのバインド (`0.0.0.0`)</b>: サーバーは `127.0.0.1` (localhost) だけでなく、`0.0.0.0` (すべてのネットワークインターフェース) にバインドされるため、同じローカルエリアネットワーク (LAN) 内の任意のデバイスからアクセス可能です。</li><li><b>認証の欠如</b>: サーバーのどのエンドポイントにも認証メカニズムがありません。つまり、誰でもアクセスできる状態です。</li><li><b>広範なCORS設定 (`Access-Control-Allow-Origin: *`)</b>: CORS (Cross-Origin Resource Sharing) ヘッダーが `*` に設定されているため、悪意のあるウェブページからでも、異なるオリジンからのHTTPリクエストを許可してしまいます。</li><li><b>OSコマンドインジェクションの脆弱な実装</b>: 最も根本的な問題は、`/api/execute` と `/api/install-agent` という2つのPOSTエンドポイントが、リクエストボディ内のユーザー入力(`prompt` や `agentName` フィールド)を、`child_process.spawn(..., { shell: true })` を使って直接OSコマンドとして実行してしまう点です。</li></ul>
特に、Node.jsの `child_process.spawn` で `{ shell: true }` オプションを使用すると、Node.jsは引数の配列を単一の文字列に結合し、それを `sh -c` コマンドとして実行します。この時、ユーザー入力に `セミコロン (;)`, `バッククォート (``)` や `ドル記号と括弧 ($(...))` などのシェルメタ文字が含まれていると、それらがシェルによってコマンドとして解釈され、任意のOSコマンドが実行されてしまいます。
攻撃のシナリオ:あなたのマシンはこう狙われる
攻撃者は、以下の2つの経路であなたのマシンを乗っ取る可能性があります。
<ul><li><b>ドライブバイダウンロード攻撃 (Webページ経由)</b>: あなたが `claude-code-templates --studio` を起動している状態で、悪意のあるウェブページを閲覧した場合、そのページに仕込まれたJavaScript (例えば `fetch()` API) が、クロスオリジンリクエストであなたのマシンの `http://127.0.0.1:3444/api/execute` や `/api/install-agent` エンドポイントへPOSTリクエストを送信し、悪意のあるOSコマンドを実行する可能性があります。CORSが `*` なため、ブラウザはこれをブロックしません。</li><li><b>LAN経由の攻撃</b>: 同じLAN (例えば、カフェのWi-Fi、会社のネットワーク、共同作業スペースなど) にいる攻撃者が、直接あなたのマシンのポート3444にアクセスし、同様に悪意のあるPOSTリクエストを送ることで、RCEを達成できます。</li></ul>
一度RCEが成功すると、攻撃者はあなたのユーザー権限で任意のコマンドを実行できます。これにより、開発中のプロジェクトのソースコード、認証情報、SSHキー、クラウドのAPIキー、`.env` ファイルに保存された秘密情報など、あらゆる機密情報が漏洩したり、改ざんされたりする危険性があります。最悪の場合、マルウェアをインストールされ、マシンの完全な乗っ取りにつながる可能性もあります。
具体的なPoCと技術的な仕組み
実際の攻撃は、非常にシンプルです。たとえば、以下の `curl` コマンドで `tmp` ディレクトリにファイルが作成されます。
`npx claude-code-templates --studio` を実行中のマシンで、ターミナルを開いて試してみてください。
<b>/api/execute への攻撃例:</b>
<pre><code>curl -s -X POST http://127.0.0.1:3444/api/execute \ -H 'Content-Type: application/json' \ --data '{"prompt":"aaaaaaaaaa; touch /tmp/CCT_RCE_PROOF","mode":"local"}'</code></pre>
<b>/api/install-agent への攻撃例:</b>
<pre><code>curl -s -X POST http://127.0.0.1:3444/api/install-agent \ -H 'Content-Type: application/json' \ --data '{"agentName":"x; touch /tmp/CCT_AGENT_PROOF #"}'</code></pre>
上記のコマンドを実行後、`/tmp/CCT_RCE_PROOF` と `/tmp/CCT_AGENT_PROOF` のファイルが作成されていれば、コマンドインジェクションが成功した証拠です。これは、`prompt` や `agentName` フィールドに挿入された `; touch /tmp/...` という文字列がシェルによってコマンドとして解釈され、実行されたためです。
根本原因は、`child_process.spawn(cmd, argsArray, { shell: true })` が、`argsArray` をそのまま別の引数として扱わず、`cmd + ' ' + argsArray.join(' ')` のように結合して `sh -c` を通じて実行してしまうことです。これにより、`argsArray` の各要素がシェルによって解釈される脆弱性が生まれます。
対策:今すぐ開発環境を守るために
この脆弱性に対して、以下の対策が推奨されます。開発者として、まずは自身の環境に影響がないか確認し、迅速に対応することが重要です。
<ul><li><b>`child_process.spawn` の `shell: true` を削除する</b>: これが最も根本的な対策です。`shell: true` を削除すれば、引数がシェルで解釈されることなく、OSコマンドの引数として安全に渡されます。</li><li><b>入力値の厳格なバリデーション</b>: `agentName` のようなユーザー入力は、正規表現 (`^[A-Za-z0-9._/-]+$`) などを用いて厳密にホワイトリスト形式で検証し、シェルメタ文字や不適切な文字を完全に排除するべきです。</li><li><b>サーバーのバインドアドレスを制限する</b>: `app.listen(PORT, '127.0.0.1', ...)` のように、サーバーをループバックアドレス (`127.0.0.1`) のみにバインドし、LANからのアクセスを不可能にします。</li><li><b>CORSを制限する</b>: `Access-Control-Allow-Origin: *` を使用せず、信頼できるオリジンのみを許可する設定に変更します。</li><li><b>認証メカニズムの導入</b>: そもそも開発サーバーであったとしても、外部からのアクセスが想定される場合は、何らかの認証を導入すべきです。</li></ul>
<b>フロントエンドエンジニアとして今すぐできること:</b>
<ul><li><b>使用状況の確認</b>: `npx claude-code-templates --studio` をご自身の開発環境で実行したことがあるか確認してください。</li><li><b>公式アナウンスの確認とアップデート</b>: 脆弱性が修正されたバージョンがリリースされている場合は、すぐにアップデートを適用してください。公式のアナウンスを常にチェックすることが重要です。</li><li><b>不要なサービスの停止</b>: 開発中に一時的にしか使わないサービスやツールは、使い終わったらすぐに停止する習慣をつけましょう。</li><li><b>信頼できないWebページの閲覧に注意</b>: 開発サーバーが起動している間は特に、不審なリンクやWebページを不用意に開かないように注意してください。</li><li><b>開発ネットワークのセキュリティ強化</b>: 可能であれば、開発用のマシンは信頼できるネットワークでのみ使用し、公共のWi-Fiなどでは重要な開発作業を避けるようにしましょう。</li></ul>
まとめ
今回の「Claude Code Templates」の脆弱性は、開発ツールのセキュリティがいかに重要であるかを改めて示しています。特に、開発者のマシンは多くの機密情報やアクセス権を持つため、攻撃者にとって格好のターゲットとなりがちです。フロントエンドエンジニアも、使用するライブラリやツールのセキュリティ情報に常にアンテナを張り、迅速な対応を心がけることが、自分自身の、そしてプロジェクト全体のセキュリティを守る上で不可欠です。
安全な開発環境を保つために、一人ひとりのセキュリティ意識を高めていきましょう。