Telegram桌面版:点一个链接被盗号,IPC注入链窃取本地会话
红队安全圈
红队安全圈
红队安全圈
2026年10月9日 20:03
重庆
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
Telegram Desktop 一个分号不转义的小缺陷,串上一个无鉴权的内部协议和默认自动下载,就成了点一个链接被盗号。三个本地文件等于整个账号,这篇把链路拆到每一环。
01 引言
Telegram Desktop 7.2.9 之前版本存在 IPC 记录分隔符注入漏洞(CVE-2026-107181,CVSS 8.1):点击一个链接,攻击者即可窃取本地 tdata 会话密钥并完全接管账号。利用链是两个缺陷叠加——单实例 socket 传输时不转义分号分隔符,加上一个无鉴权的内部 interpret: 协议可以直接读任意文件发到指定频道。攻击全程只需受害者点一次链接,且自动下载帮攻击者把指令文件提前放到了可预测路径上。
02 漏洞速览
漏洞编号CVE-2026-107181
影响产品Telegram Desktop 7.2.9 之前所有版本
漏洞类型IPC 分隔符注入 + 缺失鉴权(CWE-143)
危害等级CVSS 8.1 High
是否在野无在野利用报告,完整利用链已公开
公开 PoC有,已完整复现到账号接管
攻击前提点一个外部链接,Telegram 正在运行
03 漏洞成因
第一层缺陷在单实例机制。tg:// 链接由操作系统交给 Telegram,如果 Telegram 已经在运行,新起的进程会把链接序列化成文本、写到本地 socket 交给老实例处理。格式是自定义的:关键字加参数加分号结尾,比如 OPEN:tg://x?a=1;
问题在于序列化时不转义分号。链接本身带分号(在 URL 参数里完全合法),老实例按分号切割就得到了多条指令——一条链接变成了两条命令。这就是记录分隔符注入,教科书级的序列化边界失守。
第二层缺陷是注入能摸到的东西。解析代码翻出一个内部协议 interpret:,它是 Telegram 官方发版脚本用的:读一个指令文件,把 file: 指定的文件以 caption: 为说明发送到 channel: 指定的频道。这个功能读任意文件、发到任意频道,全程无确认、无鉴权——InterpretSendPath 函数里连调用者身份检查都没有。从命令行调用时有攻击者已在本机的前提所以无害,但注入让它变成了链接可触达的特权动作。危险不在功能本身,在它被暴露给了不可信输入。
04 利用链分析
第一步,攻击者建一个 supergroup 并把受害者拉进去——Telegram 默认隐私设置允许陌生人直接拉群,无需确认。
第二步,往群里发三个指令文件(每个窃取一个目标文件),内容指定接收方为攻击者自己的频道,并省略 from: 行跳过账号校验。关键在于:Telegram 桌面版默认自动下载群里的文件(上限 8MiB),受害者打开群时文件就落盘了,不需要点文件。保存路径完全可预测:用户目录下 Downloads\Telegram Desktop\。
第三步,在群里发一个普通的 https 链接。第四步,受害者点击。Telegram 外部的 https 链接走系统浏览器,攻击者服务器 302 重定向到构造好的 tg:// 链接——注意,tg:// 链接在 Telegram 聊天内点击是进程内处理、不经过 socket,所以必须从外部跳转进来。
第五步,系统拉起新 Telegram 进程,把链接传给运行中的实例。分号切割,注入触发,三条 interpret: 命令依次执行。第六步,三个文件上传到攻击者频道,无任何确认弹窗。
第七步,攻击者用三个文件重建 tdata,启动 Telegram——受害者账号直接打开。
被偷的三件套:key\_datas(盐和加密的 DEK)、D877F783D5D3EF8Cs(MTProto 授权密钥)、maps(索引)。目录名由默认字符串派生,所有安装都一样。Telegram 默认不设本地 passcode,派生密钥的密码是空串,盐就明文存在 key\_datas 里——拿到文件就能解开 DEK,解开 DEK 就能解出会话授权。这三个文件等于账号本身,效果等同网站的会话 cookie 被偷。
05 检测与排查
1. 确认 Telegram Desktop 版本,低于 7.2.9 立即升级。
2. 检查自己拥有的频道和群里有没有来历不明的文件转发——攻击者可能用你的身份继续投毒。
3. 检查会话列表有没有陌生设备的活跃会话,可疑的直接终止。
4. 应急处理:改密码并终止全部其他会话,偷走的 tdata 在会话终止后即失效。
06 修复建议
升级到 7.2.9 或更高版本,这是唯一根治方案。修复提交做了四件事:整个移除 interpret: 协议和 InterpretSendPath 函数;socket 传输时对分隔符做百分号十六进制转义;同一连接出现 OPEN: 时跳过 CMD 和 CTRL 记录;出现非本地 URL 后丢弃本地文件路径。后两条是纵深防御。
升级前的临时缓解(按有效性排序):开启每次下载询问保存位置(切断自动下载,指令文件落不了盘);把谁可以把我拉进群设为仅联系人(拿掉攻击者的文件投递通道);设置本地 passcode 并当成真密码用(文件被偷也解不开会话)。
07 红队视角
这个链的精髓不在任何一个单独的洞,而在组装:分号不转义是小问题,无鉴权的内部协议是历史遗留,自动下载到可预测路径是默认配置——每一环单独看都不严重,串起来就是一键盗号。真实红队工作里,这种缺陷组合拳才是常态,单点扫描工具永远扫不出来。
值得注意的是处置方式:研究者 6 月 25 日通过 ZDI 报告,9 月 16 日官方修复,9 月 17 日发版——但 7.2.9 的更新日志只提了一个渲染修复,没有任何安全公告。这个漏洞 10 月 7 日才拿到 CVE 编号,中间近一个月,全球大量用户在毫无感知的状态下暴露在一键盗号风险里。对用户端,这类 IM 桌面端的升级不能等公告,版本落后就该更。
对防守方的启示:任何把结构化数据序列化后跨信任边界传输的场景(单实例 socket、本地 IPC、深链处理),分隔符转义和接收端鉴权要作为默认审查项。interpret: 这种开发者给自己留的便利功能是绝佳的攻击面放大器,代码审计时对无鉴权的特权内部接口应该零容忍。
08 POC 链接
https://beaksec.github.io/posts/telegram-desktop-one-click-account-takeover/
https://github.com/telegramdesktop/tdesktop/commit/db3405699f8fc3ae28a58d2348b7d13a43c0590a
说明:研究者完整技术分析(含利用链与时间线)与官方修复提交。
如果文章对您有收获,欢迎关注、点赞、推荐、转发。
— END —
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论