Telegram Desktop 單點一下即可被讀走本機檔案,CVE-2026-107181 在 7.2.9 靜默修補
beaksec 研究文章 · 2026-10-03(2026-10-07 更新)
Telegram Desktop 單一實例(single-instance)的 IPC 把使用者點開的連結當成純文字轉給已執行的程式,卻沒有跳脫分隔字元,讓一條連結能被拆成多道指令;其中一道指令可以走到原本只給發版工具用的 interpret: 內部協定,把本機任意檔案傳到聊天室。研究者 beaksec 把這個漏洞串鏈稱為「IPC 注入的一鍵帳號接管」,編號 CVE-2026-107181,CVSS 3.1 為 8.1(High,向量 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N)。
受影響範圍是 Telegram Desktop 至 7.2.8(作者在 Windows 6.9.3 上確認),修補版本為 7.2.9。
漏洞機制
Telegram Desktop 為了避免開出第二個視窗,會把新啟動的行程收到的參數,經由本機 socket 交給已經在跑的實例。這條 socket 用分號分隔各筆指令,而 URL 參數裡的分號沒有被跳脫。換句話說,一條 tg:// 連結只要在參數裡夾帶分號,接收端就會把後半段當成另一道獨立指令。
第二個缺陷是缺少授權檢查:內部的 interpret: 處理器原本為發版工具設計,會讀取指定檔案並上傳到頻道或超級群組,過程不驗證呼叫者、也不需要使用者確認。一旦能經由注入的 OPEN: 指令到達它,就成為任意本機檔案讀取的原語(primitive)。
攻擊只需要受害者點一次:一般的 https 連結重新導向到精心構造的 tg:// 連結即可。作者刻意未公開注入字串與檔案目標,這裡也不重述。
修補內容
修補 commit 是 db3405699f,標題為「Remove legacy interpret path helper.」,共改動 11 個檔案(+126 / −372),刪除量遠大於新增量,因為重點是把整條功能拿掉。依作者的整理,它做了四件事:
- 移除
interpret://協定與Support::InterpretSendPath,檔案讀取原語從根源消失。 - IPC 輸出時,對
;與%以百分比加十六進位編碼跳脫。 - 同一條連線若帶有
OPEN:記錄,就略過CMD:與CTRL:記錄。 - 同一條連線一旦出現非本機 URL,就丟棄其中的本機檔案路徑。
Diff 中最關鍵的跳脫邏輯如下,新程式在組 OPEN: 指令時先對 URL 做跳脫:
+ if (code < 32 || code > 127 || ch == QChar('%') || ch == QChar(';')) {
+ result.append('%');
+ commands += u"OPEN:"_q
+ + EscapeTo7bit(url.toString(QUrl::FullyEncoded))
- if (url.scheme() == u"interpret"_q) {
- interprets.append(url.path());修補與揭露的落差
這個修補是廠商自行發現並靜默處理的:作者於 2026-06-25 透過 ZDI 通報,廠商在 2026-09-16 提交修補,7.2.9 於 2026-09-17 發布,ZDI 在 2026-09-30 以「已修復」結案並把揭露權還給作者。作者指出,7.2.9 的更新說明只提到一項渲染修正,沒有任何安全公告。
| 日期 | 事件 |
|---|---|
| 2026-06-25 | 透過 ZDI 通報 |
| 2026-09-16 | 廠商提交修補 db3405699f |
| 2026-09-17 | 7.2.9 發布 |
| 2026-09-30 | ZDI 結案,揭露權回到作者 |
| 2026-10-03 | 文章發表 |
| 2026-10-07 | 指派 CVE-2026-107181 |
實務上的後果是:只看更新說明的人不會知道 7.2.9 是安全更新。自動更新被關掉、或以 portable 版長期掛著的桌面端,會一直停在可被利用的狀態,而且 CVE 編號是在修補發布三星期後才出現,漏洞掃描與資產盤點工具在這段期間不會有對應條目。
影響範圍
桌面版使用者是第一線:確認 Telegram Desktop 版本不低於 7.2.9。手機版不在作者描述的範圍內。
IT 與資安團隊需要自行把 7.2.9 列為最低版本,因為廠商沒有發公告,內部的版本稽核不能等 CVE feed。公司機器若允許安裝 Telegram Desktop,帳號接管的衝擊包含聊天紀錄與本機檔案外洩。
作者列出的補強設定(皆不能取代升級):
- 啟用「每個檔案都詢問儲存位置」,避免檔案自動下載。
- 把「誰能將你加入群組」限制為聯絡人。
- 設定本機密碼。作者說明這擋不住檔案被偷,只是讓被偷走的本機 session 資料較難使用。
對開發者另有一個可借鏡之處:凡是用「文字協定加分隔符」在行程間傳遞使用者可控內容的單一實例機制,都應該檢查分隔符是否被跳脫,並確認內部用的指令不會從外部入口到達。此漏洞兩個缺陷單獨看都不致命,串起來才成為一鍵攻擊。
原始來源:beaksec 研究文章、tdesktop commit db3405699f、CVE-2026-107181