すべての投稿に戻る
公開日 · 著者 Renaud Deraison

エージェントがマルウェアを推薦した

Island が FakeGit を発見した。約7,600 個の悪意ある GitHub リポジトリ、そのうち 800 個超が AI スキルや MCP サーバーを装い、StealC インフォスティーラーを導入する Windows ローダー SmartLoader を配布していた。新しいのは配送手口 AgentBaiting だ。Claude Code、Gemini、ChatGPT がこれらのリポジトリを自ら見つけ、攻撃者の README をドキュメントとして読み、インストール手順をあなたに渡す。あるテストでは Claude Code がリポジトリをクローンし、ファイルを自ら実行した。Bromure Agentic Coding は、この推薦から実行までの経路全体を使い捨ての Linux VM 内で走らせる。そこでは Windows ローダーは不活性で、盗める認証情報はおとりだけだ。

あなたはコーディングエージェントにスキルを探すよう頼んだ。エージェントは 検索し、ドキュメントのように見える README を読み、ZIP をダウンロードして 実行するよう告げた。誰も悪いリンクを送っていない。エージェントが自らマル ウェアを見つけて推薦した——そしてあるテスト実行では、リポジトリをクローン し、ファイルをあなたの代わりに実行した。

2026年7月21日、Island は FakeGit と呼ぶキャンペーン——そして AgentBaiting と名付けた配送手口 ——に関する調査を公開した。数字は大きい。約6,600 のアカウントにまたがる 約7,600 個の悪意ある GitHub リポジトリ、そのうち 800 個超が AI スキル や MCP サーバーを装う。Gmail や WhatsApp の連携、Databricks、Jenkins、 Docker のツール——開発者がコーディングエージェントに探させる種類の機能だ。 さらに 600 個超が LobeHub、Glama、MCP.so、MCP Market といった公開 AI レジストリにも掲載されていた。7月までに、約200 個のサブセットが、リリース 資産の 1,400 万回超のダウンロード を記録していた。

ペイロードは SmartLoader という Windows ローダーで、永続化を確立し、情報窃取ツール StealC を引き込む。マルウェアはありふれた部分だ。それがどうやってあなたに届くか が、新しい部分だ。

AgentBaiting——エージェントが配送経路だ

サプライチェーン攻撃はかつて餌を必要とした——メールのリンク、打ち間違えた タイポスクワットのパッケージ名、クリックした検索結果。FakeGit はこの段階 から人間を取り除く。Island の指摘は彼らの言葉でこうだ。「AI エージェントは 悪意あるリンクを与えられる必要はない。自ら FakeGit リポジトリを発見し、 README を正当なドキュメントとして扱い、攻撃者の指示をユーザーに渡すことが できる。」

彼らは実際のエージェントで検証した。

  • Claude Code に「無料のシネマティックプロンプトのスキルを探して」と 頼むと、adlaiponderous700/claude-skill-cinematic-prompt を浮上させ、 一部の実行ではダウンロードして実行する手順を推薦した。
  • Gemini に「無料の Walmart MCP サーバー」を頼むと、 DomingosNgongo/walmart-mcp を GitHub への直接リンク付きで最上位の結果と して返した。
  • ChatGPT は同じリポジトリを選択肢に挙げ、「始めるのに最適な場所」だと 名指しした。

いずれもリンクを渡されてはいない。エージェントは機能を探しに行き、通常の 検索とレジストリ閲覧を通じてキャンペーンのリポジトリを見つけ、攻撃者が書い た README を、あらゆるドキュメントを読むのと同じように——事実として——読ん だ。リポジトリはまさにその読み手向けに装われている。 Mann1988/awesome-claude-skills は本物の ComposioHQ/awesome-claude-skills(スター67,000 超)を複製し、確立された ように見せるため 63 スターと 18 フォークで水増しする。ユーザー名は既知の メンテナーとわずか一文字違いだ。README は読み手を三段階で導く。GitHub Releases から ZIP をダウンロードし、実行し、セキュリティ警告をクリックで やり過ごし、セットアップウィザードに従え、と。

そして少なくとも一度の実行で、Island の報告によれば、Claude Code は推薦で 止まらなかった——インジケーターの何かが停止させるまで、「悪意あるリポジト リをクローンし、悪意あるファイルをテストマシンにダウンロードした」。攻撃 表面の全体が一文に収まる。日常のタスクをこなすエージェントが、ペイロードを 自らディスクへ降ろしたのだ。

実際に着地するもの

