Kernel-PWN-Race
uffd(userfaultfd)
该功能在 5.11 版本后变成需要 root 权限。
1 | int sysctl_unprivileged_userfaultfd __read_mostly = 1 |
该值在较新版本中会默认为 0。
可以通过命令验证是否开启
1 | cat /proc/sys/vm/unprivileged_userfaultfd |
不过该功能十分好用。
userfaultfd 为用户可以为特定地址注册 page handler ,当 内核触发特定地址 pagefault 时,就会阻塞进而执行 handler 内容。从而可以在让内核读写时暂停,然后开启另一个线程进行篡改,实现 race。
1 |
punch hole
在 CTF 题目中,如果关闭了 userfaultfd 以及 fuse 情况下,同时时间竞争窗口较小,可以通过该方法来扩大时间窗口。
其基本原理是 fallocate 系统调用支持对 打开文件的对应内存打洞,即 unmmap,如果 copy_from_user 访问该地址,则会进入一系列函数调用来进行处理 page fault,同时如果一直维持打洞状态,则可以延长其处理时间。
因此我们可以通过该方法在 copy_from_user 处进行打洞,如果对应UAF,该方法还可以用于修改目标对象的内容,比较好用。
https://bbs.kanxue.com/thread-289370.htm
https://gist.github.com/pqlx/b1ed41e7557c042bcc7a8c74ea1feae8
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Small Utopia!
评论