热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分析AVASTSecureLineVPN任意文件创建漏洞

 0x00 绪论Avast SecureLine VPN允许用户通过安全的Avast VPN服务器在加密信道上连接互联网,保护用户的网络活动免遭监听。Avast SecureLine VPN增强了用户

 

0x00 绪论

Avast SecureLine VPN允许用户通过安全的Avast VPN服务器在加密信道上连接互联网,保护用户的网络活动免遭监听。Avast SecureLine VPN增强了用户上网的安全性和隐私性,在连接到公共网络或者不安全的无线网络时很有用。

Avast SecureLine VPN服务默认在C:\ProgramData\AVAST Software\SecureLine\log下创建日志文件,文件是由Avast SecureLine服务的特权(SYSTEM)进程所创建、访问和操作的。日志和所在的文件夹都有宽松的访问权限,允许非特权用户创建/删除文件或更改属性。Avast SecureLine VPN 5.5.522.0版受影响,更低版本可能也受影响,但没测试过。漏洞在5.6.4982.470版修复。

 

0x01 漏洞分析

以高特权(如SYSTEM)运行且可对用户文件进行无限制操作的进程可能导致安全问题,这些特权进程可能被滥用从而执行不安全操作。多数特权程序会操作一些位于用户可访问位置的文件,根据这篇文章所述,以下是一些有意思的文件位置:


  • 用户专属的文件和文件夹,包括AppData和Temp目录,如果安装了杀毒软件的话,一些特权进程可能会使用这些文件和目录

  • 公共用户的文件和目录

  • 创建在C:\且带有默认ACL的目录:分区根目录下创建的文件夹默认拥有宽松的ACL,允许用户写入

  • C:\ProgramData下带有默认ACL的子目录:默认情况下,用户可以创建文件和目录,但不能修改已有项目。这个目录常常是攻击时首先考虑的。

  • C:\Windows\Temp的子目录:默认情况下,用户可以创建文件和目录,但不能修改已有项目,对其他用户所属的项目,也不能读取文件/访问文件夹。

文件和目录的权限可以用多种方法查看,比如Powershell的Get-Acl或者属性的安全选项卡。日志文件由SYSTEM进程创建,且对用户可写。通过滥用日志文件的创建,可以实现任意文件创建:非特权用户可以用指向任意文件的符号链接替换这些日志文件。当日志生成时,有特权的AVAST SecureLine VPN进程将会创建日志文件并设置其访问权限,这就给了我们写权限。AVAST SecureLine用的权限如下图所示:

可以用Process Monitor工具观察文件操作。一旦发现对用户可控的文件/目录的操作,我们就需要思考如何利用这些操作。James Forshaw提出了若干滥用Windows文件系统和路径解析功能的方法,还发布了一个符号链接测试工具集,给研究者做PoC用。有很多方法可以用来利用此类漏洞,包括:


  • NTFS目录联接

  • 硬链接

  • 对象管理器符号链接

  • 机会锁

低权限用户可以使用三种符号链接:


  • 对象管理器符号链接

  • 注册表键符号链接

  • NTFS挂载点

我用的是对象管理器符号链接来利用漏洞。@clavoillotte在他博客中提到,非特权用户可以在Windows对象管理器中创建符号链接,对象管理器管理进程、section、文件之类的对象。对象管理器用符号链接来把驱动器字符和命名管道与相应的设备关联起来。用户可以在可写的对象目录中创建对象符号链接,比如在\RPC CONTROL\中创建,这些符号链接可以指向任意路径——包括文件系统上的路径——不管这个路径是否实际存在。对象符号链接和NTFS目录联接结合起来十分有意思,非特权用户可以创建挂载点,使其解析到\RPC CONTROL\目录,而在这个目录中又有一个对象管理器符号链接。例如:

 

0x02 漏洞利用

