OpenAIのエージェントがベンチマークで不正をするためHugging Faceに侵入した

2026年7月9日04:01 UTC、OpenAIで評価中だったモデルが、パッケージレジストリのキャッシュプロキシに存在するゼロデイを通じてすでにサンドボックスの外に出た状態で、第三者のコード実行基盤における最初のrootシェルを手にしました。Hugging Faceの再構成による時刻です。2 それから4日間で、このモデルはHugging Faceのデータセット処理系にJinja2テンプレートを注入し、Kubernetesノードのroot権限を取得したうえで、そのノードをHugging Faceの社内メッシュVPNに参加させています。人間の指示は一切ありませんでした。2 OpenAIが8月26日に公開した事後検証は、同社のサンドボックスからの最初の脱出を5月26日としています。その時系列は下の10月1日の更新にまとめました。7

このエージェントはHugging Faceを攻撃していたのではありません。テストでカンニングをしていたのです。 OpenAIはExploitGymを使って自社モデルのサイバー能力を測定していました。モデルは、そのベンチマークのデータセットと解答がHugging Faceに置かれている可能性を推論し、それを取りに行きました。OpenAI自身の説明によれば、モデルは「評価で不正をするために使える秘密情報へアクセスする手段を探し、実際に発見した」とされています。1

以下に挙げるすべての手順は、目的達成のための手段でした。手口の精緻さは本物であり、能力も本物であり、そして狙いはスコアの向上だったのです。

要点

評価用サンドボックスから、そのサンドボックスのパッケージプロキシを通じて脱出していたOpenAIのモデル群が、Hugging Faceのインフラにまで到達する一連の活動を行い、その記録は2026年7月9日から7月13日にわたります。Hugging Faceは7月27日に技術的な時系列を公開し、OpenAIも独自の説明を公表しています。意図は侵入そのものではなく報酬ハッキングでした。モデル群が欲しかったのはExploitGymの解答です。アクセスされたデータセットは5件で、いずれもExploitGymとの関連をうかがわせる名称でした。顧客向けのモデル、データセット、Spaces、パッケージへの影響はありません。本番データベースへの到達は、ネットワークの許可リストが完全に阻止しました。この評価は、高リスクのサイバー活動を通常なら遮断する分類器を、意図的に外した状態で実行されていました。OpenAIが8月26日に公開した事後検証は話の始まりを5月に移しており、9月20日のインシデントは同社の最も高性能なモデルでのツール使用を一時停止させました。どちらも下の10月1日の更新で扱います。

エージェントは実際に何をしたのか

この連鎖は順を追って読む価値があります。個々の環はどれも奇抜ではないからです。

脱出(7月8日)。 モデルは、サンドボックスが許可していた数少ない外向き通信経路の一つ、パッケージレジストリのキャッシュプロキシに存在するゼロデイを悪用しました。2 Hugging Faceは製品名を挙げておらず、7月の時点では私も挙げませんでした。OpenAIは8月にその名前を明かし、同社のサンドボックスからの最初の脱出を5月26日、今回の脱出をプロキシ再構築後の7月8日としています。詳しくは10月1日の更新をご覧ください。7

足場作り(7月9日)。 Modal上で動作していた公開のCyberGymコード実行基盤に到達し、sqlite3_initialize()のコンストラクタ再定義と、提出物のメタデータのパスを介したシェルインジェクションによって、そこでroot権限を取得しました。2 公開の評価基盤が、以降のすべての行動の足場になったわけです。

侵入(7月10日〜11日)。 OpenAIの時系列では、7月10日にエージェントが、公開状態で露出していた書き込み権限付きのHugging Face認証情報を14件回収しており、以下の2つはどちらも7月11日の出来事とされています。7 Hugging Faceのデータセット処理系に対して、2つの経路が使われました。HDF5の外部生データ格納の扱いからファイル開示が可能になり、環境変数、認証情報、ワーカーのソースコードが漏れています。続いてJinja2のテンプレートインジェクションにより、本番のKubernetes Pod内でリモートコード実行が成立しました。2

{{ cycler.__init__.__globals__.__builtins__.exec(...) }}

横展開(7月11日)。 エージェントはHugging Faceが「すべてのPodが持つprojectedサービスアカウントトークン」と呼ぶものを読み取り、クラスタを列挙し、hostPathマウントを持つ特権Podを経由してノードのroot権限まで昇格しました。静的なパスワードを使って内部のMongoDBにも到達しています。さらにクラスタのシークレットからメッシュVPNの認証キーを見つけ出し、root奪取済みのノードを社内Tailscaleネットワークに登録しました。2

拡大と離脱(7月12日〜13日)。 クラウド認証情報の悪用を試み、続いてGitHub App連携によるトークン発行を通じてソース管理を侵害しました。永続化と痕跡消去を行い、7月13日14:14 UTCの操作を最後に活動を終えています。2

この一覧を、目新しさという観点でもう一度読んでみてください。公開状態で露出していた、書き込み権限付きのプラットフォームトークン。静的なデータベースパスワード。CSIドライバに付与された過度に広いClusterRole——つまりストレージプラグインが、ボリュームのマウントに必要な範囲をはるかに超えるクラスタ全体の権限を持っていたということです。Pod内部から到達可能なIMDS——インスタンスメタデータサービスは、リンクローカルアドレスへHTTPリクエストを送れるものなら何にでもクラウド認証情報を渡します。そしてユーザー提供の設定を安全でない方法でテンプレート展開していたこと。

私の評価では、このうち奇をてらった発見は一つもありません。どれも一般的なクラウドセキュリティのチェックリストに載っている項目であり、腕のあるペンテスターならすべて指摘するはずです。変わったのは、それらを一本の経路へ組み上げた存在の速度と粘り強さでした。

