macOS 10.14.6 (18G87) -由于wait_for_namespace_event()中的竞争条件,导致内核使用后释放
摘要:bsd vfs vfs_syscalls c中的XNU函数wait_for_namespace_event()释放一个文件描述符供用户空间使用,但是随后可能会使用fp_free()销毁该文件描述符,fp_free()会无条件地释放fileproc和fileglob。
bsd/vfs/vfs_syscalls.c中的XNU函数wait_for_namespace_event()释放一个文件描述符供用户空间使用,但是随后可能会使用fp_free()销毁该文件描述符,fp_free()会无条件地释放fileproc和fileglob。这打开了一个竞争窗口,在此期间,进程可以在这些对象被释放时操作它们。利用需要根特权。
可以从fsctl(FSIOC_SNAPSHOT_HANDLER_GET_EXT)访问函数wait_for_namespace_event();它用于监听文件系统事件以生成快照。下面是代码中的漏洞路径:
static int wait_for_namespace_event(namespace_handler_data *nhd, nspace_type_t nspace_type) { ... error = falloc(p, &fp, &indx, ctx); if (error) goto cleanup; fp_alloc_successful = true; ... proc_fdlock(p); procfdtbl_releasefd(p, indx, NULL); fp_drop(p, indx, fp, 1); proc_fdunlock(p); ... error = copyout(&nspace_items[i].token, nhd->token, sizeof(uint32_t)); if (error) goto cleanup; ... cleanup: if (error) { if (fp_alloc_successful) fp_free(p, indx, fp); ... }
首先,使用falloc()分配文件描述符(indx)和fileproc (fp)。此时文件描述符已被保留,因此用户空间无法使用。接下来,调用procfdtbl_releasefd()来释放文件描述符供用户空间使用。在后续的proc_fdunlock()之后,进程中的另一个线程可以通过另一个syscall访问该文件描述符,即使wait_for_namespace_event()仍然在运行。
这是有问题的,因为在错误路径wait_for_namespace_event()中(如果copyout()失败,可以到达)期望能够使用fp_free()释放文件描述符。fp_free()是一个非常特殊的函数:它将清除文件描述符,释放fileglob,释放fileproc,而不考虑是否在其他地方引用了fileproc或fileglob。
违反这些期望的一种方法是在proc_fdunlock()和fp_free()之间调用fileport_makeport()。理想的利用情况是,在使用fp_free()释放fileglob之前创建一个fileport,它持有对fileglob的引用,在fileport中留下一个悬空的fileglob指针。在实践中很难达到那种状态,但我相信这是可能的。
附加的POC应该会引发内核恐慌。POC的工作方式如下:首先,创建并挂载一个HFS DMG,因为到达wait_for_namespace_event()的惟一路径将通过HFS驱动程序。接下来,创建几个racer线程,这些线程反复尝试调用fileport_makeport()。然后,调用fsctl(FSIOC_SNAPSHOT_HANDLER_GET_EXT)来阻塞wait_for_namespace_event()。传递给fsctl()的namespace_handler_info_ext结构设置为最后一次调用copyout()将失败,这将导致调用fp_free()。最后,为了触发这个bug,另一个进程在挂载的HFS DMG上创建并删除一个目录,这将导致nspace_snapshot_event()生成一个wait_for_namespace_event()正在等待的事件。通常情况下,这将生成一个恐慌消息“已释放的区域元素已被修改”。
相关热词搜索:macOS 10 14 6 (18G87) wait_for_namespace_event竞争条件 内核释放
上一篇:TP-Link已发布修补程序解决TP-Link Archer系列路由器漏洞可使Admin账户密码保护失效的问题
下一篇:新的WhatsApp漏洞导致群组聊天崩溃,造成历史聊天记录永久被删除
- Sudo漏洞(CVE-2019-18634):在某些配置下,它可能允许低特权用户或恶意程序在Linux或macOS系统上以root用户身份执行命令。
- CVE2019-1019Microsoft Windows 10.0.17134.648 - HTTP -> SMB NTLM reflection导致权限提升漏洞
- APP扫码安全:讨论Firefox IOS v10浏览器中的代码扫描XSS漏洞
- OpenBSD SMTP漏洞分析:远程执行代码,影响版本OpenBSD 6.6,OpenBSD 5.9,Debian 10,Debian 11,Fedora 31。
- POC编写:CNVD-2020-10487/CVE-2020-1938漏洞,tomcat服务器端口8009上的ajp协议漏洞,未经授权用户可读取网站目录中任意文件。
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )8872( 亮了
自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )6288( 亮了
Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
牛创网络: "在Grafana产品实例中,综合利用重定向和URL参数注入漏洞可以实现未经授权的服务器端请求伪造攻击(SSRF)。该漏洞影响Grafana 3 0 1至7 0 1版本。
2020-08-12 14:26:44 )4301( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )3858( 亮了
fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
牛创网络: "一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
2020-02-12 10:49:07 )3505( 亮了
整理几款2020年流行的漏洞扫描工具
牛创网络: "漏洞扫描器就是确保可以及时准确地检测信息平台基础架构的安全性,确保业务的平稳发展,业务的高效快速发展以及公司,企业和国家 地区的所有信息资产的维护安全。
2020-08-05 14:36:26 )2536( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )2261( 亮了
渗透测试:利用前端断点拦截和JS脚本替换对前端加密数据的修改
牛创网络: " 本文介绍的两种方法,虽然断点调试比JS脚本代码替换更容易,但是JS脚本代码替换方法可以实现更强大的功能,测试人员可以根据实际需要选择适当的测试方法
2020-01-07 09:34:42 )1995( 亮了
从工业界到学界盘点SAS与R优缺点比较
牛创网络: "虽然它在业界仍然由SAS主导,但R在学术界广泛使用,因为它的免费开源属性允许用户编写和共享他们自己的应用程序 然而,由于缺乏SAS经验,许多获得数据分析学位的学生很难找到工作。
2019-07-13 22:25:29 )1842( 亮了
41款APP侵犯用户隐私权:QQ,小米,搜狐,新浪,人人均被通报
牛创网络: "随着互联网的不断发展,我们进入了一个时代,每个人都离不开手机。 但是,APP越来越侵犯了用户隐私权。12月19日,工业和信息化部发布了《关于侵犯用户权益的APP(第一批)》的通知。
2019-12-20 11:28:14 )1775( 亮了