此儲存庫包含 TeamViewer 中漏洞的概念利用證明,該漏洞使非特權使用者能夠將任意核心驅動程式載入到系統中。我要感謝零日倡議與他們的協調,以報告並負責任地披露漏洞。
有關以這些漏洞結束的研究的詳細資訊可以在我的部落格上的以下由三部分組成的部落格系列中找到。它們更詳細地介紹了這些漏洞,並顯示了我在過程中失敗的地方。第三部分是有趣的部分:P。
可以在此處找到該漏洞的影片:
在連接到 SYSTEM 服務 IPC 時能夠欺騙(只是部落格中詳細介紹的一些簡單身份驗證)有效的 TeamViewer 用戶端後,就可以觸發任意驅動程式安裝。 TeamViewer 未驗證正在安裝的驅動程式的簽章。
因此,借助 TeamViewer,可以將 USER 權限升級到 KERNEL。
最好的方法之一是使用眾所周知的技術BYOD(自帶易受攻擊的驅動程式)將有效的簽名驅動程式載入到 Windows 核心中,然後利用它從用戶層級執行特權操作,例如更改任意的令牌與特權進程一起進行。
當 TeamViewer 安裝在系統上時,它會建立一個作為 SYSTEM 運行的服務, TeamViewer_service.exe
該服務是客戶完成某些任務的幫助者。因此,客戶端不會以提升的權限運行,並且某些任務會委託給服務。
與服務(IPC)的通訊是透過套接字實現的(使用Overlapped I/O和IoCompletionPort )。預設情況下,TeamViewer SYSTEM 服務在本機上偵聽5939/tcp 。
TeamViewer不會過濾用戶端傳送來要求安裝驅動程式或簽章檢查等的參數。
所以我們的想法是:我們將欺騙電視客戶端,要求安裝VPN 驅動程序,但指示另一個 INF。我重新利用了 TeamViewer 的相同原始 INF,但在另一個(非特權)路徑中將「壞」驅動程式重新命名為teamviewervpn.sys ,因為這是原始 INF 所針對的驅動程式名稱。
這也繞過了 TeamViewer 選項「更改需要此電腦上的管理權限」 。
此檢查僅透過 GUI 有效,因為當非特權使用者按一下按鈕時, TeamViewer 選項會被停用。但可以連接到套接字並執行任意驅動程式載入。
此漏洞利用與版本相關,因為用戶端在 IPC 訊息中指定了其 PID 和版本中的其他資料。客戶端的版本必須與SYSTEM服務的版本相符。必須將 Main.cpp 中的漏洞程式(第 140 至 143 行)修改為目標 TeamViewer_service.exe 版本。
因此,基本上,我們欺騙連接 SYSTEM 服務的 TeamViewer 用戶端並要求安裝任意驅動程式。 TeamViewer 服務請將其載入到核心中。
TeamViewer 還有另一個 IPC 訊息,與我首先發現的第一個訊息非常相似(點擊「安裝 VPN 驅動程式」時拋出)。另一條訊息是安裝印表機驅動程式。
因此,本質上,CVE-2024-7479 和 CVE-2024-7481 是相同的,但 TeamViewer 犯了兩次相同的錯誤。儘管資訊不同,但非常相似。他們有不同的 IPC Method Id 。
結果是一樣的,可以載入任意驅動程式。