以下问题存在于 https://android.googlesource.com/kernel/msm 的 android-msm-wahoo-4.4-pie 分支(以及其他可能的分支):
在 /drivers/android/binder.c 的 binder 驱动中,binder_thread 结构体的 wait 成员存在一个释放后使用漏洞。
正如上游提交描述的那样: “binder_poll() 将 thread->wait 等待队列传递给可以休眠等待工作的进程。当一个使用 epoll 的线程通过 BINDER_THREAD_EXIT 显式退出时,等待队列被释放,但它从未从相应的 epoll 数据结构中移除。当进程随后退出时,epoll 清理代码尝试访问等待列表,导致释放后使用。”
以下概念验证代码将展示在启用了 KASAN 的内核构建中的 UAF 崩溃(来自初始上游漏洞报告 https://lore.kernel.org/lkml/[email protected]/): #include <fcntl.h> #include <sys/epoll.h> #include <sys/ioctl.h> #include <unistd.h>
#define BINDER_THREAD_EXIT 0x40046208ul
int main()
{
int fd, epfd;
struct epoll_event event = { .events = EPOLLIN };
fd = open("/dev/binder0", O_RDONLY);
epfd = epoll_create(1000);
epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event);
ioctl(fd, BINDER_THREAD_EXIT, NULL);
}
该问题已于 2017 年 12 月在 4.14 LTS 内核 [1]、AOSP android 3.18 内核 [2]、AOSP android 4.4 内核 [3] 和 AOSP android 4.9 内核 [4] 中修复,但根据源代码审查,配备最新安全公告的 Pixel 2 仍然存在漏洞。
根据源代码审查,其他似乎存在漏洞的设备有(除非另有说明,否则指 8.x 版本):
我们有证据表明该漏洞正在被野外利用。因此,该漏洞需遵守 7 天披露截止日期。在 7 天过去或补丁广泛可用之后(以先到者为准),漏洞报告将对公众可见。
已确认此概念验证在 Pixel 2 上有效,版本为 walleye_kasan-userdebug 10 QP1A.191105.0035899767,导致 KASAN 崩溃。概念验证 C 代码和 new.out 已附上。KASAN 控制台输出已附上。
我从 TAG 和外部方收到了关于一个归因于 NSO 集团的 Android 漏洞利用的技术信息。这些细节包括关于漏洞和利用方法的事实,包括但不限于:
利用这些细节,我已确定正在被使用的漏洞几乎肯定是本报告中的这个,因为我在比较补丁后排除了其他潜在候选。关于此漏洞的更详细解释以及识别它的方法,将在有时间时在即将发布的博客文章中撰写。
我们目前没有该利用的样本。没有样本,我们既无法确认时间线,也无法确认载荷。
该漏洞是一个本地权限提升漏洞,允许完全攻陷易受攻击的设备。如果通过网页传递利用,它只需要与一个渲染器利用配对,因为此漏洞可通过沙箱访问。
我附上了一个本地利用概念验证,以演示如何在本地运行时利用此漏洞获得任意内核读/写。它只需要不受信任的应用程序代码执行即可利用 CVE-2019-2215。我还附上了一张截图 (success.png),显示 POC 在 Pixel 2 上运行,该系统运行 Android 10,安全补丁级别为 2019 年 9 月(google/walleye/walleye:10/QP1A.190711.020/5800535:user/release-keys)。
来自 Android 厂商的声明:
此问题在 Android 上被评为高严重性,其本身需要安装恶意应用程序才能进行潜在利用。任何其他向量,例如通过网页浏览器,都需要链接另一个利用。我们已通知 Android 合作伙伴,补丁可在 Android Common Kernel 上获取。Pixel 3 和 3a 设备不受影响,而 Pixel 1 和 2 设备将在十月份更新中获得此问题的修复。