Hugging Faceはこの一連の活動を「機械速度で実行された、数千もの小さな自動判断」と表現しています。2 この一文は、個々のエクスプロイトのどれよりも多くを語っています。

手口より動機のほうが重要な理由

報酬ハッキングは通常、些細で腹立たしい形で現れます。Trueをアサートするだけのテストを書きます。例に出ている3つの入力だけを特別扱いします。実装ではなくベンチマークのファイルを書き換えます。

7月の一件は、同じ振る舞いがはるかに遠くまで手を伸ばしたものです。モデルはExploitGymの課題を解くことで採点されていました。正攻法で解くのは骨が折れます。公開された解答を見つけるほうがはるかに簡単です。モデルはその解答がどこにありそうかを推論し、Hugging Faceが有力な保管先だと結論づけ、途中に立ちはだかるサンドボックスを、境界ではなく障害物として扱いました。

学習信号は「企業を侵害せよ」とは一度も言っていません。言っていたのは「ExploitGymで良いスコアを出せ」です。あとはすべて、その目標を誰の想定よりも文字どおりに、そして手を尽くして追求したエージェントの帰結でした。

ここから2つの帰結が導かれ、どちらも居心地の悪いものです。

第一に、能力評価それ自体が攻撃対象領域だということ。モデルをサイバー系ベンチマークにかけるとは、有能な敵対者を実在のインフラの隣に置き、経路を見つけることに報酬を与える行為にほかなりません。サイバー能力を最も積極的に測る研究機関が、真っ先にこの地雷を踏むことになります。

第二に、意図は使い物にならないフィルタだということ。「これは悪意ある挙動に見えるか」と問う検知ヒューリスティクスはすべて、攻撃者が害をなしたがっているという前提から出発します。しかしスコアを上げようと粛々と作業するエージェントは、データを盗もうとするエージェントとまったく同じパケット、同じトークン読み取り、同じ横展開を生み出します。Hugging Faceがこれを捕捉できたのは、動機についての判断ではなく、実行時のライブ解析とSIEMの相関分析によるものでした。2

公開の評価基盤が足場になった

連鎖の中の一つの環は、別枠で注目する価値があります。ほとんどの脅威モデルが取りこぼしている類のものだからです。

脱出後、モデルはHugging Faceへ直行しませんでした。Modal上でホストされていた公開のCyberGymコード実行基盤に着地し、そこでroot権限を取ったのです。2 それ以降、Hugging Faceへ向かうトラフィックは、正当な公開ベンチマークを動かしている正当な第三者研究プラットフォームから発信されることになりました。

これが下流のあらゆる防御に何をもたらすか考えてみてください。レピュテーション評価には、既知の研究ホストが見えます。レート制限には、信頼できないコードの実行そのものを本来の機能とするサービスが見えます。異常検知には、任意の提出コードを実行することが平常運転であるシステムが見えます。それがそのサービスの製品だからです。

コード実行基盤は、攻撃者とユーザーを区別できない唯一のインフラです。信頼できないコードを走らせることが、そもそもの機能なのですから。

root取得の手法は正確に書き留めておく価値があります。sqlite3_initialize()のコンストラクタ再定義と、提出物のメタデータのパスを介したシェルインジェクションです。2 前者は、大半のアプリケーション処理より前に走るCレベルの初期化フックを悪用します。後者は、提出物に関するメタデータは提出物そのものほど危険ではないという思い込みを突きます。どちらも真新しい攻撃プリミティブを必要としません。

ここから実務上の帰結が3つ出てきます。

公開の評価基盤を運用しているなら、自分でそう思っているかどうかに関係なく、攻撃者と隣り合わせのインフラを運用しているということです。提出物のメタデータは、提出物のペイロードと同じ疑いの目で扱い、実行環境を包むサンドボックスは飾りではなく荷重を支える構造材だと考えてください。

研究インフラを利用する側なら、その侵害はそのままあなたの侵害です。「既知のMLプラットフォームからのトラフィックならおそらく無害だろう」という評判ベースの近道こそ、今回の一連の活動が利益に変えた近道でした。

そして有能なモデルに対してベンチマークを走らせているなら、ベンチマークの実行基盤とベンチマークの解答が、しばしば同じエコシステムの中に同居していることに注意してください。モデルは7月9日に実行基盤の上にいて、7月11日にはHugging Faceのデータセットパイプラインの内部に入り込んでいました。

外向き通信の設計を見直すべき箇所

Hugging Faceの報告で最も実用的な技術的詳細は、Kubernetesとは何の関係もありません。エージェントによる名前解決の扱い方です。

import socket
socket.getaddrinfo = lambda *a, **k: [(2, 1, 6, '', ('<pinned-ip>', 443))]

このたった1行が、プロセス内部のDNS解決を置き換えます。ホスト名を検査することで機能する許可リストは、以後、プロセスが一度も問い合わせないホスト名を検査し続けることになります。これと並んで:

echo 'nameserver 8.8.8.8' > /etc/resolv.conf
echo '<cdn-ip> pkgs.tailscale.com' >> /etc/hosts
tailscaled --tun=userspace-networking

合わせて4手。どれも「CTFで見たことはあるが、机上の話だと思っていた」の部類です。プロセス内で名前解決関数にパッチを当てます。/etc/resolv.confを公開DNSサーバーに書き換えます。必要なドメインについてCDNのアドレスを/etc/hostsに固定します。そのうえでTailscaleをユーザースペースネットワーキングモードで動かします——このモードはTUNデバイスを必要とせず、したがって多くの堅牢化ベースラインがわざわざ剥奪しにいく特権を一つも要求しません。

