Apache Guacamole多个漏洞分析( 五 )


1、完整的内存布局:当我们想攻击父进程时 , 这个信息非常有用 。
2、完整的内存内容:存放在主进程中的每个秘密信息都会提供给子进程 。这意味着我们的进程也拥有proc-map映射 , 其中包含每个UUID与各自进程的对应关系 。我们只需要在自己的内存中找到这个数据结构 , 就能拥有当前活跃的所有的UUID 。
定位proc-map结果只是个技术上的过程 。在漏洞利用中 , 我们从/proc/<pid>/maps中读取到了我们进程的内存布局文件 。该数据结构比较大 , 因此被mmap()到独立的内存分配空间 , 在文件中具有自己的条目信息 。
步骤3:加入所有会话我们已经能够向主进程发起Guacamole Protocol请求 , 现在也知道了需要发送哪个请求 。接下来我们需要根据连接对应的UUID , 来请求加入每个已有的连接 。

Apache Guacamole多个漏洞分析

文章插图
 
图14. 日志显示我们成功加入了已有的连接
令人惊讶的是 , “只读”会话属性由guacamole-client来设置 。这意味着尽管我们不是连接的所有者 , 仍然可以关闭“只读”权限 , 获得该连接的完整权限 。此外 , 除了主进程中的日志消息外(图14) , 没有其他信息表明另一个用户加入了该连接 。
步骤4:重复操作如果大家仔细观察 , 可能会注意到我们攻击计划中的一个缺点:我们的guacd进程拿到的是过时的proc-map映射信息 。如果在我们进程生成后 , 网关又开启了其他会话 , 那么这些会话只会在实际的proc-map中更新 , 不会反映到我们已过时的内存映像中 。
这个缺点解决起来也比较简单 。在指定间隔后(比如每5分钟) , 我们可以向主进程发送命令 , 启动新的RDP连接 , 连接网内被我们控制的主机 。通过这种方法 , 我们可以定期生成新的guacd , 拿到新版的proc-map 。再结合我们原始的漏洞 , 我们同样可以攻击这个进程 , “刷新”我们的proc-map 。
将这些元素结合在一起后 , 完成的利用链可参考此处视频 , 其中我们实现了RCE + PE 。
0x07 时间线
  • 2020年3月31日:向Apache披露漏洞 。
  • 2020年3月31日:Apache回应 , 要求提供更多信息 。
  • 2020年3月31日:向FreeRDP披露漏洞 。
  • 2020年3月31日:FreeRDP回应 , 要求提供更多信息 。
  • 2020年3月31日:FreeRDP告知我们CPR-ID-2145和CPR-ID-2156都已重复提交 , 有其他研究者在2020年3月30日分别报告过 。
  • 2020年5月8日: Apache在某次commit中悄悄修复了漏洞 。
  • 2020年5月10日:向Apache反馈 , 表示官方补丁的确修复了我们报告的所有漏洞 。
  • 2020年5月12日:Apache为我们报告的4个漏洞发布了2个CVE-ID 。
  • 2020年6月28日:Apache发布了正式补丁版本– 1.2.0 。
 
0x08 总结这次我们展示了反向RDP攻击的一个新角度 , 这是我们在2019年年初提出的一个攻击场景 。用户通常认为这类攻击场景影响的是RDP客户端 , 而Apache Guacamole给了我们不同感受 。在正常情况下 , 攻击者可以使用客户端中的漏洞来控制单个公司网内计算机 。然而当在网关中部署时 , 这类漏洞对企业的影响将更为严重 。
在疫情期间 , 远程办公是必不可少的一个环节 , 然而我们并不能忽略这种远程连接中存在的安全隐患 。这里我们以Apache Guacamole为研究目标 , 成功演示了攻击者如何借助企业内部被入侵的计算机来控制负责处理所有内网连入会话的网关 。成功控制网关后 , 攻击者就能窃听所有的连入会话 , 记录所使用的凭据 , 甚至可以启动新会话 , 控制企业内的其他计算机 。在目前远程办公的大背景下 , 这个入侵点就有可能让攻击者完全控制整个企业网络 。本文翻译自 research.checkpoint.com ,  原文链接。如若转载请注明出处
我们强烈建议所有用户使用最新版的服务器 , 不论大家使用的是什么远程办公技术 , 一定要确保已打全补丁 , 才能阻止这类攻击活动 。
我是安仔 , 一名刚入职网络安全圈的网安萌新 , 欢迎关注我 , 跟我一起成长;私信回复【入群】 , 加入安界网大咖交流群 , 跟我一起讨论网络安全相关问题~


推荐阅读