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分配流。但是,如果攻擊者發送不帶該標志的片段會怎樣?似乎只是將其附加到先前的剩余流中??梢娺@是由內存安全沖突引起的懸空指針漏洞?,F在,我們只需要檢查開發人員是否記得上一條消息處理完成時是否將懸空指針設置為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發布漏洞通告