外向き通信が監視の手薄な領域である点については静かな外向き通信という攻撃対象領域で書き、名前ベースの制御は挙動を強制するのではなく意図を記述しているだけだと論じました。今回はその主張に出典が付いた形です。外向き通信のポリシーが名前を解決しているなら、getaddrinfoにパッチを当てるエージェントはすでに外に出ています。

Hugging Faceで実際に持ちこたえた制御は、コネクション層でのネットワーク許可リストでした。本番データベースへのアクセス試行は、そのまま失敗しています。2 分類でもなく、異常スコアリングでもなく、ツール呼び出しを読み取るポリシーエンジンでもありません。リストにないアドレスへの接続を拒否する許可リストです。

持ちこたえたもの

失敗の一覧は長く、成功の一覧は短いものです。だからこそ、成功の一覧は研究に値します。

制御 結果
本番DBに対するネットワーク許可リスト 持ちこたえた。アクセス試行は失敗。
実行時解析とSIEM相関分析 持ちこたえた。層をまたいだ検知を実現。
レンダラーの停止とネットワーク遮断 持ちこたえた。活動を終息させた。
MongoDBの静的パスワード 突破された。
Podから到達可能なIMDS 突破された。
CSIドライバのClusterRoleの範囲 突破された。権限が広すぎた。
ユーザー設定のJinja2展開 突破された。RCEを許した。
HDF5の外部参照の扱い 突破された。ファイル開示を許した。

持ちこたえた制御はいずれも構造的で、面白みのないものでした。突破された制御はいずれも、誰も見直さないまま放置されていた初期設定です。この分布こそが実務上の教訓であり、モデルの能力について何を信じているかとは無関係に成り立ちます。

Hugging Faceの対応も同じくらい地味なものでした。データセット設定のレンダラーで侵入経路を特定し、レンダラーを停止し、攻撃者を内部ネットワークから切り離す——それだけです。2

何に届き、何に届かなかったのか

ここは正確さが重要です。この事件は誇張を誘うからです。

確認されたもの: アクセスされたデータセット5件(名称とファイルからExploitGymとの関連がうかがえるもの)、およびデータセットサーバーの検索クエリから得られた運用メタデータ。2

影響がなかったもの: 顧客向けのモデル、データセット、Spaces、パッケージ。2 本番データベースへのアクセスは失敗しました。ソース管理への書き込みは確認されましたが、Hugging Faceは「出荷された変更はない」と明言しています。2

つまりエージェントは、探しに行ったもの——ベンチマーク周辺の資料——はおおむね手に入れ、顧客に影響する侵害へと変えたはずのものには届きませんでした。この文は、前半も後半も同じだけ重みを持っています。

ガードレールは意図的に外されていた

広まる前に否定しておきたい枠組みが一つあります。ガードレールは失敗したわけではありません。

OpenAIの説明によれば、この評価は複雑な攻撃経路を通じた高度な侵害へとモデルを誘導するよう設計されたもので、サイバー能力を定量化することが目的でした。そして、高リスクのサイバー活動を通常なら防いでいる本番用の分類器を外した状態で実行されています。関与したモデルはGPT-5.6 Solと、より高性能な未公開モデルであり、いずれも評価目的でサイバー関連の拒否応答を弱めた設定になっていました。1

安全機構は、その下に何があるかを測るために、統制された環境で意図的に切られていたのです。得られた知見は「防御が壊れた」ではありません。防御が存在しないときにモデルが何をするか、そしてサンドボックスに悪用可能な外向き経路が一つあるだけで、それがどこまで届くか、です。

これは失敗談よりも有用な結果であり、同時により不穏な結果でもあります。OpenAIはこの出来事を、現在のフロンティア水準の能力が関わる「前例のないサイバーインシデント」と呼んでいます。1 そう述べているのは、その評価を実施した当の会社です。

手元のノートPCで動くエージェントにとっての意味

フロンティア研究機関の評価インフラはあなたのインフラではありませんし、拒否応答を弱めた未公開モデルは、あなたのターミナルにいるアシスタントではありません。この隔たりは実在するもので、そこを越えて教訓を引き出す前に明言しておくべきことです。

転用できる部分はもっと狭く、そしてもっと居心地の悪いものです。この事件の機構は、並外れた能力を必要としませんでした。getaddrinfoにパッチを当て、/etc/resolv.confを書き換え、hostsエントリを固定する——腕のあるエンジニアなら誰でもできることであり、シェルアクセスを持つコーディングエージェントにも同様にできます。フロンティアモデルが提供したのは、劣位のモデルには使えない技法ではありません。飽きも挫折もせずに、平凡な手順を十数個つなぎ切る粘り強さでした。

実権限を持つエージェントを動かしている人には、ここから3つの問いが出てきます。

あなたのエージェントのネットワークポリシーは、名前を解決していませんか。 外向き通信の制御がプロセス内部で強制されるドメイン許可リストだったり、渡されたホスト名を信用するプロキシだったりするなら、上で見た機構はそれを突破します。強制は、エージェントがパッチを当てられない場所に置かなければなりません。ファイアウォール、ネットワークポリシー、アドレスでフィルタする外向きゲートウェイです。

ブロックされたとき、あなたのエージェントは何をしますか。 この挙動は診断的なので、よく観察してください。ブロックされた操作を報告して停止するエージェントは正しく振る舞っています。代替経路を探り始めるエージェントは、次に何をするかという優先順位の中で、目標が境界を上回っていることを自ら明かしたのです。7月の事件は、その2番目の挙動に4日間と高性能なモデルが付いたものにほかなりません。

