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-2022-1015 — Analisi ed Exploitation del Kernel Linux 1-Day | Kitploit
Strumenti/GitHubGitHub/more-kohii/cve-2022-1015
Analisi delle VulnerabilitàExploitApprendimento e FormazioneBinary Exploitation
GitHubmore-kohii/cve-2022-1015

CVE-2022-1015

Analisi ed Exploitation del Kernel Linux 1-Day

Vedi Repository
13 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-2022-1015

Causa principale

La funzione nft_parse_register non valida l'argomento quando viene passato al caso default, causando un out-of-bounds nello stack della funzione nft_do_chain.

A questo punto, utilizzando la payload expression, è possibile sia leggere che scrivere.

La payload si comporta come mostrato di seguito.

image

Cioè, regolando opportunamente l'indice, è possibile effettuare letture e scritture out-of-bounds nello stack.

Tuttavia, per i regs esiste una funzione di validazione.

root@kitploit:~
default:
		if (reg < NFT_REG_1 * NFT_REG_SIZE / NFT_REG32_SIZE)
			return -EINVAL;
		if (len == 0)
			return -EINVAL;
		if (reg * NFT_REG32_SIZE + len >
		    sizeof_field(struct nft_regs, data))
			return -ERANGE;

		if (data != NULL && type != NFT_DATA_VALUE)
			return -EINVAL;
		return 0;

Osservando il codice sopra, deve essere soddisfatta la condizione reg * NFT_REG32_SIZE + len > sizeof_field(struct nft_regs, data).

Inserendo una costante, è sufficiente che reg * 4 + len > 80 sia soddisfatta.

In altre parole, occorre regolare opportunamente len in base a reg.

Codice sorgente di riferimento

  • nft_regs

    root@kitploit:~
    struct nft_regs {
    	union {
    		u32			data[20];
    		struct nft_verdict	verdict;
    	};
    };
    
  • nft_do_chain

    root@kitploit:~
    unsigned int
    nft_do_chain(struct nft_pktinfo *pkt, void *priv)
    {
    	const struct nft_chain *chain = priv, *basechain = chain;
    	const struct net *net = nft_net(pkt);
    	struct nft_rule *const *rules;
    	const struct nft_rule *rule;
    	const struct nft_expr *expr, *last;
    	struct nft_regs regs;
    	...
    }
    
  • nft_parse_register

    root@kitploit:~
    static unsigned int nft_parse_register(const struct nlattr *attr)
    {
    	unsigned int reg;
    
    	reg = ntohl(nla_get_be32(attr));
    	switch (reg) {
    	case NFT_REG_VERDICT...NFT_REG_4:
    		return reg * NFT_REG_SIZE / NFT_REG32_SIZE;
    	default:
    		return reg + NFT_REG_SIZE / NFT_REG32_SIZE - NFT_REG32_00;
    	}
    }
    
Scarica lo strumento