セキュリティ企業Hacktron AIの研究者3人、Harsh Jaiswal、Mohan Pedhapati、Rahul Mainiは、7月末にAnthropicのClaude Opus 5を使って一連のエクスプロイトチェーンを組み立て、OpenAIの開発者向けフォーラムからOpenAI内部のコードリポジトリまで侵入した。チームは9月13日、自社ブログで一部始終を公開し、今週になって米ウォール・ストリート・ジャーナルとThe Informationが相次いで報じたことで、より広く知られるようになった。
一連のチェーンは1枚の画像から始まり、最終的にOpenAIのメインリポジトリであるopenai/openaiにたどり着いた。研究者らは証拠として、機密データには一切手を付けず、無害なプルリクエスト(#1186742)をそこに作成した。
HEIF画像1枚でフォーラムを突破
OpenAIの開発者向けフォーラムcommunity.openai.comはDiscourse上で稼働している。Discourseがデフォルトでもつメディアライブラリは HEIF形式に対応しておらず、この形式のアップロードはImageMagickに渡され、ImageMagickがさらにlibheifを呼び出してデコードする仕組みだ。
問題はlibheifにあった。ヒープバッファオーバーフローの脆弱性があり、Debianのリポジトリに収録されている1.19.7には対応するセキュリティパッチのバックポートが適用されていなかった。研究者らはこれを利用して悪意あるHEIF画像を作成し、アップロードするだけでフォーラムサーバー上でリモートコード実行権限を獲得した。Hacktronによれば、影響を受けるlibheifのバージョンは1.19.7から1.23.xまでで、複数のLinuxディストリビューションに及ぶという。
フォーラムサーバーを制圧したのは最初の一歩にすぎない。サーバー上にはログイン中のユーザー、OpenAI社員を含む認証トークンが保存されており、研究者はそのうち一部のフォーラムトークンがChatGPTにそのまま使えることを発見した。Hacktronはブログでこの点を特に強調している。
"The vulnerability to escalate is not Discourse-specific. It is an OpenAI SSO issue"
権限昇格に使われた脆弱性はDiscourse固有のものではなく、OpenAIのシングルサインオン(SSO)側の問題だった。
この抜け道を使い、研究者は複数の社員のChatGPTおよびCodexアカウントを乗っ取った。ある社員のCodexはOpenAIのGitHub組織と連携しており、研究者はそのCodexにプロンプトを送り、内部リポジトリにプルリクエストを作成させた。Hacktronによれば、同じSSOにはSlackやメールなどのサービスもつながっていたが、そちらには手を付けていないという。
Opus 4.8では無理、Opus 5なら3時間
ブログで最も紙幅が割かれているのはモデルの役割についてだ。libheifのこのオーバーフローはASLR(アドレス空間配置のランダム化)が有効な環境では悪用が難しく、チームは以前Claude Opus 4.8で何度も試みたが成功しなかった。
"Opus 4.8 struggled across several sessions to produce a working exploit with ASLR enabled. Within hours of Opus 5's release, we gave it the same problem and it succeeded."
Opus 4.8はASLR有効な状態で動作するエクスプロイトを作るのに何度セッションを重ねても苦戦していた。Opus 5がリリースされてから数時間後、同じ問題を与えたところ成功した。
チームが示すタイムラインによれば、Opus 5は7月24日にリリースされ、モデルは約3時間で、まずローカルのARM64マシンで動くエクスプロイトを書き、その後Discourseサーバーが実際に使うx86-64+jemalloc環境向けに移植した。研究者らはClaudeを自律ループに組み込み、自前で立てたDiscourse Cloudインスタンスに対して繰り返し試させた。翌朝確認すると、すでにコード実行権限を獲得しており、証拠として/etc/hostsを読み出していた。同じスクリプトはそのままOpenAIのインスタンスにも通用した。
発見から突破までは約72時間だった。Hacktronによれば、この一連の研究、通称「HEIF Heist」全体でかかったトークン費用は3000ドル未満だという。
Claudeでエクスプロイトコードを書かせたのはこれが初めてではない。同社は以前、Claude OpusでChromeの脆弱性を突くコードを書かせた事例を振り返る記事を公開しており、その時の結論はモデルが大部分の作業をこなせるものの、肝心な部分は人が押し進める必要がある、というものだった。今回のフォーラムからコードリポジトリまでの一連のチェーンでは、人の作業量は明らかに減っており、チームの説明ではDiscourseの部分のエクスプロイトコードはほぼモデル単独で完成させたという。
修正と報奨金
OpenAIの対応は速かった。研究者が7月25日に報告した後、OpenAIは約14時間後、同日22時49分(UTC)に修正を確認した。Discourse側は日曜日に報告を確認し、翌月曜日に修正を出した。9月1日、OpenAIは6500ドルの脆弱性報奨金を支払った。
現時点で公になっているのはHacktron側の説明だけだ。OpenAIが修正前のこのフォーラムサーバーへのアクセス記録を調査したかどうか、同じチェーンを悪用した者が他にいなかったか、社員のトークンが一律に無効化されたかどうかについては、発表時点でいずれも公表されていない。
開発者にとって、ここには照らし合わせておきたい点が2つある。ひとつは、自前でDiscourseやDiscuzのようなコミュニティを運用しているチームでは、画像処理系で使うImageMagickや各種デコーダライブラリのパッチ適用が、本体アプリよりも遅れがちだという点。もうひとつは、フォーラムやチケットシステムを本体サービスと同じシングルサインオンにまとめている企業では、周辺サービスが突破された際にトークンがどこまで通用するかは、そのSSOの権限範囲をどれだけ絞り込んでいるかにかかっている、という点だ。
参考資料:Hacktron AI技術ブログ、ウォール・ストリート・ジャーナル、CocoLoop、The Information;エクスプロイトチェーン、72時間のタイムライン、14時間での修正、6500ドルの報奨金、3000ドル未満というトークン費用はいずれもHacktronのブログ記事で確認された。