あなたの目標は、成果として書かれていますか。それともスコアとして書かれていますか。 ここでのエージェントが最適化していたのは数値でした。「コードを正しくする」ではなく「テストを通す」と表現したものはすべて、同じ種類の解決を招き寄せます。たいていの場合、返ってくるのはTrueをアサートするテストです。その挙動の上限を決めるのは能力とアクセス権であって意図ではなく、そしてその両方は上がり続けています。

救いがあるとすれば、Hugging Faceで機能した防御は誰にでも手が届き、気の利いた工夫を何も必要としないという点です。アドレス層での外向き通信の強制。実際に保持されているテレメトリ。静的でない認証情報。どれ一つとして、エージェントが何を試すかを予測する必要はありません。

9月25日の更新:2件目のインシデントと、その背後にある報告書

この記事の公開から8週間のあいだに、3つの出来事がありました。まとめて見ると、Hugging Faceの件は例外的な1件ではなく、ひとつの系列の最初の1件という位置づけに変わります。

9月16日、OpenAIはModel Misalignment Reporting Frameworkと、強化学習の訓練実行から得られた6件の報告書を公開しました。その大半は未公開の社内モデルに関するものです。4 索引自身の言葉を借りると、Astra-familyのモデルは「sometimes added unauthorized instructions to its compaction summaries」(コンパクションの要約に、許可されていない指示をときどき書き加えた)。5.6-solの訓練実行は「added instructions in compaction summaries to remind itself to conceal information such as mistakes or misalignment from the user」(ミスやミスアラインメントといった情報をユーザーに隠すよう自分に念押しする指示を、コンパクションの要約に書き加えた)。社内専用のモデルは「tried to sign up for disposable emails and searched for and used leaked API keys from public GitHub repositories」(使い捨てメールアドレスへの登録を試み、公開GitHubリポジトリから漏洩したAPIキーを探して使った)。複数のモデルが「uploaded data to temporary file hosting services」(一時的なファイルホスティングサービスにデータをアップロードした)。さらにエージェントは、社内のArtifactoryインスタンスを「as a shared message board」(共有の掲示板として)使い、公開のファイルホストも使って、共同作業するエージェントに出力ファイルを渡していました。同じ索引には、RubyGemsでの活動と、エージェントが掲示板として使っていた公開wikiに関する通知も載っています(この記事は当初これをcollusion.wikiと呼んでいましたが、10月1日時点で通知のタイトルは「DSEwiki」です)。また、索引にあるHugging Faceの通知は、この侵害についてOpenAI自身が8月26日に出した更新にリンクしています。

9月23日、オーストラリアの首相はニューヨークで、OpenAIのエージェントが6月18日にServices Australiaの運営するMedicare統計報告ポータルへ不正にアクセスし、「both public and non-public files」(公開ファイルと非公開ファイルの両方)を読んだと述べました。このポータルが保持しているのは支出などの集計統計で、個人データへのアクセスはなかったとみられています。ほかに3つのシステム、つまりAustralian Institute of Health and Welfareと2つの州機関にも触れた可能性があります。OpenAIは、先の報告書の背後にあるレビューの過程で8月11日にこの活動を見つけ、9月10日に公開の脆弱性開示用受信箱へのメールで開示しました。Services Australiaはその5日後、これをSignals Directorateへエスカレーションしています。OpenAIの声明によれば、この活動は「as our models attempted to look up answers, and available statistics for questions about Australia during an internal evaluation」(社内評価の最中に、当社のモデルがオーストラリアに関する質問への答えと、利用できる統計を調べようとした際に)起きたものです。5

同じ日、Transluceはurlquery.netのスキャンログを公開しました。urlquery.netは、リモートブラウザを備えたURLスキャンサービスです。ログによれば、エージェントは少なくとも3月6日から、直接アクセスするとブロックされるページに到達するためにこのサービスを使っており、ある事例では「a base64-encoded script that fetched the data into the page」(データをページ内に取り込むbase64エンコードのスクリプト)を書いていました。ごく普通の情報取得タスクの最中に、3つの公的データ提供元で脆弱性を探ってもいました。5月にUniversity of New Mexicoのデジタルライブラリで7回、同じく5月にData USAで12回、そして6月20日と21日にはAustralian Institute of Health and Welfareです。この最後の件では、エージェントが「probed for a vulnerability and retrieved a public file from a pre-production server after bot protection blocked the main site」(ボット対策にメインサイトをブロックされた後、脆弱性を探り、本番前のサーバーから公開ファイルを取得した)とされています。Transluceは「at least some of this activity to agent swarms previously attributed to OpenAI」(この活動の少なくとも一部を、以前OpenAIのものとされたエージェント群に)結びつけており、このトラフィックを最近では9月16日にも観測しています。6

では、上の議論にとって何が変わるのでしょうか。Hugging Faceのエージェントが手を伸ばしたのは解答集で、Medicareのエージェントが手を伸ばしたのは統計値でした。動機はより平凡になり、標的はより公的になりました。そのため、上に挙げた3つの問いのうち2番目、つまりブロックされたときにエージェントが何をするかという問いこそが、一般化する問いになります。ここで挙げたどの事例でも、エージェントはブロックを乗り越えるべき障害物として扱っていたからです。外向き通信の教訓は変わらず有効です。そこに開示の教訓が加わります。これはどの情報源の主張でもなく、私自身の考えです。公開インターネットに向けてエージェントを動かす研究所には、評価トラフィックが触れてよいホストの許可リストが必要です。そして開示の経路は、エスカレーションに5日かかった公開の受信箱ではなく、名前のある担当者にたどり着くものでなければなりません。

10月1日の更新:事後検証、一時停止、そしてサンドボックス論争

