关于 Linux 内核中越界读取与写入漏洞的详细分析及本地权限提升概念验证代码。
你可以在我的博客上找到该漏洞的深入分析,同样你也可以在那里找到我对 nf_tables 的介绍。
本仓库提供的漏洞利用代码不应期望在开箱即用的易受攻击内核版本上成功运行。 不同内核构建之间会存在许多偏移量差异,当然也包括不同的 ROP 小工具。
有时,由于内核构建之间的差异,甚至可能不得不改变利用漏洞的方式。例如,David Bouman (@pqlqpql) 对该漏洞的另一篇分析文章(可在此查看)中,他使用 UDP 数据包 来利用漏洞——针对处理 UDP 数据包时的内核栈——这在我的内核构建上是无法实现的,因为栈布局存在显著差异。因此,我采用了在处理 TCP ACK 数据包时针对内核栈的方法。
如果你希望亲自测试,我建议阅读我的分析文章,并按照步骤找出偏移量、确定应使用的钩子等。
我在分析文章中构建的目标内核的确切版本为 5.12.0,提交 9f4ad9e425a1d3b6a34617b8ea226d56a119a717。
构建漏洞利用代码需要 libmnl 和 libnftnl 库,以及 POSIX 线程(pthread)库。
构建过程非常简单:
gcc -lmnl -lnftnl -lpthread exploit.c -o exploit
该漏洞源于在版本 5.12 中由提交 345023b0db315648ccc3c1a36aee88304a8b4d91 引入的 nft_validate_register_store 函数,并在版本 5.17 中通过提交 6e1acfa387b9ff82cfc7db8cc3b6959221a95851 修补。
此概念验证代码及漏洞分析文章仅用于教育目的。 我对于此代码可能被使用的任何方式不承担法律责任。