安全研究人员发布iOS核心漏洞概念验证攻击程序
今年三月份国外安全研究人员向苹果提交了 iOS 系统AVE驱动模块中可进行提权并造成闪存损坏的安全漏洞。
苹果公司随后在iOS 10.3.2版中对此漏洞进行了修复,日前这名安全研究人员已经公布了概念验证程序 ziVA。
该程序集成并利用 iOS 系统中七个漏洞展开攻击,最终可以通过漏洞进行提权进而直接控制整个被黑的设备。
概念验证程序的发布意味着iOS越狱开发团队可以借助这些漏洞来针对iOS 10.3.1及早期的版本开发越狱工具。
不过这名安全研究人员强调概念验证程序只是为了教育目的,帮助 IT 管理员和渗透测试人员进行安全性评估。
同时其强调相关程序和安全漏洞都不应该被应用在其他地方,而用户则应该尽管升级到 iOS 最新版确保安全。
ziVA概念验证程序地址及相关说明:https://blog.zimperium.com/ziva-video-audio-ios-kernel-exploit/
利用的漏洞如下:
- CVE-2017-6989: Adam Donenfeld (@doadam) of the Zimperium zLabs Team
- CVE-2017-6994: Adam Donenfeld (@doadam) of the Zimperium zLabs Team
- CVE-2017-6995: Adam Donenfeld (@doadam) of the Zimperium zLabs Team
- CVE-2017-6996: Adam Donenfeld (@doadam) of the Zimperium zLabs Team
- CVE-2017-6997: Adam Donenfeld (@doadam) of the Zimperium zLabs Team
- CVE-2017-6998: Adam Donenfeld (@doadam) of the Zimperium zLabs Team
- CVE-2017-6999: Adam Donenfeld (@doadam) of the Zimperium zLabs Team
部分代码:
surface = (IOSurface *)OSMetaClass::allocClassWithName(“IOSurface”); IORecursiveLockLock(provider->iosurface_array_lock); if ( !surface ) { IORecursiveLockUnlock(provider->iosurface_array_lock); return 0; } init_ret_code = surface->init(surface, provider, task_owner, surface_data); /* At this point, the surfaces’ list is unlocked, and an invalid IOSurface object is in the list */ IORecursiveLockUnlock(provider->iosurface_array_lock);if ( !init_ret_code ) { surface->release(surface); return 0; }
surface = (IOSurface *)OSMetaClass::allocClassWithName(“IOSurface”); IORecursiveLockLock(provider->iosurface_array_lock); if ( !surface ) { IORecursiveLockUnlock(provider->iosurface_array_lock); return 0; } init_ret_code = surface->init(surface, provider, task_owner, surface_data);if ( !init_ret_code ) { surface->release(surface); /* Here our bad surface is freed *before* the kernel unlocks the surfaces’ list, Hence our bad surface is not accessible at anytime in case IOSurface::init fails. */ IORecursiveLockUnlock(provider->iosurface_array_lock); return 0; } IORecursiveLockUnlock(provider->iosurface_array_lock);