当前位置: 首页 > news >正文

CVE-2019-13382:SnagIt本地权限提升漏洞分析与利用

CVE-2019-13382:SnagIt本地权限提升漏洞

版本: Snagit 2019.1.2 Build 3596
测试操作系统: Windows 10 1803 (x64)
漏洞类型: 通过不安全文件移动实现的SnagIt Relay Classic Recorder本地权限提升
联合发现者: 与Capital Group安全测试团队的Marcus Sailler、Rick Romo和Gary Muller共同发现

漏洞概述

每30-60秒,TechSmith Uploader服务(UploaderService.exe)会检查"C:\ProgramData\Techsmith\TechSmith Recorder\QueuedPresentations"文件夹中的"*.xml"格式演示文件。如果发现无效文件,该服务会以SYSTEM权限将该文件移动到"C:\ProgramData\Techsmith\TechSmith Recorder\InvalidPresentations"。

由于低权限用户对QueuedPresentations和InvalidPresentations文件夹拥有完全控制权,攻击者可以在QueuedPresentations文件夹中创建无效演示文件,然后在InvalidPresentations文件夹中为该文件名创建指向特权位置的符号链接。

当服务检查演示文件时,它会将文件从QueuedPresentations文件夹移动到InvalidPresentations文件夹。在此过程中,服务会命中符号链接并将新文件写入受保护位置,同时低权限用户对内容拥有完全控制权,最终实现向NT AUTHORITY\SYSTEM的权限提升。

识别与利用

在评估软件权限提升漏洞时,寻找起点往往令人不知所措,因为存在许多不同的原语和漏洞类别。我的方法通常从基础开始,逐步增加复杂性。这个过程通常包括运行PowerUp等工具,以识别各种简单(但常见)的错误配置。

如果没有返回有趣的结果,下一步通常是寻找逻辑漏洞,特别是滥用符号链接/挂载点/硬链接原语。为了快速识别可能通过链接原语利用的潜在漏洞,我们需要确定操作系统上特权进程(通常是SYSTEM)与低权限用户控制的文件夹或文件交互的位置。

在寻找此类漏洞时,我通常从运行Process Monitor开始,对SYSTEM进程和常被滥用的文件系统位置(如C:\ProgramData、C:\Windows\Temp和C:\Users<username>\AppData)设置过滤器。

应用Process Monitor过滤器并观察输出几分钟后,明显发现"UploaderService.exe"正在查询"C:\ProgramData\Techsmith\TechSmith Recorder\QueuedPresentations"目录中的XML文件:

查看该文件夹的DACL,还发现"BUILTIN\Users"具有写入权限:

这特别有趣,因为特权SYSTEM进程(UploaderService.exe)正在低权限用户具有读/写访问权限的目录中查找文件。有了这些信息,下一步是给"UploaderService.exe"提供一个XML文件,看看会发生什么。

正如预期的那样,"UploaderService.exe"检查"C:\ProgramData\Techsmith\TechSmith Recorder\QueuedPresentations"中的XML文件,并找到我们创建的文件:

下一个问题是,"UploaderService.exe"如何处理我们的XML文件?它是否读取并处理内容?是否将其放置在其他地方?查看Process Monitor的其余输出可以为我们解答这个问题。在这种情况下,"UploaderService.exe"获取"C:\ProgramData\Techsmith\TechSmith Recorder\QueuedPresentations"中的任何XML文件,并确定XML演示文件是否有效。由于我们只是将"1"回显到XML文件中,服务可执行文件确定"1.xml"是无效演示文件,并将其移动到"C:\ProgramData\Techsmith\TechSmith Recorder\InvalidPresentations\1.xml":

查看"C:\ProgramData\Techsmith\TechSmith Recorder\InvalidPresentations"目录,"BUILTIN\Users"也具有读/写权限:

此时,我们已经确定SYSTEM进程(UploaderService.exe)正在检查用户控制的目录中的XML文件。当找到时,特权进程获取攻击者提供的XML文件,并将其从QueuedPresentations文件夹移动到InvalidPresentations文件夹,同时保留原始文件名。

为什么这很有趣?这提供了在移动文件操作期间使用符号链接来完成特权文件写入的机会。如何实现?工作流程如下:

  1. 在"C:\ProgramData\Techsmith\TechSmith Recorder\InvalidPresentations\1.xml"上创建指向"C:\Windows\System32\ualapi.dll"的符号链接

    需要注意的是,"C:\Windows\System32\ualapi.dll"不存在。这是我们植入的DLL,以获取SYSTEM代码执行权限
    由于进程是特权"SYSTEM",它将具有写入此文件的正确权限。

  2. 将虚拟xml文件写入"C:\ProgramData\Techsmith\TechSmith Recorder\QueuedPresentations\1.xml"

  3. 当"UploaderService.exe"检查"C:\ProgramData\Techsmith\TechSmith Recorder\QueuedPresentations"中的XML文件时,它将找到"1.xml"并将其移动到"C:\ProgramData\Techsmith\TechSmith Recorder\InvalidPresentations\1.xml"。在此过程中,它将命中我们的符号链接,并将文件移动到"C:\Windows\System32\ualapi.dll"(同时保留原始DACL)

理论上,这应该有效。让我们测试一下!对于符号链接,我使用了James Forshaw的Symbolic Link Testing Tools仓库中的"CreateSymlink.exe"。我们需要做的就是在"C:\ProgramData\Techsmith\TechSmith Recorder\InvalidPresentations\1.xml"上放置一个指向"C:\Windows\System32\ualapi.dll"的符号链接,然后创建"C:\ProgramData\Techsmith\TechSmith Recorder\QueuedPresentations\1.xml":

