【玄武小酒馆】我是如何5分钟获取年度CVE靓号的

  • A+
所属分类:安全文章
【玄武小酒馆
是玄武实验室新上线的专栏,
在这里聊技术聊八卦,
分享玄武实验室的生活日常。
小二,上酒

1337是一个神秘的数字,它发源于上古时期的安全社群,是指一种把字母用长相相近的数字进行替代的表示方法。原本人们称它为elite(精简),到后来为了贯彻这种极简主义的精神,逐渐演变为了eleet,最后是leet,也就是我们所知的1337。

虽然那个互联网的蛮荒时代已经远去,这个传统却一直了保留了下来,各位黑阔们看看自己id里被换成数字的部分。这可都是历史的烙印。

直至今日,这个数字还是被用来鼓励一些具有创新性的安全技术或者漏洞。
比如Google为我发现的一个漏洞发放了$3133.7的赏金。

【玄武小酒馆】我是如何5分钟获取年度CVE靓号的

除此之外,对于目前的通用型漏洞,MITRE都会为其分配一个身份证号一样的编号,这也就是所谓的CVE-ID,那么当然编号为1337的CVE-ID也就成了幸运数字,谁会获得它呢。

时间一转眼来到了2020年,安全研究员Peleg Hadar在5月向微软提交了windows Print Spooler中的权限提升漏洞,它允许普通用户通过对打印服务的利用提升至系统权限,微软为其分配的编号是CVE-2020-1048。

这个漏洞的核心原理在于windows添加打印机时,对port name的检查函数可以被绕过,设置为任意文件,因此我们可以把任意内容输出到port name对应的系统文件(如某个dll)中,实现权限提升。

通过控制面板添加打印机在底层调用了AddPort函数

【玄武小酒馆】我是如何5分钟获取年度CVE靓号的

这个函数会使windows print spooler服务对端口的合法性校验,当前用户无法将其设置为一个自己不具有访问权限的路径。

而PowerShell使用add-printer命令在底层则是直接调用XcvData函数,这个函数可以将port name设置为任意文件而不被检查。

【玄武小酒馆】我是如何5分钟获取年度CVE靓号的

攻击者只需要向这个port name输出打印任务即可把目标文件以系统权限覆盖为任意内容。

这个漏洞随后被发现野外利用。

【玄武小酒馆】我是如何5分钟获取年度CVE靓号的

有意思的是,由于每次重启后,挂起的打印任务都会被重新执行,即使受害者打上补丁,对先前成功执行的提权攻击也是无效的。

这引起了我的思考,单纯的出现一个函数就补一个函数,就像头痛医头,脚痛医脚,往往是治标不治本的。

那么这里就要介绍一下我们的老朋友,与windows如影随形的符号链接。

【玄武小酒馆】我是如何5分钟获取年度CVE靓号的

其中我们常用的,用来重定向某个目录的链接被称为junction。使用如下命令即可建立起一个从用户目录到系统目录的符号链接。
mklink /J c:userstestmyfolder c:windows

而无论是AddPort还是修复后的XcvData函数进行检查时,都是判断当前用户是否具有对目标路径的访问权限的。

因此,我们只需要首先将port name指向 c:userstestmyfolderxxx.dll ,通过检查后,再将myfolder作为一个软链接重定向到目标的系统路径中,即可完成对补丁的绕过。

是不是和web漏洞里的dns-rebinding技术有几分相似之处。

当我将这个漏洞报告给微软应急响应中心(MSRC)后,他们迅速的进行了修复处理。这个漏洞分配到了今年的leet编号,也就是我们文首提到的CVE-2020-1337。

我将相关的利用代码发布到了github。
https://github.com/math1as/cve-2020-1337-exploit

微软同时宣布将在日后推出对junction的缓解措施。也许只有逐步卸下历史的包袱,windows才能实现真正意义上的安全。

【玄武小酒馆】我是如何5分钟获取年度CVE靓号的


【玄武小酒馆】我是如何5分钟获取年度CVE靓号的


发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: