PNGの脆弱性が攻撃者にクラッシュや機密データ漏洩を可能にする

概要

セキュリティ研究者が、Portable Network Graphics (PNG)画像ファイルを処理するための参照ライブラリであるlibpngで、重大な脆弱性2つを発見しました。これらの脆弱性は、攻撃者にプロセスクラッシュや機密データ漏洩を引き起こすことを可能とし、特別に作成された標準準拠のPNG画像ファイルを使用して任意のコード実行を達成する可能性があります。

脆弱性詳細

CVE-2026-33416: ポインタオーバーライシングによる使用後フリーフラグ

  • この脆弱性は、libpngの透過やパレット処理コード内の使用後フリーコンディションから生じます。
  • png_set_tRNSpng_set_PLTE関数が単一のヒープ割り当てバッファをpng_structpng_info構造体間で不適切にオーバーライシングします。
  • アプリケーションがメモリを解放すると、1つの構造体経由でバッファが解放されますが、もう一方の構造体には危険なダングリングポインタが残ります。
  • その後の画像行変換操作中にソフトウェアはこのダングリングポインタを参照します。
  • 攻撃者は悪意のあるPNGファイル内の透明度チャンク値を完全に制御し、解放されたメモリブロックに戻されるデータを確実に影響させることができます。

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

  • この脆弱性は、ARM/AArch64 Neon最適化されたパレット展開ルーチン内の範囲外読み書きエラーです。
  • 8ビットパレット行を標準色形式に拡張する際に、ハードウェア最適化ループが画像チャンクの最終部分を処理します。
  • ループの最終反復では、画像バッファの開始位置よりもはるか前方でポインタを参照します。
  • このアーキテクチャのオーバーライドにより、システムが攻撃者によって影響を受けたパレットデータを負のオフセットから行バッファに直接書き込みます。

対策

組織は緊急にlibpngバージョン1.6.56または1.8.0 trunkリリースにアップグレードする必要があります。これにより、メモリライフタイムが適切に切り離され、厳格なループ境界が強制されます。

CVE-2026-33636をすぐに修正できない環境では、管理者はARM Neonハードウェア最適化を無効にする-DPNG_ARM_NEON_OPT=0コンパイラフラグを使用してビルドプロセスを通じて脆弱なコードパスを完全に回避する一時的なワークアラウンドを適用できます。

影響範囲

  • CVE-2026-33416: libpngバージョン1.2.1から1.6.55まで
  • CVE-2026-33636: ARM/AArch64環境でNeon最適化が有効な場合、libpngバージョン1.6.36から1.6.55まで

元記事: https://gbhackers.com/png-vulnerabilities-leak-sensitive-data/