Apple设备多个安全漏洞原理与修复方式分析(CVE-2017-13890、CVE-2018-4176、CVE-2018-4175) - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

Apple设备多个安全漏洞原理与修复方式分析(CVE-2017-13890、CVE-2018-4176、CVE-2018-4175)

41yf1sh 漏洞 2018-11-23 09:56:36
259320
收藏

导语:近期,我们的第三方合作伙伴Syndis发现我们在Dropbox使用的Apple软件中存在漏洞,该漏洞不仅影响macOS,还影响当时最新版本的Safari,因此这些漏洞属于0 Day漏洞。

一、概述

近期,我们的第三方合作伙伴Syndis发现我们在Dropbox使用的Apple软件中存在漏洞,该漏洞不仅影响macOS,还影响当时最新版本的Safari,因此这些漏洞属于0 Day漏洞。当这些漏洞被组合利用时,攻击者可以通过诱导受害者访问特制的网页,实现在受害者的计算机上运行任意代码。

我们向Apple通报了这些漏洞,很快就得到了他们的确认。Apple在大约一个月内发布了针对这些漏洞的修复程序,这比“90天内修复”的行业标准要好很多。这些漏洞被指定了CVE编号,并且我们与Syndis共同验证了漏洞已经成功修复。本文将主要讲解这些漏洞的详细信息,及修复补丁的验证过程。

二、Safari自动下载和安装磁盘映像漏洞(CVE-2017-13890)

在CoreTypes中,定义了一个安全的统一类型标识符(UTI)列表,该列表将由Safari自动打开。上述内容可以在LSRiskCategorySafe中找到。我们特别感兴趣的是其中的com.real.smil。

如果我们使用Isregister检查Launch Services数据库,我们将会看到它在CoreTypes中定义,其描述为“同步多媒体集成语言”,并且似乎与Real Player媒体应用程序相关联。有许多文件扩展名都与这个UTI相关联,其中包括“.smi”。

$ touch a.smi
$ mdls a.smi | grep -e "kMDItemContentType\s\|kMDItemKind"
kMDItemContentType                 = "com.real.smil"
kMDItemKind                        = "Self Mounting Image"

我们可以看到,“.smi”文件具有com.real.smil内容类型,但它被描述为“自挂载映像”(Self Mounting Image)。这是因为在macOS 10.12.6上,Disk Image Mounter应用程序也将自身与这一扩展名关联,并将自身列为该扩展名文件的默认处理程序。Disk Image Mounter应用程序为“.smi”扩展名指定了com.apple.disk-image-smi这一UTI,但CoreTypes中定义的com.real.smil具有优先权限。

该漏洞已被分配CVE-2017-13890,Apple官方通告参见:https://support.apple.com/en-us/HT208692

CoreTypes

适用于:OS X El Capitan 10.11.6、macOS Sierra 10.12.6

影响:在对一个恶意制作的网页进行处理的过程中,可能会导致安装磁盘映像。

修复方法:通过增加限制条件,修复了逻辑问题。

CVE-2017-13890:Apple、Syndis的Theodor Ragnar Gislason

三、挂载磁盘映像导致应用程序启动漏洞(CVE-2018-4176)

Bless实用程序用于设置卷的可启动性以及启动磁盘选项。其中,一个有趣的选项是--openfolder,可用于指定在系统安装卷时在Finder中打开的文件夹。尽管描述是这样说的,但如果--openfolder的参数指向了一个可加载的包,并且这些包时经过打包且文件名以“.bundle”结尾的应用程序,那么实际上将会启动指定的应用程序,而没有执行打开Finder的操作。这就意味着,用户可以通过访问Safari中的网页来自动启动应用程序。然而,这一漏洞对攻击者来说,其可用性仍然有限,因为攻击者无法借助这一漏洞运行任意代码。Gatekeeper仅允许运行从应用商店下载的应用程序,以及由已知开发者签名的应用程序,从而防范此类共计。Launch Services在启动应用程序时将会进行检查,并产生如下错误提示:

1.png

为了使这条漏洞利用链有效,我们需要绕过Gatekeeper,以避开这种检查。

该漏洞已被分配CVE-2018-4176,Apple官方通告参见:https://support.apple.com/en-us/HT208692

磁盘映像

适用于:OS X El Capitan 10.11.6、macOS Sierra 10.12.6、macOS High Sierra 10.13.3

影响:挂载恶意磁盘映像可能会导致启动应用程序。

修复方法:通过增加限制条件,修复了逻辑问题。

CVE-2018-4176:Syndis的Theodor Ragnar Gislason

四、Gatekeeper绕过漏洞(CVE-2018-4175)

我们需要注意上面的错误提示:“evil无法打开,因为它来自一个身份不明的开发人员”,与此同时,我们还注意到Safari下载的磁盘映像中有evil。Syndis随后注意到了几件事:

1、他们可以启动经过签名的应用程序包的副本,例如我们磁盘映像中的Terminal.app。

2、如果修改Bundle的Info.plist,并不会使签名无效。

借助Info.plist,可以指定使用应用程序打开哪些扩展名的文件,也可以注册新的文件扩展名,这样一来就能够确保该应用程序作为默认的处理程序。在启动应用程序后,Launch Services会在数据库中注册应用程序和这些文件扩展名。我们可以使用Isregister命令查看:

