Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2022-1015 — Linuxカーネルの1-Day解析&エクスプロイト | Kitploit
ツール/GitHubGitHub/more-kohii/cve-2022-1015
脆弱性分析エクスプロイト学習と教育バイナリエクスプロイト
GitHubmore-kohii/cve-2022-1015

CVE-2022-1015

Linuxカーネルの1-Day解析&エクスプロイト

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2022-1015

根本原因

nft_parse_register 関数では、arg が default として渡されるときの検証が行われないため、nft_do_chain 関数のスタック上で oob が発生する。

このとき payload expression を利用すると、read と write の両方ができる。

payload は以下のような動作をする。

image

つまり、インデックスを適切に調整すれば、スタック上で oob read / write ができる。

ただし、regs には検証を行う関数が存在する。

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;

上記のコードを見ると、reg * NFT_REG32_SIZE + len > sizeof_field(struct nft_regs, data) を満たす必要がある。

定数を入れれば、reg * 4 + len > 80 を満たせばよい。

つまり、reg に合わせて len を適切に調整する必要がある。

参考ソースコード

  • 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;
    	}
    }
    
  • ツールをダウンロード