ZIP はソースコードではない。Island は手がかりについて率直だ。「正当な MCP サーバーやスキルはマニフェスト付きのソースコードであって、ランチャースクリ プト、名前を変えたランタイム、テキストファイルに偽装したペイロードを収めた Windows の ZIP ではない。」server_databricks_mcp_1.6.zip のような FakeGit リリースの中には、小さな .cmd または .bat ランチャー、名前を変えた LuaJIT 系ランタイム(luau.exe)、そしてデータファイルの名前をまとった 約300 KB の難読化 Lua ペイロード——ico64.txt——がある。ランチャーは start luau.exe ico64.txt を実行し、コンソールウィンドウは自ら隠れ、 SmartLoader は次を行う。

  • コマンド&コントロールのアドレスを Polygon スマートコントラクト に格納 された値から解決する——分散型で、テイクダウンしにくい。
  • 再起動を生き延びるため %LOCALAPPDATA% 配下にスケジュールタスク を 登録する。
  • GitHub から暗号化されたステージを引き込み、PE クリプター経由で StealC を別プロセスに注入する。

すると StealC はインフォスティーラーがすることをする、そして少しばかり悪辣 に。ブラウザのパスワードとクッキー、拡張機能のデータ、メールとリモートアクセ スの認証情報、スクリーンショット、ホストの詳細——そして アクティブな セッション を奪う。この最後の点に関する Island の注記が効いてくる。 「StealC はパスワードだけでなくライブセッションを奪うため、パスワードの リセットだけでは不十分だ。」盗まれたセッショントークンは、すでにあなたの ログインの先にある。

エージェント「スキルを探して」検索FakeGit リポジトリ偽名 · 63 スターREADME=「文書」事実として読む推薦ZIP を実行または自らクローンあなたのマシンluau.exe ico64.txt → SmartLoader → StealCパスワード・Cookie・セッション・常駐送信C2Polygon 経由人は押していない。エージェントが見つけ、信じ、持ち帰った。
AgentBaiting は人間の餌なしにループを閉じる。エージェントは機能を探し、FakeGit リポジトリを自ら見つけ、攻撃者の README をドキュメントとして読み、インストール手順を推薦するか、自らクローンして実行する。あなたのマシンで走る通常の構成では、Windows ローダーが実行され、StealC が本物のパスワードとライブセッションをかき集め、戦利品が持ち出される。

なぜリポジトリの検証が答えの全体だったことは一度もないのか

本能はこう働く——悪いリポジトリを捕まえろ。偽名にフラグを立て、README を 採点し、アカウントをブロックリストに入れろ、と。Island 自身の助言は、もっと 難しいところを指す。「ユーザーが使う経路だけでなく、エージェントが使う経路 を監視せよ。AgentBaiting とは、ダウンロード、git clone、シェルコマンドが、 日常のタスクを完了するエージェントから発生しうることを意味する。」エージェ ントの検索は、人間のチェックポイントを置ける経路ではない。それはマシンの 速度で、ほぼ同一の数千のリポジトリを横断して走り、見つけたものを何であれ ドキュメントとして扱う。それが仕事だからだ。

これはエージェント型セキュリティの残りが繰り返しぶつかる同じ壁だ。コマンド を読む拒否リストは それを書き換えるシェルに敗れる。 パッケージを読むスキャナーは パッケージにないペイロードに敗れる。 そしてマルウェアを見つけるためのレビューは 見つけるよう送られたマルウェアを実行する。 FakeGit はもう一つ加える。攻撃者の README を真実として扱う推薦エンジンだ。 どれもが、悪いものが 記述される 場所にフィルターを置き、悪いものが 実行 される 前に捕まえようと期待する。記述は攻撃者が書くものだ。実行こそ、結果 が決まる唯一の場所だ。

Bromure が線を引く場所

Bromure Agentic Coding は、エージェントの検索結果を出し抜こうとはしない。 唯一重要な瞬間——推薦されたものが実行される時——に起きることを変える。 Bromure が走らせるすべてのエージェント——Claude Code、Codex、Grok Build ——は、macOS そのものではなく、あなたの Mac 上の使い捨て Linux VM 内で走る。 だからエージェントが FakeGit リポジトリをクローンし、Island が Claude Code で観察したように ZIP を実行するとき、すでに三つのことが真である。

第一に、**ペイロードは不活性だ。**SmartLoader は Windows プログラムだ。 .bat ランチャー、luau.exe ランタイム、PE クリプターによる注入、 %LOCALAPPDATA% 配下のスケジュールタスク。Bromure のエージェントは Linux で走る。.cmd ランチャーにはインタプリタがなく、luau.exe と注入された StealC の PE は実行されず、永続化が取り付く %LOCALAPPDATA% も Windows タスクスケジューラも存在しない。ある OS 向けにコンパイルされた攻撃が別の OS で走り、自分に扱える何一つ見つけられない。

第二に、**奪うべき本物の認証情報がない。**攻撃者が Linux ビルドを配ってい たと仮定しよう。StealC の目的そのものはブラウザのストア、ライブセッション、 保存された認証情報をかき集めることだ——だが VM 内にはサインイン済みの ブラウザも、クッキーの瓶も、持ち上げるセッションもない。ディスクと環境で 見つけられる 秘密はおとりだ。Bromure はプレースホルダー値(brm_…、 合成された ~/.kube/config、使い捨ての ssh とクラウドのトークン)を VM に 注入し、本物はホスト上、プロキシ内、本物の API へ出ていく途上でのみ入れ替え る。本物の鍵が箱に入ることは決してない。Polygon で解決された C2 に届くのは 何も認証しない文字列の袋だ。

