• 文章/ARTICLE
  • DYLD_ROOT_PATH dyld本地提权漏洞分析
  • 360NirvanTeam 2015-12-23 8925

  DYLD_ROOT_PATH是dyld中进行处理的一个环境变量,但由于处理不当,可导致的本地提权。该漏洞存在于Mac OS X 10.10.5中,在El Capitan(10.11)中被修补。Luis Miras(@_luism)在其博客上放出了漏洞分析以及提权利用代码。本文将对此漏洞进行简单分析,并说明提权所利用的攻击方式。 

 

一、漏洞描述

 


        dyld在处理DYLD_ROOT_PATH环境变量时,对于恶意构造的MachO文件dyld_sim的映射处理不当,导致dyld的代码段能够被重新映射,造成任意代码执行。若通过DYLD_ROOT_PATH漏洞运行setuid的程序,就能够实现本地提权。

 

二、dyld

 



        dyld是Mac OS X以及iOS上的动态链接器,和系统的加载器共同负责准备一个进程的启动过程。进程启动过程的基本步骤为:
      1. 系统加载器将可执行文件页面和dyld映射进内存。
      2. 系统加载器将控制权转交给dyld,由dyld负责将可执行文件依赖的库映射到进程地址空间中,并进行链接。
      3. 加载过程完成后,就从可执行文件的在内存中的入口点开始运行。

 

三、漏洞分析

 


 

DYLD_ROOT_PATH
This  is  a colon separated list of directories.  
The dynamic linker will prepend each of this directory paths to every image access until a file is found.


        根据dyld的man page,DYLD_ROOT_PATH环境变量是一个用冒号分隔的目录的列表,dyld在准备进程的过程中,在处理每一个image文件时,会把DYLD