0x00 緒論
Avast SecureLine VPN允許用戶通過安全的Avast VPN服務器在加密信道上連接互聯網,保護用戶的網絡活動免遭監聽。Avast SecureLine VPN增強了用戶上網的安全性和隱私性,在連接到公共網絡或者不安全的無線網絡時很有用。
Avast SecureLine VPN服務默認在C:ProgramDataAVAST SoftwareSecureLinelog下創建日志文件,文件是由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:windowsTemp的子目錄:默認情況下,用戶可以創建文件和目錄,但不能修改已有項目,對其他用戶所屬的項目,也不能讀取文件/訪問文件夾。
文件和目錄的權限可以用多種方法查看,比如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:ProgramDataAVAST SoftwareSecureLinelog中所有文件
- 創建偽符號鏈接C:ProgramDataAVAST SoftwareSecureLinelogvpn_engine.log,指向C:WindowsSystem32pwned.dll
- 重啟SecureLine服務,或者等待電腦重啟,然后服務就會在C:WindowsSystem32目錄下創建任意文件
這導致任意內容文件創建漏洞,我們可以用符號鏈接來把一個特定日志文件重定向到任意文件,該文件名由攻擊者選擇,比如:
漏洞利用步驟:
刪除日志目錄下所有文件,用Powershell命令刪除文件:
Remove-Item -Force "C:ProgramDataAVAST SoftwareSecureLinelog*"
用James Forshaw的CreateSymlink工具創建符號鏈接,所用命令:
CreateSymlink.exe "C:ProgramDataAVAST SoftwareSecureLinelogvpn_engine.log" C:WindowsSystem32pwned.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,等待中