...
--------------------------------------------------------------------------------
Container mount state: mounted
bundle  id:            2740
        Mach-O UUIDs:  67FFA762-AB52-31F0-AC80-E72008760B13
        sequenceNum:   2740
        FamilyID:      0
        PurchaserID:   0
        DownloaderID:  0
        installType:   0
        appContainer:  #
        dataContainer: #
        path:          /Volumes/bundle/Terminal.app
        name:          Terminal
        displayName:   Terminal
...
        bundle flags:  apple-internal  has-display-name  launch-disabled  (0000000000000103)
...
                {
            CFBundleTypeExtensions =             (
                workingpoc
            );
            CFBundleTypeRole = invalid;
            LSIsAppleDefaultForType = 1;
        },
...
}
        library:       (null)
        schemesList:   ssh, telnet, x-man-page
...
        --------------------------------------------------------
        claim   id:            15108
                name:          (null)
                rank:          Default
                roles:         Viewer 
                flags:         apple-default  apple-internal  doc-type 
                icon:         
                bindings:      .workingpoc
...

这样一来,就提供了一种注册新文件扩展名并启动已经签名的应用程序的方法。但是,我们还没有办法启动自己的应用程序或运行自定义命令。考虑到我们的目标是运行任意命令,那么利用Terminal(终端)APP应该是一个合理的思路。但是,如果我们尝试使用上述技术启动Shell脚本,Gatekeeper会因为要对Safari下载的文件进行隔离而阻止其执行。

在这里,就用到了真正的技巧。如果我们能够使用与Terminal副本相关联的新扩展名打开文件,那么就不会检查标志中的隔离位(Quarantine Bit),并且我们的代码将在系统版本的Terminal中运行,不会出现任何提示。

该漏洞已被分配CVE-2018-4175,Apple官方通告参见:https://support.apple.com/en-us/HT208692

LaunchServices

适用于:OS X El Capitan 10.11.6、macOS Sierra 10.12.6、macOS High Sierra 10.13.3

影响:恶意制作的应用程序可能会绕过代码签名检查策略。

修复方法:通过加强验证,修复了逻辑问题。

CVE-2018-4175:Syndis的Theodor Ragnar Gislason

五、漏洞链利用

现在,我们就能够将这三个漏洞链接在一起,从而实现使用Safari访问特制网页即可导致任意代码执行。第一阶段中,包含终端应用程序的修改版本,该应用程序被注册为新文件扩展名(.workingpoc)的处理程序。此外,它将包含一个名为“test.bundle”的空白文件夹,该文件夹将被设置为默认的“openfolder”,将会自动打开/Applications/Terminal.app,并且不产生任何提示。第二阶段中,包含一个带有扩展名“.workingpoc”的未经签名的ShellScript,随后在没有提示的情况下,从正在运行的Terminal应用程序中执行。

演示视频:https://videos.files.wordpress.com/MdOSNvhK/poc_dvd.mp4

六、漏洞修复方式

Apple在2018年3月29日发布的更新中,为上述漏洞提供了修复程序。

6.1 CVE-2017-13890

我们看到,com.real.smil UTI似乎已经从CoreTypes中删除。我们对“.smi”文件进行了检查,发现其目前具有适当的内容类型:

$ mdls a.smi | grep -e "kMDItemContentType\s\|kMDItemKind"
kMDItemContentType                 = "com.apple.disk-image-smi"
kMDItemKind                        = "Self Mounting Image"

并且,通过比较10.12.6和10.13.4版本的Launch Services数据库,可以进一步验证这一点:

10.12.6

claim   id:            3804
                name:          Self Mounting Image
                rank:          Default
                roles:         Viewer 
                flags:         apple-default  apple-internal  relative-icon-path  doc-type 
                icon:          Contents/Resources/diskcopy-doc.icns
                bindings:      com.real.smil, .smi

10.13.4

claim   id:            22824
                name:          Self Mounting Image
                rank:          Default
                roles:         Viewer 
                flags:         apple-default  apple-internal  relative-icon-path  doc-type 
                icon:          Contents/Resources/diskcopy-doc.icns
                bindings:      com.apple.disk-image-smi, .smi

因此,Safari将不再使用Disk Image Mounter应用程序自动打开“.smi”文件。

6.2 CVE-2018-4176

在修复后,使用bless命令打开可加载的Bundle将不会再导致Bundle启动。相反,该目录是使用Finder应用程序打开的,正如命令描述中所说的那样。

6.3 CVE-2018-4175

在10.12.6中,我们的脚本在漏洞利用的第二阶段并没有及时启动。在10.13.4中,我们看到了一条警告,提示此前从未启动过这个应用程序:

2.png

即使前两个漏洞没有被修复,通过这一改进,通过Safari访问恶意网页的用户也会得到充分的警告,并被明确告知继续执行该操作可能存在安全风险。

如果我们点击“Open”,会注意到,我们修改后的Terminal的Bundle标志,已经不再包含Launch Services数据库中的launch-disabled。

...
--------------------------------------------------------------------------------
Container mount state: mounted
bundle  id:            2740
        Mach-O UUIDs:  67FFA762-AB52-31F0-AC80-E72008760B13
...
        path:          /Volumes/bundle/Terminal.app
...
        bundle flags:  apple-internal  has-display-name  (0000000000000003)
...

七、时间节点

2018年2月19日 将漏洞详情报告给Apple

2018年2月19日 Apple确认报告

2018年2月21日 向Apple提供PoC

2018年2月21日 Apple感谢我们提供更多详情,并表示他们正在分析中

2018年3月29日 Apple发布安全更新( https://support.apple.com/en-us/HT208692


  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务