PNG ライブラリ libpng の脆弱性 CVE-2026-33416/33636 が FIX:クラッシュと情報漏洩の恐れ

PNG Vulnerabilities Allow Attackers to Trigger Crashes and Leak Sensitive Data

2026/03/31 gbhackers — Portable Network Graphics (PNG) 画像ファイル処理に広く使用される、リファレンス・ライブラリ libpng の 2件の深刻な脆弱性が、セキュリティ研究者たちにより公開された。これらの深刻な欠陥を悪用するリモート攻撃者は、特別に細工され標準準拠の PNG 画像を処理させることで、プロセスクラッシュ/機密ヒープメモリ漏洩/任意のコード実行などを引き起こせる。影響を受けるソフトウェア・エコシステムの保護のために、この 2 つの脆弱性に対する即時のパッチ適用が必要となっている。

CVE-2026-33416:ポインタ・エイリアスによる Use-After-Free

1 つ目の脆弱性 CVE-2026-33416 (CVSS:8.1) は、ライブラリの透過処理およびパレット処理コード内における use-after-free に起因する。

具体的には、独立したライフサイクルを持つ png_struct/png_info 構造体の間で、png_set_tRNS/png_set_PLTE などの関数が、単一のヒープ割り当てバッファを不適切にエイリアスすることで問題が引き起こされる。

アプリケーションがメモリを解放する際に、このバッファは一方の構造体経由で解放されるが、もう一方には危険なダングリング・ポインタが残存してしまう。その後の画像行の変換処理において、このダングリング・ポインタがソフトウェアにより参照される。

それにより攻撃者は、悪意の PNG ファイル内の透過チャンク値を制御できるため、解放済みメモリブロックへ書き戻されるデータの完全な制御が可能になる。

その結果として、read-after-free 状態の発生による機密データの漏洩と、write-after-free による深刻なヒープ破損が発生する。

組み込みシステムや PIE/ASLR などの、メモリ・ランダム化を欠くレガシー・サーバなどの特定条件下では、このメモリ破損から任意のコード実行へと悪用が拡大することが実証されている。この欠陥は、libpng バージョン 1.2.1 〜 1.6.55 に影響を及ぼす。

CVE-2026-33636:ARM Neon における境界外 Read/Write

2 つ目の脆弱性 CVE-2026-33636 (CVSS:7.1) は、ARM/AArch64 の Neon に最適化されたパレット展開ルーチンに存在する、境界外 Read/Write の欠陥である。

8-bit パレット行を標準カラー形式へと展開する際に、ハードウェア最適化ループが最終画像チャンクを処理する際に、入力ピクセルの残存を正確に検証しない問題に起因する。

行末から逆方向に処理が行われるため、ループの最終反復では画像バッファ開始位置より前方のポインタが参照されてしまう。この設計上の不備により、行バッファの負のオフセット位置に、攻撃者が制御するパレット・データが書き込まれ、直接的にヒープ破損が発生する。

このバグにおいて、任意のコード実行は確認されていないが、サービス拒否 (DoS) 状態が確実に引き起こされ、プロセス・クラッシュが誘発される。

また、境界外 Read により、デコードされたピクセル出力を通じて、機密ヒープ内容が漏洩する可能性がある。

この問題は、Neon 最適化が有効化された ARM/AArch64 環境に限定され、バージョン 1.6.36 〜 1.6.55 に影響を及ぼす。

ーーー

ユーザー組織にとって必要なことは、libpng バージョン 1.6.56/1.8.0 へと速やかにアップグレードし、これらのセキュリティ・リスクを軽減することだ。これらのバージョンでは、メモリ・ライフサイクルの分離と、ループ境界の厳格検証が正しく実装されている。

脆弱性 CVE-2026-33636 への迅速なパッチ適用が不可能な環境では、一時的な回避策としてビルド時にコンパイラフラグ “-DPNG_ARM_NEON_OPT=0” を設定し、ARM Neon ハードウェア最適化を無効化することで、脆弱なコードパスを回避できる。