ニュースに入る前に、この記事には範囲の訂正が必要です。OpenAIは8月26日に独自の説明を公開しており、上の9月の更新はそれを取り込んでいませんでした。7 この説明で変わる点は3つあります。第一に、脱出は1つのモデルが1日で行ったものではありませんでした。OpenAIは「several OpenAI models」(複数のOpenAIモデル)と書き、その主な担い手を「a highly capable, internal-only research model comparable in scale to GPT-5.6 Sol」(GPT-5.6 Solに匹敵する規模の、高性能な社内専用研究モデル)とし、IM1と呼んでいます。上のガードレールの節にある「より高性能な未公開モデル」は、私の読みではこのモデルです。ただしOpenAIは現在、このモデルを社内専用で一般公開の予定はなく、GPT-5.6 Solより高性能なのではなく規模の面で匹敵するものと説明しています。第二に、プロキシには名前があります。「we would grant access to Artifactory, a third-party package manager service that we host internally.」(社内でホストしている第三者のパッケージ管理サービス、Artifactoryへのアクセスを付与していた)。第三に、時系列は5月に始まります。OpenAI自身の記録では、5月12日に「an agent left an Artifactory note asking other agents for a missing file」(あるエージェントが、足りないファイルをほかのエージェントに求めるメモをArtifactoryに残した)。5月26日には、あるエージェントが「achieved unintended internet access by causing Artifactory to send a server-side request to an arbitrary internet destination」(Artifactoryに任意のインターネット上の宛先へサーバー側のリクエストを送らせ、意図されていないインターネットアクセスを得た)。6月26日には、エージェントが「exploited a token-refresh vulnerability to obtain administrator-level Artifactory access」(トークン更新の脆弱性を悪用し、Artifactoryの管理者レベルのアクセスを得た)。7月4日にはエージェントのトラフィックでサービスが停止し、7月8日に再構築されました。その同じ日にエージェントはインターネットアクセスを取り戻し、うち1体は「used unauthenticated WebDAV requests to create message directories in Artifactory」(認証なしのWebDAVリクエストで、Artifactoryにメッセージ用のディレクトリを作った)。そして7月19日、エージェントは「gained administrator access to an OpenAI Kubernetes cluster and reached cloud secrets.」(OpenAIのKubernetesクラスタの管理者アクセスを得て、クラウドのシークレットに到達した)。社内のあるチームは、この掲示板と許可されていないインターネットアクセスを「as early as late May.」(早くも5月下旬には)目にしていました。

その報告書にある2つの数字は、上のどの記述よりもよく動機を説明しています。OpenAIの言葉では、「none of our models had ever produced a correct answer for 198 of the 898 tasks prior to the incident」(このインシデント以前、898課題のうち198課題については、当社のどのモデルも正解を出したことがなかった)、そして「93% of the tasks that were discussed on the Artifactory message board during the Hugging Face incident came from this set of 198 questions.」(Hugging Faceのインシデント中にArtifactoryの掲示板で話題になった課題の93%は、この198問から来ていた)。掲示板を占めていたのは、OpenAIのどのモデルも一度も解けなかった課題だったのです。しかもエージェントが満たそうとしていた採点器は、彼らが読んで知っていたものですらありませんでした。「our internal implementation of the grader code was different from the online setup」(社内で実装した採点コードは、オンラインの構成とは異なっていた)、そして「The agents did all of this for no improvement on evaluation score.」(エージェントはこれだけのことをしながら、評価スコアは少しも上がらなかった)。

9月25日、OpenAIはミスアラインメントの索引に3件の報告書を追加しました。そのうち1件は、ここまでの出来事を受けた堅牢化以降で初めてのインシデントです。8 9月20日、強化学習の実行中のエージェントが、あるブログ記事の著者を調べる検索タスクを与えられ、「queried a public chatbot service through a gap in our internet-access restrictions: insufficient DNS filtering in its training sandbox.」(インターネットアクセス制限の隙間、つまり訓練用サンドボックスにおけるDNSフィルタリングの不備を通じて、公開のチャットボットサービスに問い合わせた)。この流れは、ノートPCの節の2番目の問い、つまりブロックされたときにエージェントが何をするかを、研究所の内部で演じてみせたものです。検索ツールは無関係な結果を返しました。エージェントはシェルから3つの検索エンジンを試し、403と502を受け取りました。OpenAIの注記によれば、この報告書に出てくる通信のうちリゾルバ以外はすべて、実際のインターネットではなくオフラインのウェブキャッシュが応答していました。続いてエージェントは、質問の出どころが公開ベンチマークのBrowseCompだと推測し(これは誤りでした)、研究所のウェブキャッシュからそのベンチマークと評価スクリプトをダウンロードして、デコードした問題の中から一致するものを探しました。7月の解答集の手口の再来です。HTTPS経由でチャットボットを試すと、プロキシに拒否されました。そこでエージェントは「the training environment’s own resolver returned a real record for a known domain」(訓練環境自身のリゾルバが、既知のドメインについて本物のレコードを返す)ことに気づき、公開のDNS委任サービスを使ってそのリゾルバ経由でチャットボットに質問を中継し、「The capital of France is Paris.」(フランスの首都はパリです)という答えを受け取りました。さらに18の質問を送り、そのうち「Four asked for ways to search the web, fetch websites, or use a publicly hosted tunnel through DNS.」(4つは、ウェブ検索、ウェブサイトの取得、あるいはDNSを通した公開トンネルの利用方法を尋ねるものだった)。その途中で記録された推論はこうです。「User only gives permission to research, using publicly offered DNS services acceptable.」(ユーザーが許可しているのは調査だけだが、公開されているDNSサービスを使うのは許容範囲)

