glibc の深刻な脆弱性 CVE-2024-2961:Poc エクスプロイトが公開

glibc Flaw (CVE-2024-2961) Opens Door to RCE, PoC Exploit Published

2024/05/27 SecurityOnline — GNU C ライブラリ (glibc) のセキュリティ脆弱性 CVE-2024-2961 に関して、技術的な詳細PoC エクスプロイト・コードが公開された。この脆弱性の CVSS スコアは 8.8 であり、影響を受けるシステムへの潜在的な脅威となることが示されている。


この脆弱性は、glibc の iconv ライブラリの iconv() 関数に存在し、特に ISO-2022-CN-EXT 文字セットを含む変換に影響を与える。UCS4 文字セットからの変換中に、iconv() 関数は文字セットの変更を示すために、特定のエスケープ文字を追加する必要がある。しかし、この処理において、内部バッファの境界が適切にチェックされていないため、バッファ・オーバーフローが発生し、意図したメモリ位置を3バイトまで超えて書き込むことが可能になってしまう。


この脆弱性の詳細な分析を行った、Ambionics のセキュリティ研究者である Charles Fol は、このオーバーフローは、少なくとも2つの方法で PHP アプリケーションで引き起こされる可能性があると説明している:

  1. iconv() を直接呼び出す。
  2. “ファイル読み込み” の脆弱性に関連するような PHP フィルタを使用する。

PHP のヒープ構造により、このオーバーフローを悪用して、空きリスト・ポインタの一部を変更し、最終的には、プログラムのメモリ内に任意の書き込みプリミティブを提供することが可能となる。その結果、PHP アプリケーションの制御されたプレフィックスを持ち、ファイル読み込みの脆弱性を用いる攻撃者であれば、誰でもリモート・コード実行 (RCE) が可能になってしまう。さらに攻撃者は、PHP に制御されたパラメータで iconv() を強制的に呼び出させることで、 同様の機能を得ることができる。

この研究者により公開された CVE-2024-2961 の PoC エクスプロイトには、一連の3つのリクエストが含まれる:

  1. ヒープと libc アドレス抽出:このエクスプロイトでは、まず “/proc/self/maps” をダウンロードし、PHP のヒープ・アドレスと libc のファイル名の両方を抽出する。
  2. libc バイナリのダウンロード:次に libc のバイナリをダウンロードし、system() 関数のアドレスを特定する。
  3. 任意のコマンド実行:最後に、オーバーフローを引き起こすリクエストを実行し、任意のコマンドの実行を可能にする。

この脆弱性の影響は大きい。このバッファ・オーバーフローの悪用に成功した攻撃者は、以下のアクションを実行する可能性を手にする:

  • 任意のコード実行:攻撃者は影響を受けるシステム上で、悪意のコードを実行できる。
  • アプリケーションのクラッシュ:オーバーフローによりアプリケーションをクラッシュさせ、サービス拒否 (DoS:denial of service) を引き起こす可能性を持つ。
  • データ破損:隣接変数を含む重要なデータ構造を上書きし、データ破損の可能性を手にする。

SS2designation と SS3designation のエスケープ・シーケンスによるオーバーフロー値は予測可能なため、攻撃者は悪意の入力を細工して、意図的にオーバーフローを引き起こすことが可能だ。したがって、この脆弱性が悪用されると、サービス拒否/権限の昇格/完全なリモート・コードの実行などにつながる可能性があり、影響を受けるシステムのセキュリティに重大な脅威が生じる。

この脆弱性は、GNU C ライブラリのバージョン 2.39 以下に存在する。システム管理者と開発者たちは、以下のような対策を講じる必要がある:

  • Glibc のアップデート:この脆弱性を緩和するために、glibc のメンテナが提供するパッチとアップデートを適用する。
  • PHP アプリケーションの監査:iconv() 呼び出しや PHP フィルタに関連する脆弱性について、 PHP アプリケーションをレビューする。
  • システムの監視:悪用が試みられたことを示す、不審な活動や異常について監視する。

技術的な詳細と PoC エクスプロイト・コードについては、研究者の GitHubブログから確認できる。