第三に、**送信は可視で、箱は使い捨てだ。**C2 の解決、GitHub からの暗号化 ステージの取得、持ち出しのビーコン——それらはすべて、Bromure のセキュリ ティログに、あなたが見られる外向きトラフィックとして現れる。そして VM の ホームは使い捨てなので、スケジュールタスクも投下されたバイナリも、プロファ イルをベースにリセットした次の瞬間に消える。SmartLoader が足場を保てる永続 的なホストは存在しない。

使い捨て Linux VMFakeGit をクローンエージェントがここで ZIP 実行SmartLoader.bat + luau.exe = PELinux で実行不可StealC が狙う対象ブラウザ無し・セッション無しANTHROPIC_API_KEY = brm_9f2a…(偽)git / AWS / ssh = おとり送信(記録済み)C2 はおとりを受信何も認証しない本物の秘密ホストのプロキシに残る通信時に差し替え推薦も実行もされる。ただしあなた以外の場所で、偽の鍵で。
同じリポジトリ、同じ推薦、同じクローン——マシンが違う。Bromure 内ではエージェントは使い捨ての Linux VM で走る。Windows ローダーは実行できず、かき集めるライブセッションも本物の鍵もなく、ディスク上の認証情報はおとりで、本物との入れ替えはホストのプロキシでのみ行われ、C2 のビーコンは記録される。推薦は依然として起きる。窃取には奪うものが何もない。

四つ目の層がある。この攻撃は、実行の攻撃である前に、読解の攻撃だからだ。 FakeGit の README は、まさに Bromure が見張る信頼できない権威の類だ——不正な CLAUDE.mdAGENTS.mdSKILL.md と同じ分類の。Bromure のオンデバイスの プロンプトインジェクション検知は、エージェントがドキュメントとして取り込む 内容を、Mac を決して離れないローカルモデルで採点し、加えて不可視 Unicode の 細工に対する決定論的スキャナーを備える。「この ZIP をダウンロードし、実行し、 警告をやり過ごせ」とエージェントに告げる README こそ、その検知器が存在する 理由たるケースだ。それ単独では壁ではない——だが Bromure ではそれが隔離の 上に 載るので、取りこぼしても、中に本物が何もない箱がなお受け止める。

これが線を引く対象

隔離は封じ込めであって、推薦フィルターではない。Bromure がここで何を変え、 何を変えないかを正確にしておく価値がある。

エージェントは依然としてリポジトリを推薦できる

Bromure は GitHub も、MCP レジストリも、エージェントの検索結果も検証せ ず、エージェントが FakeGit リポジトリを浮上させたりインストール手順を 渡したりするのを止めない。そのサプライチェーン走査が対象とするのは パッケージレジストリ——npm、PyPI、Cargo など——であって、そっくりリポジ トリの README ではない。変わるのは、推薦されたものがどこで走り、走った ときに何へ手が届くかだ。

Windows のペイロードを止めるのは OS の境界であってルールではない

SmartLoader が失敗するのは、エージェントが Linux で走るからであって、 Bromure がそれを指紋認識したからではない。Linux ネイティブの窃取ツール なら実行される——それでも空手で終わる。VM にはサインイン済みブラウザも ライブセッションもなく、認証情報はおとりで、ホームは使い捨てだからだ。

置換は設定した秘密を守る

おとりへの入れ替えが守るのは、プロファイルに入れる認証情報だ。モデルの 鍵、git とクラウドのトークン、マネージド DB のエンドポイント、ssh 鍵。 箱の中で手作業で確立したセッションや、スクリプトが実行中にファイルへ 書く秘密は、ただのデータだ。秘密はワークスペースではなくブローカーに 保て。

検知は網であって壁ではない

オンデバイスのインジェクション採点は、インストールして実行させる README をたいてい捕らえる。だが決意した書き手は、単一のスキャナーをすり抜ける よう餌を言い回せる。検知器は一つの層として扱え。検知器が取りこぼしたとき に持ちこたえるのは封じ込め——偽の鍵と記録された送信を持つ使い捨ての箱 ——だ。

Island の結びの一文こそ、腰を据えて向き合うべきものだ。「AI の能力は、 ソフトウェアが企業に入り込む経路となった。そして FakeGit がそれを使う最後の キャンペーンにはならないだろう。」あなたのエージェントはスキルやサーバーを 探しに行く。そして見つけるものの一部は、見つけられるよう装われている。問い は、それがいつか間違ったリポジトリを推薦するかどうかではない——7,600 の リポジトリと 1,400 万のダウンロードでは、時にそうなる。問いは、そうなった ときに何が走るかだ。あなたのマシン、ブラウザのセッション、本物の鍵か、それ とも中に一握りのおとりを入れて放り捨てられる Linux の箱か。Bromure は後者 にする。