Telegram Desktop 一键账号接管漏洞(CVE-2026-107181)
原创
安全路人A
安全路人A
军机故阁
2026年10月10日 11:22
北京
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
本文基于安全研究员 Officer's Notes(@officer\_secret)2026 年 10 月 9 日的公开预警、其引用的 beaksec(Emiliano Versini)技术分析文章,以及 NVD/CVE 官方记录整理。漏洞已于 2026 年 9 月 17 日在 Telegram Desktop 7.2.9 中修复。
Telegram Desktop 7.2.8 及更早版本就存在 IPC 记录分隔符注入漏洞。攻击者构造特殊的tg://链接,受害者只需点击一次,即可触发客户端把本地任意文件(包括会话密钥文件)上传到攻击者控制的频道或超级群组,从而实现账号接管。
攻击链
公开分析描述的典型路径依赖默认配置与一次点击,大致如下:
攻击者创建超级群组(默认隐私设置下,非联系人也可被拉入),把受害者拉进去。
在群里投放若干纯文本指令文件(小于自动下载阈值,通常 ≤ 8 MiB)。文件中channel:指向攻击者频道,file:指向目标路径,且省略from:。
受害者打开群聊后,客户端把这些文件自动下载到本地下载目录(Windows 上常见为Downloads\Telegram Desktop\)。
攻击者发送一个 HTTPS 链接,该链接重定向到精心构造的tg://URL。URL 中用未转义的分号注入多条OPEN:interpret:指令,路径使用相对路径指向刚下载的指令文件(相对于客户端工作目录%APPDATA%\Telegram Desktop可解析到下载目录)。
受害者点击链接后,新进程把整串命令交给已运行实例;注入的interpret:被执行,指令文件中指定的本地文件被上传到攻击者频道。
若目标是会话目录tdata中的关键文件(如key\_datas及相关映射文件),且账号未设置本地密码,攻击者即可在另一台设备上恢复会话,完成账号接管。
公开文章指出,未设置本地密码时,密钥派生使用空密码,窃取到的会话文件可直接使用;设置了本地密码后,文件仍可能被读出,但无法直接登录。该链依赖:客户端已在运行、自动下载开启、受害者被拉入群组、以及一次点击。环境主要为 Windows。
漏洞根因:两处缺陷叠加
- 单实例 IPC 未转义分隔符操作系统把tg://协议注册给 Telegram Desktop。当客户端已经在运行时,新启动的进程不会再开一个窗口,而是通过本地 socket 把 URL 交给已有实例后退出。序列化格式很简单:关键字 + 参数 + 分号结束,例如:
文本
OPEN:tg://x?a=1;
接收端按分号切分,把每一段当作独立指令处理。问题在于发送端对 URL 中的分号没有转义。因此攻击者可以把:
文本
tg://x?a=1;OPEN:interpret:...
发送过去。客户端把它当成一个 URL 写入 socket,服务端按分号切开后,得到多条指令。这就是注入点(位于sandbox.cpp的单实例通信逻辑)。可用指令只有少数几条,CMD:仅支持show/quit,危害有限。真正危险的是OPEN:可以接受任意 URL,且不限制 scheme。2. 内部interpret:方案缺少授权检查interpret:并非系统注册的协议,只存在于 Telegram Desktop 内部。它原本用于官方发布流程:构建脚本写一个纯文本指令文件,再启动客户端,由客户端读取文件并把指定安装包发到发布频道。指令文件大致格式为:
文本
from: 1234567890channel: 1987654321file: path/to/filecaption: ...
from:用于核对当前登录账号,但省略该行即可跳过检查。
channel:指定目标频道或超级群组。
file:指定要读取并上传的本地文件。
处理函数InterpretSendPath直接按路径打开文件并上传,没有对调用者做额外确认。通过前面的 IPC 注入,外部点击的链接就能触发这条内部路径。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论