PoC Released: CVE-2024-26809 Exploits nftables Double-Free to Achieve Root Shell
2025/05/12 SecurityOnline — Linux カーネルの nftables サブシステムにおける、net/netfilter モジュールに脆弱性が発見された。この脆弱性を悪用する攻撃者は、nft_pipapo_destroy()の 二重解放により、ローカル権限昇格の可能性を得る。この脆弱性 CVE-2024-26809 は、カーネル・バージョン 6.1-rc1 以降および 5.15.54 以降に影響を及ぼす。

この脆弱性は、パケット・フィルタリング用の nftables で使用される、pipapo セットの破棄プロセスにおける論理的な欠陥に起因する。特定の条件下では、match と clone の両方に問題が生じる可能性があり、それらを二回にわたって解放する関数により、メモリ破損が引き起こされる。
問題の関数:
static void nft_pipapo_destroy(const struct nft_ctx *ctx,
const struct nft_set *set)
{
struct nft_pipapo *priv = nft_set_priv(set);
struct nft_pipapo_match *m;
int cpu;
m = rcu_dereference_protected(priv->match, true);
if (m) {
...
nft_set_pipapo_match_destroy(ctx, set, m);
...
}
if (priv->clone) {
m = priv->clone;
if (priv->dirty)
nft_set_pipapo_match_destroy(ctx, set, m);
...
dirty フラグが設定されている場合には、重複するメモリ領域に対して nft_set_pipapo_match_destroy() が誤って2回呼び出される。この重複は、セット要素が match と clone の両方に、同時に属する場合に発生するようだ。
この脆弱性 CVE-2024-26809 は、カーネルのオブジェクト・キャッシュ・システム (kmalloc-256) を用いるヒープ・グルーミングと操作に関係する。攻撃者は、メモリを戦略的に割当/解放することで、以下の目的を達成する:
- nftables オブジェクトの重複
- カーネル・アドレスのリーク
- 関数ポインタのハイジャック (expr->ops->dump など)
- ROP ガジェット実行によるルート権限の取得
Google は、「スタックの移行が完了すると、ROPgadget を実行し、最終的にルート・シェルを取得できる。この攻撃は、カーネル・メモリ構造に対する高度な理解を示しており、メモリ・バグに対する巧妙な悪用により、システム全体が侵害される可能性を示唆している」と述べている。
すでに、実際に動作する PoC エクスプロイトが公開されており、脆弱性の連鎖により、カーネル・コード実行を引き起こす方法が示されている。
このコミットにより、脆弱性 CVE-2024-26809 は修正されている。影響を受けるカーネル・バージョンのユーザーに対して強く推奨されるのは、このパッチの適用によりシステムを更新し、この脆弱性によるリスクを軽減することだ。
Linux Kernel の脆弱性 CVE-2024-26809 が FIX とのことですが、PoC エクスプロイトの公開により、悪用の可能性も高まります。2025年に入ってから、すでに3件の Linux Kernel の脆弱性が CISA KEV カタログに追加されています。ご利用のチームは、十分にご注意ください。よろしければ、以下の関連記事も、Linux Kernel で検索と併せて ご参照ください。
2025/04/09:Linux の CVE-2024-53197 などが KEV に登録
2025/03/04:Linux kernel などの脆弱性が KEV に登録
2025/02/05:Linux Kernel の CVE-2024-53104 が KEV に登録
You must be logged in to post a comment.