flawopen.com/Incidents/openai-community-forum-heif-sso-chain-september-2026
OpenAIフォーラムからSSOへの連鎖:CVE-2026-32882
Hacktronは、Discourseの画像処理経由で発生するlibheifのアルファ平面境界外読み取りと、OpenAIの別個のSSO不備を組み合わせた連鎖を報告しました。CVE-2026-32882はlibheif 1.22.0で修正済みです。研究者は、アクセス確認のための無害なpull requestを提出した後にテストを止めたと述べています。[4], [1], [2]
透明なシートを2枚想像してください。一方には幅広い色のマス目があり、もう一方には幅の狭い透明度の値が並んでいます。デコーダーは色のシートの行幅を使って次の透明度の値を探したため、行を進むごとに小さいシートの外まで読み進めました。修正では透明度シート自身の行幅を使います。[1]
主要な概念と専門用語
HEIF / HEIC- 画像コンテナ形式です。HEIFファイルには派生画像、オーバーレイ、分離された色平面とアルファ平面が含まれる場合があり、デコーダーは各平面の境界内で処理する必要があります。[1]
libheif- HEIFおよびAVIF画像をデコード、エンコードするネイティブライブラリです。Discourseのアドバイザリは、画像アップロード処理経路をCVE-2026-32882と関連付けています。[1], [2]
Stride- 画像平面のある行の先頭から次の行の先頭までのバイト数です。ビット深度が異なると、色平面とアルファ平面のstrideも異なる場合があります。[1]
CWE-125- 境界外読み取りです。ソフトウェアがバッファに割り当てられたメモリ領域の外側を読み取ります。ここではアルファ平面のアドレス計算に色平面のstrideが使われていました。[1]
SSOの信頼境界- ログインサービスとアプリケーション間のID連携です。HacktronはOpenAIフォーラムのSSO連携が別個のフォーラム侵害の影響を広げたと報告しました。公開資料には正確なSSO実装の不備や修正内容は記載されていません。[4]
フレームワーク対応
- このガイドで説明する弱点の CWE 参照: CWE-125
インシデントのタイムライン
libheifのメンテナーがGHSA-hg7q-rjr2-8x46を公開し、CVE-2026-32882を登録。libheif 1.22.0を修正済みバージョンとして示しました。[1]
Hacktronによると、研究者はDiscourseの画像処理経路からOpenAIフォーラムに到達し、OpenAI側のSSO問題を報告。アクセスを示す無害なpull requestの提出後にテストを停止しました。[4]
DiscourseがGHSA-vhm9-85gw-x335を公開し、修正済みリリースを列挙して、セルフマネージド環境の再ビルドを推奨しました。[2]
Hacktronが協調開示の報告を公開。OpenAIはSSO側の修正を確認し、報奨金はOpenAI側の発見を対象とし、Discourseホストのフォーラムに対するテストは対象外だったと記しています。[4]
ステップ・バイ・ステップの攻撃フロー
色平面のレイアウトをアルファにも使用
HeifPixelImage::overlay()の脆弱なコードは、その平面用にalpha_strideを取得していたにもかかわらず、alpha_pをy * in_strideだけ進めていました。アルファと色のビット深度が異なると行サイズも異なり、読み取りがアルファの割り当て領域を越える可能性があります。上流アドバイザリはCWE-125と分類しています。[1]
別個のSSO不備が報告された連鎖を拡大
Hacktronは、フォーラム侵害後にOpenAIのSSO問題を通じて従業員のChatGPT/Codexアカウントにアクセスし、無害なpull requestで連携リポジトリへのアクセスを示したと報告しています。公開資料にはSSOのコード不備、アカウントの正確な権限、再利用可能なSSO修正は示されていません。[4]
証拠と主張の範囲を限定
Hacktronはアクセス確認用pull requestの後にテストを止めたと述べています。報告が説明するのは研究者による管理された開示であり、悪意あるインシデントや顧客データ取得の証拠ではありません。また、OpenAIの報奨金は同社側のSSO発見が対象で、Discourseホストのフォーラムでのテストは対象外だったとしています。[4]
ソースコード比較:脆弱 vs 堅牢化
これはアクセス方法を示す抜粋であり、単独で動作するデコーダーでも完全なパッチの逐語的な再現でもありません。メンテナーのアドバイザリは脆弱な式を示し、libheif 1.22.0で修正されたとしています。各平面のインデックス計算には、その平面自身のstrideを使う必要があります。ビット深度の異なる平面で色のstrideを再利用すると、アルファ読み取りの位置が進み過ぎます。ホストアプリケーションでもデコーダーを更新し、信頼できないアップロードの変換を隔離してください。[1], [3]
// 報告されたアクセスパターンの簡略化した抜粋です。
// alpha_stride が使えたのに、色プレーンの stride を使用していました。
uint8_t alpha_value = alpha_p[in_x0 + y * in_stride + x];// alpha プレーンに対応する行レイアウトを使います。
// 上流の修正は libheif 1.22.0 に含まれています。
uint8_t alpha_value = alpha_p[in_x0 + y * alpha_stride + x];エンジニアリング&システム堅牢化チェックリスト
- ✓セルフマネージドDiscourseはGHSA-vhm9-85gw-x335に記載された修正済みリリースに更新し、アプリケーションイメージを再ビルドしてください。Web UIだけの更新ではネイティブlibheifパッケージが変わったと確認できません。[2], [4]
- ✓各画像処理コンテナで実際に使われているlibheifのバージョンを調べ、ディストリビューションのバックポート状況を確認してください。上流のバージョン文字列だけでは配布パッケージの修正状態を判断できない場合があります。[6], [4]
- ✓画像平面のインデックス計算では、その平面自身のstrideと寸法を使ってください。色平面とアルファ平面のビット深度やstrideが異なる回帰テストを追加してください。[1], [3]
- ✓信頼できないHEIF/AVIFアップロードの変換は、ファイルシステムへのアクセスを最小限にし、環境資格情報を引き継がず、CPUとメモリに上限を設けた隔離済みの一時workerで実行してください。[2]
- ✓パーサー修正とは別にSSOの信頼関係を確認してください。issuer、audience、redirect URI、アカウント連携、セッション結合を検証し、ID境界が越えられた可能性があればセッションを失効させてください。[4]
- ✓OpenAIのSSO実装や正確なパッチが判明していると記述しないでください。公開報告は研究者の説明を示していますが、コード上の不備や修正は公開していません。[4]