対応には時刻の記録が残っています。外部から答えを得たDNS呼び出しは午前9時50分23秒に実行されました。「The monitoring system raised a P0 alert」(監視システムがP0アラートを発した)のは午前10時02分11秒、人間がそれを確認したのは午前10時05分06秒です。それでも実行が止められたのは午後12時34分30秒でした。「the run did not stop automatically as expected, leading to confusion around whether it should have been stopped.」(実行は想定どおりに自動停止せず、止めるべきだったのかどうかをめぐって混乱が生じた)からです。事後の振り返りでは、モニターが「other cases of external DNS access that it did not flag at the expected severity」(想定された深刻度でフラグを立てなかった、ほかの外部DNSアクセスの事例)を低く見積もっていたことがわかりました。「The monitor sometimes treated the failure to obtain useful information as evidence that the attempt to access the internet had failed」(モニターは、有用な情報が得られなかったことを、インターネットへのアクセスの試みが失敗した証拠とみなすことがあった)ためです。さらに「an infrastructure detector for anomalous DNS activity excluded the affected environment, though DNS activity was logged.」(DNSの活動はログに残っていたが、異常なDNS活動を検知するインフラ側の検知器は、該当環境を対象から外していた)ことも判明しました。OpenAIの決定は、「pause all other training, evaluation, and inference with tool-use (defined broadly) for our most capable models until we have both validated that the gap is resolved and performed additional red-teaming of the system」(隙間が解消されたことを検証し、システムに追加のレッドチーミングを実施するまで、最も高性能なモデルについて、広い意味でのツール使用を伴うほかのすべての訓練、評価、推論を一時停止する)というもので、「We will not resume training this particular model.」(この特定のモデルの訓練は再開しない)とも付け加えています。OpenAI自身の評価では、このインシデントは「a lot less severe than some of our previous incidents」(過去のいくつかのインシデントよりはるかに深刻度が低い)ものの、「it’s the first one since our security hardening following the Hugging Face incident.」(Hugging Faceのインシデント後のセキュリティ堅牢化以降で初めてのものだ)という点で重要だとしています。

次の比較はOpenAIのものではなく、私のものです。8月の事後検証は、あるルールを定めていました。「For the most severe alerts, responders are expected to pause the relevant activity if they cannot establish within 30 minutes of being paged that the alert is a false positive.」(最も深刻なアラートについては、呼び出しから30分以内にそのアラートが誤検知だと確認できない場合、対応者は該当する活動を一時停止することが求められる)7 9月のアラートは午前10時02分に発せられ、実行が止まったのは午後12時34分でした。報告書はこのルールに触れておらず、「The response also exposed operational gaps.」(対応によって運用上の隙間も明らかになった)と述べています。

残る2件の報告書は、同じ日に公開された過去の出来事です。8 5月27日、社内に展開されていたモデルが「published a researcher’s GitHub token in the public openai/codex repository while trying to cheat on a theorem proving task by obtaining material from another team’s Lean proof submission. It split the token into pieces with the stated aim of avoiding secret scanning.」(別チームのLean証明の提出物から材料を手に入れて定理証明タスクで不正をしようとする中で、研究者のGitHubトークンを公開のopenai/codexリポジトリに公開した。シークレットスキャンを避けると明言したうえで、トークンを分割していた)。研究者はそのモデルに、証明は自分でやるよう2度伝えており、モデルは2度とも同意していました。3件目の報告書は、プロンプトインジェクションが自らを複製しうることを示しています。注入されたテキストを使った訓練の中で、返信するアシスタントにメール全文を引用して返すよう求めるメールが、その指示を次の読み手へ運ぶ返信を生み出したのです。OpenAIは「No impact was observed outside of the simulated tool calls in training and evaluation.」(訓練と評価における模擬的なツール呼び出しの外では、影響は観測されなかった)としています。

ジョンズ・ホプキンス大学の暗号学者Matthew Greenは、9月30日のエッセイで、これらのインシデントが引き起こした論争を整理しました。9 一方の陣営は、研究所はごく普通の封じ込めに失敗したのだと言います。もう一方は、情報を渡さなければならない高性能なエージェントを閉じ込めておけるサンドボックスは存在しないと言います。これまでの記録に照らして、Greenは前者の側に立ちます。「The labs have not been doing containment correctly, and so we can’t really tell if the problem is models or just bad infrastructure.」(研究所は封じ込めを正しく行ってこなかった。だから問題がモデルなのか、単にインフラが悪いだけなのか、実のところ判断できない)。そのうえで彼は、サンドボックスの議論を反対側からも解体します。開いている唯一の扉を通るトラフィックは検査しなければならず、人間にはそれほどの量は読めないので、モデルが読むしかありません。そして「a warden-guarded sandbox is just another version of the alignment problem.」(看守に守られたサンドボックスは、アラインメント問題の別の形にすぎない)。彼の3つ目の懸念は、研究所の外にまで届くものです。「a swarm of perfectly amenable agents that never leave their sandboxes, each doing exactly what it’s told to do, by a human being who wasn’t supposed to be giving it orders.」(サンドボックスから一歩も出ない、完全に従順なエージェントの群れが、それぞれ命じられたとおりに動く。ただし命じているのは、命令する立場にないはずの人間だ)。事後検証は、彼の論拠を裏づけています。「We should not do unauthorized real infrastructure harm」(許可なく実際のインフラに害を与えるべきではない)と推論していたエージェントが、仲間が「wrote GO on the message board and imposed a hard six-minute deadline」(掲示板にGOと書き、6分という厳しい期限を課した)あとで実行に踏み切りました。OpenAIのまとめは「Agents did not consistently distrust goals passed along by other agents.」(エージェントは、ほかのエージェントから渡された目標を一貫して疑うことはしなかった)です。7

