PNG脆弱性により攻撃者がクラッシュを引き起こし機密データを漏洩できる

セキュリティ研究者は、libpng ポータブルネットワークグラフィックス(PNG)画像ファイルを処理するために広く展開されているリファレンスライブラリ)の2つの高度な脆弱性を開示しました。

これらの重大な欠陥により、リモート攻撃者はアプリケーションを欺いて特別に作成された標準準拠のPNG画像を処理させることで、プロセスクラッシュをトリガーし、機密ヒープメモリを漏洩させ、潜在的に任意のコード実行を達成できます。

両方の脆弱性は、影響を受けたソフトウェアエコシステムを保護するために直ちにパッチが必要です。

CVE-2026-33416: ポインタエイリアシングによるユースアフターフリー

最初の脆弱性であるCVE-2026-33416はCVSSスコア8.1の高度な脆弱性で、ライブラリの透明度とパレット処理コード内のユースアフターフリー条件に由来しています。

具体的には、png_set_tRNSおよびpng_set_PLTEなどの関数は、独立したライフサイクルを持つpng_structpng_info構造体の間で、単一のヒープ割り当てバッファを不適切にエイリアスします。

アプリケーションがメモリを解放すると、バッファは一つの構造体を通じて解放されますが、もう一つの構造体に危険なダングリングポインタが残ります。

後続の画像行変換操作中に、ソフトウェアはこのダングリングポインタを逆参照します。

攻撃者が悪意のあるPNGファイル内の透明度チャンク値を完全に制御しているため、解放されたメモリブロックに書き戻されるデータに確定的に影響を与えることができます。

これにより、機密アプリケーションデータを漏洩させることができるリードアフターフリー条件、および重大なヒープ破損を引き起こすライトアフターフリー条件が生じます。

組み込みシステムや最新のメモリランダム化(PIE/ASLR)を欠いているレガシーサーバなど、特定の条件下では、このメモリ破損は任意のコード実行を実証するために兵器化されています。この欠陥はlibpngバージョン1.2.1から1.6.55に影響を与えます。

CVE-2026-33636: ARM Neonでの範囲外読み取り/書き込み

2番目の脆弱性であるCVE-2026-33636はCVSSスコア7.1の高度な脆弱性で、ARM/AArch64 Neon最適化パレット拡張ルーチンにあるバッファオーバーラン読み取りおよび書き込み欠陥です。

8ビットパレット行を標準カラー形式に拡張する場合、ハードウェア最適化ループは、十分な入力ピクセルが残っているかどうかを正確に検証することなく、最終的な画像チャンクを処理します。

行の終わりから逆に作業することで、ループの最終反復は画像バッファの開始前にポインタを逆参照します。

この建築的な設計上の欠陥により、システムは行バッファからの負のオフセットで攻撃者が影響を受けたパレットデータを書き込み、直接ヒープ破損を引き起こします。

この特定のバグに対する任意のコード実行は証明されていませんが、プロセスクラッシュを確実に引き起こし、高い影響を与えるサービス拒否状態につながります。

また、デコードされたピクセル出力を通じて機密ヒープコンテンツを漏洩する可能性のある範囲外読み取りも可能にします。

この問題は、Neon最適化を有効にしてコンパイルされたARM/AArch64環境に厳密に限定され、バージョン1.6.36から1.6.55に影響を与えます。

これらのセキュリティリスクを軽減するために、組織はlibpngバージョン1.6.56または1.8.0トランクリリースに緊急にアップグレードする必要があります。これらはメモリライフタイムを正しく分離し、厳密なループ境界を適用します。

CVE-2026-33636に直ちにパッチを当てることができない環境では、管理者はARM Neonハードウェア最適化を無効にし、ビルドプロセス中にコンパイラフラグ-DPNG_ARM_NEON_OPT=0を設定することで、脆弱なコードパスを完全に回避するための一時的な回避策を適用できます。

翻訳元: https://gbhackers.com/png-vulnerabilities-leak-sensitive-data/

ソース: gbhackers.com