launchd中虚拟磁盘挂载尺寸分配问题导致UAF

##2016年 八月二十二日 星期一

###launchd进程在0x10000420D(10.11.6)处的function自动生成MIG代码, msgh_id 437是由其解析而来。

###虽然此mig方法采用了out-of-line-ports描述符,但是这个代码并没有校验request_fdsCnt是否等于实际描述符的大小,而且它使用了不受信任的方法去调用mig_deallocate来回收内存。

###我们可以在它们运行过程中,通过传递一个较大的值来让后续页面被销毁。

###这个bug可以在OS X / iOS中任意的沙箱发生。

###如果想要真正的看到这个崩溃,首先你要在一个循环中跑这个POC,然后做一些会导致很多launchd流量的事,比如:

###在一个终端while true; do ./legacy_ipc; done

###在另一个终端while true; do /Applications/Safari.app/Contents/MacOS/Safari&sleep 0.4 && killall Safari; done

###测试是基于MacBookAir5,2上的OS X 10.11.6(15G31)进行。

译者:赤
文章首发于看雪安全论坛