HN 日本語サマリー

← 一覧へ戻る
セキュリティ

Plugin4Shell – 主要な4つのコーディングエージェントで見つかったゼロクリックRCE脆弱性

Plugin4Shell – Zero Click RCE Vulnerability found in top four coding agents (air.security)

7 pointsby fishthethis2 コメント

要約

主要なAIコーディングエージェントであるClaude Code、Codex、Copilot、Geminiに、ゼロクリックでリモートコード実行(RCE)を可能にする「Plugin4Shell」という深刻な脆弱性が発見されました。この脆弱性は、信頼されたプラグインがサプライチェーン攻撃により悪意のあるものに置き換えられることで発生し、SHAピン留めというセキュリティ機構を回避します。これにより、数百万のエージェントが影響を受け、攻撃者はエージェントがアクセスできるあらゆるデータやシステムへの完全な制御権を得る可能性があります。

全文翻訳

Plugin4Shell - 主要な4つの人気コーディングエージェントで見つかったゼロクリックRCE脆弱性 Plugin4Shellは、主要な4つのAIコーディングエージェントであるClaude Code、Codex、Copilot、Geminiに影響を与える、ゼロクリックで高深刻度のRCE脆弱性です。このAIサプライチェーン攻撃は初のもので、信頼されたプラグインがサイレントに悪意のあるものと入れ替えられ、エージェントのSHAピン留めをバイパスして自動的にインストールされます。これはマーケットプレイスでは修正できない欠陥であり、ユーザーはエージェントを更新する必要があります。 Or Nevo、Dor Granat、Niv Hoffman 2026年9月17日 共有 コピー済み エージェントのアドオン、つまりエージェントにインストールするプラグインやスキルは、実質的にアプリケーションであり、企業は検証済みのエンタープライズグレードのマーケットプレイスではなく、オープンコミュニティのマーケットプレイスから圧倒的にインストールしています。エージェントは、それを操作する従業員と同じ権限で実行されます。つまり、機密データ、内部システム、本番環境への同じアクセス権を持ちます。プラグインはデフォルトでこれらの権限を継承します。したがって、悪意のあるプラグインは権限昇格を必要としません。従業員が持つ企業の中核資産に対するリーチと同じリーチを攻撃者に与え、従業員のコンピュータ上で完全なリモートコード実行を達成します。 これまでの経緯 これは私たちが語ってきた物語の第3幕です。「The Story of Skills」では、侵入がいかに容易かを示しました。悪意のあるスキルを作成し、それがバイラルになるのを見て、26,000を超えるエージェントを制御下に置きました。人々が信頼するマーケットプレイスにコードを仕込むことは難しいことではありません。「SkillJacking」では、何も仕込む必要さえありませんでした。すでに使用されていた925のスキルが、そのリポジトリを乗っ取ることで、メンテナーから奪われ、134,000のエージェントに影響を与えました。この種のラグプルに対する業界の回答はSHAピン留めです。1つのコミットのコードを確認し、そのコミットをピン留めし、ピン留めされたコミットが永久に実行されると信頼します。Plugin4Shellは、その境界が失敗する物語です。 これはプラグインのSHAピン留めバイパスです。エージェントはマーケットプレイスがピン留めした正確なコミットをチェックアウトしますが、それがそこに到達したかどうかは決して検証しません。そのため、プラグインのリポジトリを制御する攻撃者は、ピン留めが尊重されているように見せかけながら、チェックアウトを悪意のあるコードに解決させることができます。その結果、Claude Code、Codex、GitHub Copilot、Gemini CLI全体でゼロクリックリモートコード実行が可能になります。 Air MarketplaceとAir Filterを使用しているエンタープライズは、Plugin4Shellの影響を受けませんでした。 Plugin4Shellがユニークな理由 これはAIエージェントエコシステムの最初のサプライチェーン脆弱性です。以前のAIエージェントのセキュリティ研究は、モデルまたはエージェント自体を標的としていました。Plugin4Shellは、それらの下にある配布レイヤー、つまりエージェントのアドオンが数百万台のマシンに到達するマーケットプレイスを攻撃します。 ゼロクリックリモートコード実行。ユーザーの操作は一切必要ありません。その結果、エージェントとそのホストが完全に侵害され、エージェントが到達できるすべての資産とすべてのデータに完全にアクセスできるようになります。 1つの欠陥で、すべての主要ラボがそれを抱えています。影響を受けるすべてのエージェントに同じ設計上のエラーが存在します。これは1つの製品の実装ミスではなく、業界全体で繰り返される単一のミスであり、数百万のエージェントを脆弱にしています。 マーケットプレイスではこれを完全に閉じることはできません。ピンはエージェント内で解決されるため、エージェント側の修正のみが保証を回復します。マーケットプレイスは、SHA形状の名前を拒否するホスト(実質的にGitHubのみ)のみを許可することで、ブランチ名バリアントを軽減できますが、それはエージェントが公式にサポートしているホストを禁止し、Gemini CLIのバリアントには何も効果がありません。 誰が影響を受け、その影響は何ですか マーケットプレイスからプラグインをインストールする主要なコーディングエージェントを実行している人は誰でも危険にさらされます。それらはClaude Code、OpenAI Codex、GitHub Copilot、およびGemini CLIです。この危険性は、プラグインを不注意にインストールしたユーザーに限定されません。被害者は、信頼するマーケットプレイスから、セキュリティモデルが意図したとおりにレビューおよびピン留めされたプラグインをインストールしているだけで十分です。 正しいことをしても保護されません。コミュニティマーケットプレイスを超えて、プラグインをレビューし、レビュー済みのコミットにピン留めする組織は、SHAピン留めをセーフガードとして依存していますが、Plugin4Shellはそれを静かに無効にします。レビューはパスし、ピンは書き込まれますが、異なるコードがインストールされます。ピン留めに構築されたすべての下流の検証プロセスは、この失敗を継承します。 それが0クリックである理由は、プラグインの自動更新です。エージェントはインストールされたプラグインをバックグラウンドで更新します(Claude CodeとCodexではこれがデフォルトです)。そのため、ピン留めされたコミットがアップストリームで変更されると、ユーザーがすでに信頼し、すでにインストールしているプラグインが、ユーザーの操作なしに悪意のあるバージョンに置き換えられます。インストールステップも、プロンプトも、気づくべきこともありません。攻撃者は新しいものをインストールするように誰かを説得する必要はありません。彼らに必要なのは、無害なプラグインがすでに存在することだけです。 どのように悪用されるか 攻撃者がマーケットプレイスを制御する必要のない2つの経路があります。 方法1:プラグインを公開し、その後悪意のあるものにする。攻撃者は、信頼できるマーケットプレイスに本当に無害なプラグインを寄稿し、レビューを通過させ、その後、その内容を悪意のあるバージョンに置き換えます。トップマーケットプレイスにプラグインを導入することは仮説ではありません。私たちはすでにそれを実行しました(「The Story of Skills」)。 方法2:正当な作者のプラグインを乗っ取る。攻撃者は、他の誰かが書いたプラグインの背後にあるリポジトリを乗っ取り、マーケットプレイスがすでに信頼しているものを、Plugin4Shellを利用して、それをインストールしているすべてのエージェントに悪意のあるバージョンを強制的にインストールさせます。これは、これを止めるために存在するバージョンピン留めをバイパスします。私たちは、「SkillJacking」と「RepoJacking」で、この乗っ取りステップを実稼働で実証しました。これらを組み合わせると、チェーンはエンドツーエンドで証明されます。乗っ取りは大規模に発生し、Plugin4Shellはそれらを封じ込めるために構築されたメカニズムを打ち負かします。 攻撃のエンドツーエンドの流れ: 1. 植え付け:攻撃者は、コミットaaa...aaaにピン留めされた、本当に無害なプラグインを公開します。レビューを通過します。 2. 採用:人々がそれをインストールします。すべてのインストールは、レビュー済みの信頼できるバージョンであるaaa...aaaにピン留めされます。 3. バージョンアップ:攻撃者は通常のアップデートをリリースします。マーケットプレイスは新しい、まだ無害なコミットbbb...bbbにピン留めを変更します。ピンが変更されました。 4. ラグプル:攻撃者はbbb...bbbという名前のブランチを作成し、それをリポジトリのデフォルトに設定し、悪意のあるコードを指すようにします。ピン留めされたコミット自体は変更されないままです。 5. RCEへの自動更新:変更されたピンが、すべてのアエージェントのバックグラウンド自動更新をトリガーします。チェックアウトはbbb...bbbをブランチに解決します(gitは同じ名前のコミットよりも参照を優先します)、そして実行されます。プロンプトなし、クリックなし。 技術的な詳細 影響を受けるすべてのアエージェントは、ピン留めされたコミットをチェックアウトしますが、それが実際にそこに到達したかどうかは決してチェックしません。その1つのチェックの欠落が、バグ全体であり、gitは攻撃者にそれを悪用する2つの方法を提供します。 ピン留めされたコミットがブランチになる(Claude Code、Codex、GitHub Copilot) これらのエージェントはプラグインリポジトリをクローンし、ピン留めされたSHAをチェックアウトします: git clone <plugin repo> ./git checkout aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa アップストリームリポジトリを制御するようになった攻撃者は、ピン留めされた正確な40桁の16進数SHAの名前を持つブランチを作成し、それをリポジトリのデフォルトにします。そのため、通常のgit cloneはそれをその名前のローカルブランチとしてダウンロードします。git checkoutはそのピン留めされたSHAをそのブランチに解決します。名前が有効な参照とオブジェクトIDの両方である場合、gitはその参照を優先し、refname is ambiguousという警告を表示するだけです。そのため、ピン留めされたコミットがまだ存在するかどうかは関係なく、ブランチがチェックアウトされることになります。それが機能するための2つの条件があります。ブランチにハッシュのような名前を付けることをブロックするものがないこと(git自体のgit check-ref-formatは40桁の16進数名を許可し、プロトコルに従うホストもそれを受け入れます)、そしてブランチがリポジトリのデフォルトであること。デフォルト以外のブランチはリモート追跡参照としてのみフェッチされ、チェックアウトはコミットにフォールバックします。ワーキングツリーは攻撃者によって制御され、エージェントはピン留めされたコミットで正常なインストールを報告します。 これはインストール時のバグだけでなく、それがゼロクリックである理由でもあります。同じgit checkoutがバックグラウンドの自動更新で再実行されます。これはClaude Codeと...