Telegram Desktop 桌面版的單鍵帳號接管漏洞:攻擊者只要讓使用者點擊一個看起來無害的連結,就能竊取本機任意檔案並接管帳號。這個漏洞影響所有 7.2.8 以前的 Telegram Desktop 版本,已於 2026 年 10 月 16 日修復,正式版 7.2.9 隔天上線。
漏洞編號為 CVE-2026-107181,CVSS 評分 8.1 分,屬於「高風險」。整個攻擊鏈由兩個缺陷串接而成:第一個是 IPC 注入,第二個是未經授權的「interpret:」URI scheme 處理。兩者各自風險有限,但結合在一起,就能把「點一下連結」變成「任意檔案讀取」。
漏洞的工作原理
Telegram Desktop 啟動後會在本機監聽一個 socket,專門接收新啟動程序的指令。當使用者點擊 tg:// 連結時,作業系統會啟動一個新的 Telegram 程序,這個新程序會把 URL 序列化為文字後傳給已運行的實例。例如下面這個無害的連結:
tg://x?a=1
會被序列化成這樣送到 socket:
OPEN:tg://x?a=1;
已運行的實例收到後,會以分號為分隔符切割指令,然後逐一執行。每段以「OPEN:」開頭的片段都會被當成獨立的 URL 重新解析。
第一個缺陷就在這裡:序列化的過程沒有對分號字元做跳脫處理。如果連結本身就帶有分號,等於在無形之中塞進了第二道指令。拿上面的例子來說,如果連結是:
tg://x?a=1;CMD:quit
序列化後送到 socket 的內容就會變成:
OPEN:tg://x?a=1;CMD:quit;
執行端會把這段切成兩個指令:
OPEN:tg://x?a=1 CMD:quit
這就是所謂的「IPC 指令注入」。單獨來看,「CMD:quit」最壞的情況只是關閉應用程式,但問題是相同的注入手法可以塞入「OPEN:」指令,開啟任何 URL,包括 Telegram 內部私有的 URI scheme。
危險的 interpret: URI scheme
Telegram 內部有一套名為「interpret:」的私有 URI scheme,主要用於官方發布新版安裝檔。當開發團隊打包好新版本時,build 腳本會啟動 Telegram 並餝入一個指令檔,檔案內容如下:
from: 1234567890 channel: 1987654321 file: out/Release/deploy/6.9.3/tsetup.6.9.3.exe caption: TDesktop 12.06.26 更新
「from:」會比對目前登入的帳號 ID,避免用錯身分發布;「channel:」指定要發布到的頻道;「file:」是要發送的安裝檔路徑;「caption:」是發布說明。整個流程透過一個名為 InterpretSendPath 的函式執行,會讀取檔案內容並上傳到頻道,過程中完全沒有跳出確認視窗。
這套流程從命令列直接呼叫時沒問題,因為攻擊者必須先取得機器的控制權才能執行命令。但一旦可以透過 socket 觸發 interpret:,這條內部通道就被打開了,等於把「從命令列讀任意檔案並送出」這個功能開放給「點連結」這個動作。
這就是第二個缺陷:缺少授權檢查。InterpretSendPath 不會問「是誰要這份檔案」,也不會要求使用者確認。
把攻擊鏈組裝起來
要實際利用這個漏洞,攻擊者需要先把一個指令檔案放到受害者電腦上。最簡單的方式是透過 Telegram 群組自動下載功能:攻擊者在群組裡丟一個「文本附件」、一個「圖片」、一個「音訊檔」三個檔案,使用者一打開群組這三個檔案就會自動下載到 Telegram Desktop 的下載資料夾(Windows 預設為 %USERPROFILE%\Downloads\Telegram Desktop\)。
接下來攻擊者會在群組裡放一個看似無害的連結,例如導向網站的普通網址。實際上這個網頁伺服器會根據 User-Agent 識別出 Telegram Desktop,然後回應 302 重新導向,把真正的攻擊 URL 藏在轉址標頭裡:
tg://x?a=1;OPEN:interpret:../../../Downloads/Telegram%20Desktop/instructions1.txttg://x?a=1;OPEN:interpret:../../../Downloads/Telegram%20Desktop/instructions2.txttg://x?a=1;OPEN:interpret:../../../Downloads/Telegram%20Desktop/instructions3.txt
使用者點下去後瀏覽器會跟著 302 走,作業系統會啟動第二個 Telegram 程序,這個程序會把整串 URL 序列化送給 socket。執行端以分號切割後,會依序執行三條 OPEN: 指令,每條都指向一個自動下載的指令檔。
每個指令檔的「channel:」指向攻擊者控制的頻道,「file:」指向要竊取的本機檔案。InterpretSendPath 會依序讀取這些檔案、上傳到攻擊者的頻道,整個過程沒有任何確認視窗跳出。
具體會被偷走的東西包括 tdata 資料夾裡的 key_datas 檔案——這份檔案存有 Telegram 的本機登入金鑰,攻擊者拿到後只要在另一台電腦匯入,就能直接登入受害者的帳號,無需密碼、無需雙因素驗證。
通報與修復時間線
這份研究於 2026 年 9 月 16 日回報給 Telegram 安全團隊,9 月 24 日確認漏洞並開始撰寫修補程式。官方於 2026 年 10 月 16 日發布 commit db3405699f,把「interpret:」這條 URI scheme 完全移除,並對 socket 的分隔字元做百分比編碼跳脫,避免再次發生指令注入。同日 7.2.9 版正式釋出,隔天上線。
不過這個修復過程並未公開宣傳,7.2.9 版更新日誌只提到一個渲染修正。整起事件直到研究人員在個人部落格公開完整技術細節後,才被資安社群注意到。
為什麼這件事重要
這起漏洞示範了 IPC 注入與「內部特權 URI scheme」結合時的危險性。Telegram Desktop 為了讓官方 build pipeline 能自動化發版,設計了 interpret: 這條內部通道,但從頭到尾沒考慮過「同一條通道如何被外部輸入觸發」這件事。攻擊者不需要任何機器上的立足點,只要使用者點一下連結,就能把本機的加密登入金鑰送進攻擊者的頻道。
值得警覺的是,這類「內部特權通道被 IPC 串到外部」的設計模式,在 Electron、Qt、Chromium 系列的桌面應用中其實並不少見。任何依賴「單實例 socket + 序列化指令 + 內部 scheme」的程式架構,理論上都存在類似風險。Telegram 這次的修法是釜底抽薪——整條 interpret: 拿掉,加上百分比編碼跳脫——但其他專案不見得有同樣的決心。
給使用者的建議
最關鍵的一條:盡快把 Telegram Desktop 升級到 7.2.9 或更新版本。只要漏洞存在期間有點過可疑連結的 Windows、macOS、Linux 使用者都應該更新。
如果暫時無法更新,可以採取以下措施降低風險:
- 開啟「ask where to save each file」設定,這樣自動下載功能會失效,攻擊者無法把指令檔放到你電腦上,整條攻擊鏈從源頭斷開。
- 把「誰可以把使用者加進群組」設定改為「只允許聯絡人」,這樣攻擊者連丟連結的管道都沒有。
- 設定本機密碼,即使 key_datas 檔案被偷,也因為加密無法直接使用。
編按:本文綜合整理自 beaksec 研究部落格、Hacker News 討論串、CyberNews、Cyber Security News 等報導,並加入 Siami 編輯部觀點與分析。
網友熱門留言 (4)