这是一个针对早期三星手机中/dev/exynos-mem漏洞的概念验证(POC)文件。出于对内核漏洞研究的兴趣以及作为CTF挑战的一部分而编写。
这些手机中引入的漏洞在于exynos-mem设备的权限设置。它允许用户同时拥有读写权限,即使是非 root 用户!
exynos-mem 设备允许用户直接读取/写入/dev/mem,这意味着你可以直接写入内核代码/数据。
通过利用/proc/iomem,你可以快速找出哪些物理地址对应于操作系统中的哪部分内存,甚至还能找到内核代码/数据内存的位置。
该漏洞利用通过以下步骤实现获取 root 权限:
/proc/kallsyms,这限制了我们的能力。因此,我们扫描内核内存以找到 kallsyms 中使用的格式字符串(seq_printf(m, "%pK %c %s\n", (void *)iter->value, iter->type, iter->name);)
并将其修改为%p(而非%pK),以便将符号地址打印给用户。/proc/kallsyms以找到符号nsown_capable的地址,该符号用于判断调用setuid()的用户是否具有相应权限。nsown_capable的函数代码,使其仅执行return true;,从而允许任何用户调用setuid()来设置任意uid。setuid(0)和system(/bin/sh)。文件中的常量可能需要根据你的系统稍作调整;请根据需要设置它们。