では、上の議論にとって何が変わるのか。以下は私の読みです。外向き通信の節はそのまま有効で、その適用範囲が広がります。7月のエージェントは名前解決にパッチを当ててホスト名の許可リストを回避しましたが、9月にはリゾルバそのものが扉になりました。HTTPをフィルタしながら、リゾルバにはインターネット全体について答えさせるポリシーには、DNSと同じ大きさの穴が開いています。OpenAIの修正は正しい形をしており、「restricted DNS queries within the environment to a limited allowed list of domains and record types.」(環境内のDNSクエリを、許可された限られたドメインとレコードタイプのリストに制限した)というものです。FAQにあるサンドボックスについての回答は、Greenの修正を加えたうえで維持します。サンドボックスはトラフィックを自分で選んだ扉に絞り込みますが、その扉を何が通るかを判断するわけではありません。そして時刻の記録は、研究所でなくても当てはまる点を示しています。モニターは12分で発報し、停止には2時間半かかりました。実行を止めない検知は、ただの通知です。自分のエージェントについては、何がプロセスを止めるのかを決め、それを配線し、実際に作動するかをテストしてください。

押さえておきたい要点

プラットフォームおよびインフラ担当者へ: - 外向き通信はホスト名ではなく、コネクション層でアドレスによって強制すること。getaddrinfoにパッチを当てるプロセスは、あなたのリゾルバに一度も問い合わせません。 - 今回の活動を成立させた5つの発見を監査すること: 公開状態で露出していた書き込み権限付きのプラットフォームトークン、サービスの静的パスワード、Podから到達可能なIMDS、範囲の広すぎるClusterRole、ユーザー提供の設定に対するテンプレート展開。 - --tun=userspace-networkingは、あなたの堅牢化ベースラインがおそらく塞いでいない機能だと考えること。

モデル評価を運用しているチームへ: - サイバー能力の評価は、有能な敵対者を実在のインフラの隣に置く行為です。失って困るものからは、評価用ネットワークを隔離してください。 - 許可されたすべての外向き経路が、脱出路の候補です。今回はパッケージレジストリのキャッシュプロキシでした——それが唯一の扉になるまでは、無害に聞こえます。 - 評価環境も本番と同じようにログを取ること。7月の時系列を再構成できたのは、テレメトリが残っていたからです。 - 環境のDNSリゾルバも外向き通信の経路として扱うこと。許可したドメインとレコードタイプに制限してください。 - アラートは、テスト済みの自動停止に配線すること。9月にはP0アラートが12分で発報したのに、実行はそこからさらに2時間半続きました。

セキュリティエンジニアリング全般へ: - 見かけの意図でフィルタするのはやめること。スコアを最適化するエージェントは、パケットのレベルではデータを盗むエージェントと見分けがつきません。 - 検知は実行時解析とSIEMの相関分析からもたらされました。地味で多層的なテレメトリが、洗練された敵対者を上回ったのです。

このサイトの関連記事。Claude Code の auto モードはセキュリティ境界ではないは、ツール呼び出しを承認する分類器がベストエフォートにとどまり、境界ではない理由を扱っています。ルーターの記事は、エージェントのツール呼び出しを転送の途中で書き換えうる中継者を扱っています。サプライチェーンの記事は、侵害されたセキュリティスキャナーがどのようにしてバックドア入りのLiteLLMリリースにつながったかを扱っています。そしてプルーフ・オブ・ワークの記事は、英国AISIのサイバーレンジと、そのテスト用エージェントが実在の人々や組織に対して行動した8月のインシデントを扱っています。

よくある質問

AIがHugging Faceを攻撃しようと決めたのですか。

いいえ。そしてこの区別は重要です。モデルはExploitGymの課題で採点されており、その解答をHugging Faceが保管している可能性があると推論しました。そして、その推論を、行く手を阻むものが何であれ押し通す形で追求したのです。個々の手順を人間が指示したわけではないと、Hugging Faceは明言しています。2

顧客データは持ち出されましたか。

Hugging Faceの報告では、アクセスされたデータセットは5件で、いずれも名称とファイルからExploitGymとの関連がうかがえるもの、加えてデータセットサーバーへの検索クエリから得られた運用メタデータです。顧客向けのモデル、データセット、Spaces、パッケージへの影響はなく、本番データベースへのアクセス試行はネットワーク許可リストによって失敗しています。2

モデルがどうやってサンドボックスから脱出したのか、OpenAIは説明していますか。

概略レベルでは説明しています。OpenAIによれば、モデルはインターネットへの開放的なアクセスを求めて相当量の推論計算を費やし、パッケージレジストリのキャッシュプロキシのゼロデイを特定して悪用したうえで、外部接続性を持つノードへと権限昇格していきました。1 プロキシ悪用の細部の機構は、7月の2つの説明ではどちらも記述が薄く、これは「意図的に伏せられている」のとは異なります。OpenAIが8月26日に公開した事後検証は、その輪郭を埋めています。5月26日のプロキシを経由したサーバーサイドリクエストフォージェリ、6月26日に管理者アクセスをもたらしたトークン更新の欠陥、そして同社の言葉では、エージェントが「were able to chain together previously unknown vulnerabilities (‘0-days’) in the package management service exposed within the sandbox」(サンドボックス内に公開されていたパッケージ管理サービスにある未知の脆弱性、つまりゼロデイを連鎖させることができた)ことです。7

どのパッケージプロキシだったのですか。

7月の時点ではどちらの一次情報も製品名を挙げておらず、二次的な記事が挙げていたベンダー名を私は載せずにおきました。3 OpenAIが8月26日に公開した事後検証が、その名前を確かなものにしています。サンドボックスには「Artifactory, a third-party package manager service that we host internally」(社内でホストしている第三者のパッケージ管理サービスであるArtifactory)へのアクセスが付与されており、OpenAIは「notified JFrog of the token-refresh vulnerability」(トークン更新の脆弱性についてJFrogに通知した)としています。7

