Linux Netfilter の脆弱性 CVE-2024-1085:PoC エクスプロイトが提供される

Linux Flaw: CVE-2024-1085 PoC Exploit Exposes Privilege Escalation Risk

2024/07/01 SecurityOnline — Linux Kernel に存在する、深刻度の高い脆弱性 CVE-2024-1085 を標的とする PoC エクスプロイトでs・コードが、あるセキュリティ研究者により公開された。この脆弱性は、Netfilter サブシステムの nftables コンポーネントに存在し、影響を受けるシステム上で悪用に成功したローカルの認証済み攻撃者が、昇格した特権を不正に獲得する可能性が生じるこの脆弱性の CVSS 値は 7.8 であり、深刻度が高いことが示唆される。この脆弱性を悪用する前提としてローカル認証が必要となるが、悪用に成功した攻撃者は、システムを大幅に制御できるようになるため、深刻なセキュリティ・リスクが生じる。


この欠陥は、Linux Kernel の Netfilter サブシステム内のnft_setelem_catchall_deactivate()関数に存在する。この関数は、nftables プロジェクトの一部であり、データ・パケットのフィルタリングに不可欠なものとして、iptables などのパケット・フィルタリング機構に対して、堅牢なフレームワークを提供している。この脆弱性は use-after-free の欠陥に分類され、非アクティブ化時における特定の要素の不適切な処理に起因する。

この nftables の目的は、レガシーなパケット・フィルタリング・フレームワークの近代化と置き換えにあり、一連のフィルタリングを管理するための、テーブル/セット/チェーン/ルールなどのコンポーネントを利用している。このフレームワークの重要な点は、タスク間でオブジェクトの状態を追跡するために、genmaskフラグを使用する点にある。したがって、オブジェクトが削除されると、システムはnft_deactivate_next を使用して genmaskを更新し、また、nft_is_active_nextを使用してアクティブなオブジェクトを検証することで、二重解放などの問題を防いでいる。

...
list_for_each_entry(catchall, &set->catchall_list, list) {
		ext = nft_set_elem_ext(set, catchall->elem);
		if (!nft_is_active(net, ext))
			continue;
...

そして、根幹の問題となる脆弱性は、nft_setelem_catchall_deactivate関数に起因しており、要素の状態をチェックするためにnft_is_active_next ではなく nft_is_active が誤って使用されている。この見落としは、要素が二重に解放され、use-after-free 状態の発生というシナリオを引き起こす可能性を持つ。

PoC を提供した研究者は、この脆弱性の悪用が簡単であることを実証している:

  1. pipapo セット A と、pipapo セット A 内の catchall セット要素 B を作成する。
  2. 要素 B を削除する。
  3. 要素 B を再び削除する。

この悪用を成功させる鍵は、2回目の削除の前にエレメントが完全に解放されないようにするため、Step-2 と Step-3 のコマンドを連続して送信する点にある。

この脆弱性は、以下の Linux Kernel バージョンに影響を及ぼす:

  • 6.1.56 以降
  • 5.15.134 以降

脆弱性 CVE-2024-1085 の技術的詳細と PoC エクスプロイト・コードは GitHub で公開されており、防御者と攻撃者にとって貴重なリソースとなっている。この情報の公開が強調しているのは、システム管理者とセキュリティ専門家が、この欠陥に迅速に対処することの重要性である。

この脅威を軽減するために、Linux のユーザー/システム管理者に強く推奨されるのは、各ディストリビューション・ベンダーが提供する、最新のパッチを優先的に適用することである。