创建符号链接和虚拟XML文件后,我们等待60秒让"UploaderService.exe"检查QueuedPresentations文件夹。当它检查时,找到我们的"1.xml"文件,并尝试将其移动到"C:\ProgramData\TechSmith\TechSmith Recorder\InvalidPresentations\1.xml"。在此过程中,它命中我们在"C:\ProgramData\TechSmith\TechSmith Recorder\InvalidPresentations\1.xml"上的符号链接,并将其写入"C:\Windows\System32\ualapi.dll":

然后我们可以确认"C:\Windows\System32\ualapi.dll"的存在:

这很好,但是新创建的"ualapi.dll"文件不应该简单地继承父文件夹(C:\Windows\System32)的权限并阻止低权限用户写入吗?这是我最初的想法(在检查文件的DACL之前),但"UploaderService.exe"使用MoveFileW()。根据文档,MoveFileW()在同一卷上移动文件时保留原始DACL:

虽然没有明确说明,但可以推断如果文件没有跨卷移动,则移动时DACL保持不变。这意味着当"UploaderService.exe"命中"C:\ProgramData\TechSmith\TechSmith Recorder\InvalidPresentations\1.xml"上的符号链接并尝试将原始文件移动到"C:\Windows\System32\ualapi.dll"时,它保留了"1.xml"的原始DACL。由于它是由低权限用户创建的,因此其DACL将低权限用户作为拥有"完全控制"权限的所有者:

此时,我们现在拥有允许低权限用户写入的"C:\Windows\System32\ualapi.dll"。这意味着我们可以简单地用我们选择的有效负载覆盖新创建的ualapi.dll文件。在这种情况下,有效负载在加载时启动cmd.exe。

现在我们的有效负载位于C:\Windows\System32\ualapi.dll中。当假脱机服务启动时,此DLL会被加载。对于PoC,剩下的就是重新启动主机以使假脱机服务重新启动。此外,可以使用CollectorService在不重新启动的情况下加载DLL。由于这是PoC,这是留给读者的练习。

一旦主机重新启动,"spoolsv.exe"将以SYSTEM权限从C:\Windows\System32\ualapi.dll加载我们的有效负载,从而实现权限提升:

利用视频可以在这里找到:https://www.youtube.com/watch?v=V90JRwlaHRY&feature=youtu.be

此漏洞已在SnagIt版本2019.1.3、2018.2.4和13.1.7中修复,CVE编号为CVE-2019-13382。修复涉及在移动文件时使用_time64并结合检查重解析点(FSCTL_GET_REPARSE_POINT)。如果存在重解析点,则将其删除。

披露时间线

  • 2019年6月19日:与Capital Group安全测试团队共同识别漏洞
  • 2019年6月20日:与Capital Group开始联合披露。开设支持案例,请求TechSmith安全团队的联系信息
  • 2019年6月21日:案例分配给处理人员,新评论说明细节可以上传到当前案例,并将转发给安全团队
  • 2019年6月21日:完整报告、PoC代码和演示视频上传到开放支持案例
  • 2019年6月25日:TechSmith确认漏洞并提供临时修复建议。TechSmith还要求公开披露前通知
  • 2019年6月25日:告知TechSmith公开披露将在初始报告90天后进行,并注明如果需要会考虑延期
  • 2019年7月2日:TechSmith表示修复版本已完成,计划7月底前部署,并询问我们是否验证修复
  • 2019年7月2日:告知TechSmith将验证修复
  • 2019年7月3日:TechSmith提供私有修复版本
  • 2019年7月9日:基于测试告知SnagIt修复似乎足够
  • 2019年7月23日:发布补丁,问题公开披露
    更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
    公众号二维码
http://www.sczhlp.com/news/57965/

相关文章:

  • 列表推导式结合dict(zip())函数进行数据处理
  • 网站母版页怎么做一诺互联 网站建设
  • 台州做鞋子网站centos wordpress伪静态
  • 天津网站建设方案书wordpress5.0中文编辑器
  • 设计师喜欢的购物网站网站常用字号
  • 做网络平台的网站如何设置网站布局
  • 湟中县公司网站建设代理浏览器在线
  • 医院网站建设入门淘宝自动推广软件
  • asp.net做网站后台淘宝客做网站
  • 网站设计 手写wordpress 5.2必须php7
  • 江苏网站建设找哪家网络舆情工作方案
  • 网站服务器如何管理云服务器安装wordpress
  • 北京的制作网站的公司有哪些服装网站建设策划书可行性分析
  • 基于asp的网站开发响应式网站的组成
  • 公司网站制作与维护wordpress文章发布工具
  • 新余网站网站建设wordpress企业主题购买
  • 火狐退出中国后,Zen 浏览器会是「理想平替」吗?
  • zip函数聚合打包,list和dict进行类型转换
  • 西安网站建设全包如何选择大连网站建设
  • 做平面设计买哪个素材网站会员企业门户网站功能
  • seo华为网站诊断报告乐清比较好的设计公司
  • 建设地产网站您的网站空间即将过期
  • 秒玩大型游戏的网站制作网站多少钱一个
  • 迁安做网站贵州普安县建设局网站
  • 西安h5建站新媒体平台有哪些?
  • 重庆大渡口网站建设网页游戏怎么在手机上玩
  • 英山建设银行网站点击运行显示网站正在建设
  • 随州建设网站温州建设集团官方网站
  • 电子商务网站开发实战汕头企业制作网站推广
  • 基础型网站套餐软件开发项目预算表