Apache Guacamole 安全漏洞通告

发布时间 2020-07-03

0x00 漏洞概述


产品

CVE ID

类 型

漏洞等级

远程利用

影响范围

Apache Guacamole

CVE-2020-9497

II

严重

Apache Guacamole < 1.2.0

CVE-2020-9498

MC

严重


0x01 漏洞详情



Check Point的安全专家在Apache Guacamole中发现了多个严重的反向RDP漏洞。Apache Guacamole是系统管理员用于远程访问和管理Windows和Linux计算机的流行远程桌面应用程序。攻击者可以利用这些漏洞实现对Guacamole服务器的完全控制,并拦截和控制Guacamole上的所有会话。

信息泄露漏洞(CVE-2020-9497):

为了在RDP连接和客户端之间传输消息,开发人员为默认RDP通道实现了扩展,用于处理来自服务器的音频数据包(“rdpsnd”),传入的消息由FreeRDP的wStream对象封装,并且使用该对象的API来解析数据。但是由于缺少输入过滤导致越界读取。如图所示:



攻击者通过发送一条恶意rdpsnd消息获取到RDP客户端的内存信息。

在同一RDP通道中,不同的消息具有类似的漏洞。这次将越界数据发送到连接的客户端,而不是发送回RDP服务器。



读取的边界类似,这次将数据泄露到客户端。

内存损坏漏洞(CVE-2020-9498)

RDP协议将不同的“devices”分成单独的“channels”,包括rdpsnd声音的通道,cliprdr剪贴板的通道等等。作为抽象层,通道消息支持分段,从而允许其消息最长为4GB。为了正确地支持rdpsnd和rdpdr(设备重定向)通道,guacamole-server的开发人员添加了一个附加的抽象层,该抽象层在文件中实现:guac_common_svc.c。下图显示了在此文件中实现的传入通道的片段处理:



我们可以看到第一个片段必须包含该CHANNEL_FLAG_FIRST片段,并且在处理该片段时,将根据total_length分配流。但是,如果攻击者发送不带该标志的片段会怎样?似乎只是将其附加到先前的剩余流中。可见这是由内存安全冲突引起的悬空指针漏洞。现在,我们只需要检查开发人员是否记得上一条消息处理完成时是否将悬空指针设置为NULL。



图中可以看出,消息处理完成后,释放使用的流而没有清除悬空指针。

通过使用漏洞CVE-2020-9497和CVE-2020-9498,当远程用户请求连接到受害者的计算机时,受感染的计算机(RDP服务器)可以控制guacd进程,从而实现远程代码执行。



值得注意的是,到目前为止,Apache Guacamole远程桌面应用程序在Docker Hub上的下载量已超过1000万,该漏洞影响范围较大,请相关用户升级到Apache Guacamole 1.2.0版本。


0x02 处置建议


目前厂商已发布补丁,下载链接:

https://guacamole.apache.org/releases/1.2.0/


0x03 相关新闻


https://thehackernews.com/2020/07/apache-guacamole-hacking.html


0x04 参考链接


https://research.checkpoint.com/2020/apache-guacamole-rce/


0x05 时间线


2020-07-02 Check Point发布研究报告

2020-07-03 VSRC发布漏洞通告