作者:任子行攻防实验室
预估稿费:300
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
0x01 漏洞概述
开发者 Lemi Orhan Ergin 发现 MacOS High Sierra系统重大安全漏洞。攻击者可以在普通用户权限下获得管理员权限。 objective-see 网站上 Why <blank> Gets You Root 文章从代码层面对漏洞细节做了详细刨析。该漏洞出现在PlistFile 二进制文件的od_verify_crypt_password 函数中,因为该函数使用攻击者指定的密码更新原账户的密码,并没有检查账户是否启用,导致凭据校验失败。在补丁中Apple 增加了对strcmp函数校验密码的安全性,并且对od_verify_crypt_password函数的参数做了进一步校验,后文会详细介绍漏洞原理。0x02 漏洞细节
CVE | CVE-2017-13872 |
漏洞描述 | MacOS High Sierra 系统无密码登录管理员账户 |
影响范围 | macOS High Sierra 10.13、 10.13.1、10.13.2 beta |
危害 | 本地提权,获取root权限 |
补丁 | https://support.apple.com/en-us/HT208315 |
模块 | opendirectoryd加载的PlistFile 二进制文件 |
类型 | 登陆凭据验证逻辑漏洞 |
0x03 漏洞验证
第一种利用:- 打开系统偏好设置
- 进入用户&群组
- 在用户名中输入 root
- 点击密码输入框,并不需要输入任何内容
- 点击解锁,这样就可以获得添加新管理员账户的权限了。
- 在登录界面选择 其他用户
- 在用户名处输入’root’
- 密码留空,直接登录
此方法登录会给root用户创建一个图形化账户。
0x04 漏洞修复
如果您需要使用root账户,您需要修改root用户密码,修改root用户密码可以阻止攻击者利用此漏洞。- 通过命令: sudo passwd root
- 通过 目录实用工具 app ->编辑->更改root 密码,也可以重新设置root密码
0x05%20漏洞原理分析
关于该漏洞的新闻已经在网络上炸开了锅,但是还一直没看到比较好的中文版的基于代码的分析报告,这里会介绍%20Why<blank>Gets%20You%20Root%20这篇文章中关于漏洞代码的分析,再加上自己的理解。 从上层来分析攻击的过程。当一个用户(或是攻击者)试图登录进一个未启用的账户时,系统会创建该账户使用用户输入的任意密码,哪怕是空密码也行。这就是我们在UI界面上可以攻击成功的原因,你必须要点击2次%20unlock。 当一个用户(或者攻击者)尝试认证一个帐号时,opendirectory%20守护进程(opendirectoryd)会进行处理。跳过分析过程,直接查看调用栈: opendirectoryd 进程收到一个XPC 消息,就会调用 odm_RecordVerifyPassword函数,该函数再调用od_verify_crypt_password函数。这两个函数都在PlistFile 二进制文件中,该文件通过/System/Library/OpenDirectory/Modules/PlistFile.bundle 包加载到opendirectoryd进程中。 开始分析odm_RecordVerifyPassword函数,该函数内部会调用sub_4f73函数,sub_4f73负责读取准备登录的用户的 shadowhash 数据,如果目标用户启用了,那么sub_4f73函数可以读取成功。 shadowhash 数据可以通过 dscl . -read /Users/<user> 命令读取,也可以直接从/private/var/db/dslocal/nodes/Default/users/<user>文件读取。 如果目标账户没有启用,比如root账户作为目标, shadowhash 信息不存在, 读取会失败 (没有AuthenticationAuthority 字段)。 当shadow hash 信息没有找到,会调用od_verify_crypt_password函数。 od_verify_crypt_password 函数会验证用户(攻击者)输入的密码,第三个参数传入用户输入(假设是“hunter2”)的密码, 第二个参数是root 账户(未启用)的密码”*” 。 od_verify_crypt_password 最后返回0x1。 这就有趣了,因为返回非0值,继续执行调用_os_log_impl 函数打印日志,从日志可以看出user-record 加密密钥会被更新为shadowhash 或者 securetoken。 “found crypt password in user-record – upgrading to shadowhash or securetoken” 然而,我们跟踪更新操作的输入发现正是使用我们提供的hunter2来更新加密密钥。 这个新密码(实际是shadow/securetoken)被保存到账户(root账户)中,因此,用户(攻击者)可以登录成功。 总结:- 目标账户是 未启用状态,MacOS 系统回尝试做一次更新密钥
- 更新过程中od_verify_crypt_password 返回非0值,并且错误代码没有被检查
- 攻击者指定的密码会用来更新原账户的密码
0x06 远程利用此漏洞
如果有漏洞的MacOS High Sierra系统开启了“屏幕共享”功能,那么攻击者就可以通过屏幕共享功能利用此漏洞达到远程代码执行的能力。 攻击环境:- 一台Mac电脑
- 在VMWare 虚拟机中安装MacOS High Sierra 10.13 以上版本系统
- MacOS High Sierra 10.13 系统开启屏幕共享功能
- 请求权限模式,会提醒受害者有人远程连接
- 以本人身份模式,不会提醒受害者
参考:
https://objective-see.com/blog/blog_0x24.html https://support.apple.com/en-us/HT208315
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
评论