非特权用户可以执行以下操作来利用漏洞:


  • 删除C:\ProgramData\AVAST Software\SecureLine\log中所有文件

  • 创建伪符号链接C:\ProgramData\AVAST Software\SecureLine\log\vpn_engine.log,指向C:\Windows\System32\pwned.dll

  • 重启SecureLine服务,或者等待电脑重启,然后服务就会在C:\Windows\System32目录下创建任意文件

这导致任意内容文件创建漏洞,我们可以用符号链接来把一个特定日志文件重定向到任意文件,改文件名由攻击者选择,比如:

漏洞利用步骤:

删除日志目录下所有文件,用Powershell命令删除文件:

Remove-Item -Force "C:\ProgramData\AVAST Software\SecureLine\log\*"

用James Forshaw的CreateSymlink工具创建符号链接,所用命令:

CreateSymlink.exe "C:\ProgramData\AVAST Software\SecureLine\log\vpn_engine.log" C:\Windows\System32\pwned.dll

成功利用漏洞,在目标文件夹中创建了文件。

我写了PoC,代码在这里。要和James Forshaw的符号链接工具集一起编译。PoC需要管理员权限才能运行,因为启动/停止服务功能需要管理员权限,如何避免这点就留给读者实现吧。

 

0x03 漏洞披露时间线

漏洞是我飞韩国参加POC会议前几天发现的,我只花了几小时找漏洞和利用。2019年11月就已经报告了这个漏洞,遵守了AVAST的标准披露程序,时间线如下:


  • 2019-11-02——漏洞报告给AVAST安全团队(邮件)

  • 2019-11-05——厂商回复将调查漏洞

  • 2020-01-23——跟进漏洞。厂商确认漏洞并告知内部正在发生变动,所以修补可能要花费一些时间

  • 2020-03-02——再次跟进漏洞。厂商首要任务是杀毒软件,其次才是其他产品

  • 2020-05-18——跟进漏洞。厂商之前通知VPN产品的补丁会在五月底发布,但进展不顺利,所以推迟到六月

  • 2020-06-26——再次跟进漏洞。厂商告知周一将发布修补后的版本(即2020年6月29日)

  • 2020-07-14——确认5.6.4982.470版已部署补丁,联系厂商询问CVE与发表博客文章有关事宜。厂商回复不分配CVE,可自己申请。因为补丁已部署,所以厂商允许发表文章描述漏洞。修复后的版本在这里。

  • 2020-07-22——申请CVE,等待中



推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Google在I/O开发者大会详细介绍Android N系统的更新和安全性提升
    Google在2016年的I/O开发者大会上详细介绍了Android N系统的更新和安全性提升。Android N系统在安全方面支持无缝升级更新和修补漏洞,引入了基于文件的数据加密系统和移动版本的Chrome浏览器可以识别恶意网站等新的安全机制。在性能方面,Android N内置了先进的图形处理系统Vulkan,加入了JIT编译器以提高安装效率和减少应用程序的占用空间。此外,Android N还具有自动关闭长时间未使用的后台应用程序来释放系统资源的机制。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 加密世界下一个主流叙事领域:L2、跨链桥、GameFi等
    本文介绍了加密世界下一个主流叙事的七个潜力领域,包括L2、跨链桥、GameFi等。L2作为以太坊的二层解决方案,在过去一年取得了巨大成功,跨链桥和互操作性是多链Web3中最重要的因素。去中心化的数据存储领域也具有巨大潜力,未来云存储市场有望达到1500亿美元。DAO和社交代币将成为购买和控制现实世界资产的重要方式,而GameFi作为数字资产在高收入游戏中的应用有望推动数字资产走向主流。衍生品市场也在不断发展壮大。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 本文介绍了连接库的定义和使用方法。连接库是通过编译生成的dll文件,例如php_mysql.dll。在使用扩展时,需要去掉配置文件中的分号,并通过phpinfo查看是否正确加载了mysql连接库。详细内容请参考链接:https://www.cnblogs.com/xiaobiaomei/p/7654750.html。摘要字数:180字。 ... [详细]
author-avatar
努力的蚂蚁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有