Telegram桌面版曝高危漏洞:点击链接可窃取文件

Telegram桌面版曝高危漏洞,点击恶意链接即可窃取本地文件并劫持账户。该缺陷源于IPC注入及内部URI权限缺失,影响7.2.8及以下版本,已在7.2.9修复。

Telegram 桌面客户端曝高危漏洞:一键点击链接即可窃取账户文件

近日,安全研究人员披露了 Telegram 桌面版的一个严重安全漏洞。攻击者只需诱导用户点击聊天中的恶意链接,即可实现远程任意本地文件读取,进而窃取用户的登录凭证并接管账户。

点击链接即可窃取登录凭证

该漏洞涉及两个核心缺陷:一是进程间通信(IPC)注入导致的命令执行;二是内部 URI 方案 interpret: 缺乏权限验证,允许将指令文件中指定的任何文件发送至聊天窗口。这两个缺陷结合,使得简单的链接点击转化为数据泄露工具。

受影响版本TG Desktop ≤ 7.2.8(Windows 6.9.3 已确认)
影响范围远程任意本地文件读取、泄露至攻击者控制的聊天、账户劫持
CVE 编号CVE-2026-107181
修复状态已在 7.2.9 版本修复(Commit db3405699f)
严重程度高危 (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N)

漏洞原理:IPC 注入与序列化缺陷

操作系统允许应用程序注册自定义 URI 方案。Telegram 桌面版注册了 tg:// 协议。当系统遇到此类链接时,会启动 Telegram 并将 URL 作为命令行参数传递。

若 Telegram 实例未运行,新进程直接处理该 URL。但若实例已在运行,操作系统仍会启动一个新进程。此时,新进程需通过本地 Socket 与正在运行的实例通信,告知其“已有实例存在”,并传递链接内容后退出。

由于 Socket 传输的是字节流而非对象,URL 必须被序列化为文本。Telegram 使用一种简单格式:每个指令由关键字、参数和分号 ; 组成。例如,打开链接的指令为 OPEN:<url>;。

然而,在序列化过程中,Telegram 未对 URL 中的特殊字符进行转义或过滤。如果攻击者在链接中嵌入分号,接收端在反序列化时会将其视为多个独立指令。这种输入验证缺失导致了 IPC 注入漏洞。

关键组件:interpret: URI 方案的权限绕过

通过注入,攻击者可以构造包含 OPEN: 指令的恶意链接。虽然 OPEN: 本身用于打开 URL,但研究发现 Telegram 内部存在一个未公开注册的 URI 方案:interpret:。

interpret: 是 Telegram 用于发布更新版本的内部机制。它读取指定路径下的文本文件,解析其中的指令(如目标频道、要发送的文件路径等),并将文件发送到指定聊天。

代码审计显示,InterpretSendPath 函数在执行时没有进行授权检查,也没有要求用户确认。只要攻击者能通过注入调用 OPEN:interpret:<path>,Telegram 就会无条件读取磁盘上的任意文件并发送给攻击者。

攻击链构建:从文件读取到账户劫持

为了利用此漏洞,攻击者需要先在受害者磁盘上放置一个恶意指令文件。由于 Telegram 默认配置下会自动下载群组中小于 8 MiB 的文件,攻击者可将纯文本指令文件发送至受害者所在的群组。

这些文件会被自动保存到固定路径:
C:\Users\<user>\Downloads\Telegram Desktop\<filename>

尽管用户名未知,但 interpret: 支持相对路径。相对于 Telegram 的工作目录(通常为 %APPDATA%\Telegram Desktop),攻击者可构造确定性路径来定位下载文件夹中的指令文件。

窃取会话密钥

Telegram 桌面版的数据加密采用密钥封装机制:

  • DEK (Data Encryption Key):随机生成的高熵密钥,用于加密用户数据。
  • KEK (Key Encryption Key):由用户密码(若无则空字符串)和盐值通过 KDF 派生,用于加密 DEK。

关键文件位于 tdata 目录下:

tdata/
├── key_datas                 # 包含盐值和加密后的 DEK
├── D877F783D5D3EF8Cs         # MTProto 授权信息,由 DEK 加密
└── D877F783D5D3EF8C/maps     # 索引文件

若用户未设置本地访问密码,KEK 仅由空字符串和明文存储的盐值派生。因此,一旦攻击者通过漏洞读取 key_datas,即可重新计算 KEK,解密 DEK,进而解密所有用户数据,包括会话授权令牌。

多文件窃取

单次 interpret: 调用只能发送一个文件(取指令文件中最后一个 file: 字段)。但攻击者可通过一次链接注入多个 OPEN: 指令,分别指向不同的指令文件,从而一次性窃取 key_datas、授权文件和索引文件。

交付方式与 PoC

值得注意的是,直接在 Telegram 聊天内点击 tg:// 链接不会触发此漏洞,因为这类链接在进程内处理,不经过 Socket 通信。攻击者需利用外部浏览器重定向:

  1. 攻击者在 Telegram 群组中分享一个普通的 https:// 链接。
  2. 该链接指向攻击者控制的服务器,服务器返回 HTTP 302 重定向至精心构造的 tg:// 恶意链接。
  3. 用户在浏览器中点击 HTTPS 链接,浏览器根据系统关联启动 Telegram,触发 Socket 通信及后续漏洞利用。

目前,Telegram 已在 7.2.9 版本中修复此问题。建议用户立即升级客户端,并注意防范来自陌生群组的链接诱导。

评论 0

0/500

评论需审核后展示,请文明发言

💬
还没有评论,来说两句

相关阅读