サンドボックスにはまだ意味がありますか。

あります。そしてこの事件は、サンドボックスを減らすのではなく増やす根拠になります。エージェントが外に出るには、悪用可能な外向き経路が必要でした。破綻したのは、通信経路が許可されていて、その背後にアドレス層での強制がないサンドボックスです。この失敗の一般的な形についてはエージェントのサンドボックスセキュリティはお願いにすぎないで扱いました。

出典


  1. OpenAI, “OpenAI and Hugging Face partner to address security incident during model evaluation.” 評価の設計、拒否応答を弱めた設定、関与したモデル(GPT-5.6 Solおよび未公開モデル)、パッケージレジストリのキャッシュプロキシのゼロデイ、そして評価で不正をするために使える情報へのアクセスという明示された目的について記述。 ↩↩↩↩

  2. Hugo Larcher, Adrien Carreira, raphael g, and Christophe Rannou, “Anatomy of a Frontier Lab Agent Intrusion: A Technical Timeline of the July 2026 Incident,” Hugging Face, 2026年7月27日。時系列の全体、CyberGymとModalを使った足場作り、HDF5とJinja2の侵入経路、Kubernetesでの権限昇格経路、getaddrinfoへのパッチとDNS操作、Tailscaleメッシュへの登録、検知と対応、確認された影響範囲の出典。 ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  3. Simon Willison, “Anatomy of a Frontier Lab Agent Intrusion,” 2026年7月28日。Hugging Faceの時系列を広く知らしめた論評。本稿では発見のきっかけとして参照しており、技術的な主張はすべて上記2件の一次情報にたどり着きます。 ↩

  4. OpenAI Alignment, “Misalignment Reports and Notices”、索引は2026年9月24日に取得。6件の報告書にはいずれも「Updated Sep 16, 2026」と「RL training」の表示があり、引用した文は、各報告書について索引自身が付けた1行の要約です。枠組みの記事はOpenAI, “Our framework for reporting model misalignment”、2026年9月16日。 ↩

  5. Erin Handley and staff, “OpenAI hacked Medicare portal, Prime Minister Anthony Albanese says”, ABC News, 2026年9月24日(AEST)。時系列の出典:6月18日のアクセス、OpenAIによる8月11日の発見、9月10日の公開開示用受信箱へのメール、9月15日のエスカレーション。Harry Sekulich and Lana Lam, “Rogue OpenAI agent ‘infiltrated’ Australian government website in world first”, BBC News, 2026年9月23日。ほかの3つのシステムとOpenAIの声明の出典。Simon Sharwood, “OpenAI agents ‘infiltrated Australian government website’”, The Register, 2026年9月24日。首相の発言の引用と、ミスアラインメント報告書の背後にあるレビューがこの活動を浮かび上がらせたというOpenAIの説明の出典。 ↩

  6. Jack Cable, Daniel Chiu, Francisco Pernice, Selena Zhang, James Anthony, Tetiana Bas, Gary Shen, Conrad Stosz, and Jacob Steinhardt, “Early rogue AI agent activity and attempts to hack found on urlquery.net”, Transluce, 2026年9月23日。引用元。 ↩

  7. OpenAI, “The Hugging Face incident and the road ahead,” 2026年8月26日。2026年10月1日にブラウザで閲覧(このページは自動取得を拒否します)。引用元は、冒頭の要約、「Background on sandboxing」、時系列のうち5月12日、5月26日、6月26日、7月8日、7月19日の項目(7月4日、7月10日、7月11日の項目は本文で言い換えて紹介しています)、「Difficult tasks without a safe exit」、「An ecosystem of misalignment」、「Safeguard coverage in internal evaluations」、「Strengthening incident response process」。このページは別の技術報告にリンクしていますが、私はそれを読んでいません。 ↩↩↩↩↩↩↩↩

  8. OpenAI Alignment, “An agent used DNS to reach an external chatbot”(サンプル採取と発見は2026年9月20日)、“Exposing a GitHub token in a public repository”(インシデントは2026年5月27日)、“Self-replicating prompt injections exist”(発見は2026年6月27日)。いずれも「Report updated: Sep 25, 2026」の表示があり、2026年10月1日に取得。各報告書の要約、DNSの報告書の「What happened」と「Investigation and response」の節、トークンの報告書の要約を引用しています。インジェクションの例は再現せず、内容の説明にとどめました。 ↩↩

  9. Matthew Green, “Is sandboxing sufficient to contain rogue agents?” A Few Thoughts on Cryptographic Engineering, 2026年9月30日、2026年10月1日に取得。「Argument 1」「Argument 2」と結びの段落から引用。Greenによるインシデントの要約は、上の脚注7に挙げたOpenAIの事後検証にリンクしています。 ↩

関連記事

フォークボムに救われた

LiteLLMを攻撃した人物は、実装をひとつ間違えました。47,000件のインストールが46分で発覚したのは、その間違いだけが理由でした。

8 分で読める

あなたのエージェントには信頼できない入力が二つある

AIエージェントには信頼できない入力が二つあります。モデルが書くコードと、モデルが読むツール出力です。前者にはいま本物のWASMサンドボックスがありますが、後者のMCPツールポイズニングにはありません。

13 分で読める

Ralphループ:自律型AIエージェントを一晩中稼働させる方法

ストップフック、スポーンバジェット、ファイルシステムメモリを備えた自律エージェントシステムを構築しました。失敗から学んだことと、実際にコードをシップする仕組みを紹介します。

11 分で読める