结论:疑似攻击者通过利用错误MIME type实现客户端欺骗。
涉及Telegram中的两个API功能——
- (String)传递一个文件 ID(以字符串形式)来发送存储在 Telegram 服务器上的视频(推荐做法)
- (String/InputFile)传递一个 HTTP URL(以字符串形式)以便 Telegram 从互联网获取视频
- (InputFile)使用 multipart/form-data 上传一个新视频。
问题出在第二种,InputFile - Sending by URL时,目标资源可以拥有一个自定义的MIME标签,以指示其他Telegram客户端应该以什么方式加载这个资源。
而这些不怀好意的
响应标头:>图1<
请求方json:
另外,Telegram Desktop的影片播放方式决定了Telegram Desktop将会把这些较小的视讯资源放置在本地下载目录,然后通过“执行”的方式来加载本地影片至内嵌播放器,这也就是为什么在用户点击这些“假影片”后会自动执行攻击者编写的代码。
涉及Telegram中的两个API功能——
sendVideo
和InputFile
。sendVideo
中的video
字段支持两种输入方式,“InputFile or String”,- (String)传递一个文件 ID(以字符串形式)来发送存储在 Telegram 服务器上的视频(推荐做法)
- (String/InputFile)传递一个 HTTP URL(以字符串形式)以便 Telegram 从互联网获取视频
- (InputFile)使用 multipart/form-data 上传一个新视频。
问题出在第二种,InputFile - Sending by URL时,目标资源可以拥有一个自定义的MIME标签,以指示其他Telegram客户端应该以什么方式加载这个资源。
而这些不怀好意的
.pyzw
文件,(可能由于漏洞)在这里都被指定为了video/mp4
,导致其他Telegram客户端将以播放器模式展示这个文件。响应标头:>图1<
请求方json:
{
"dcId": number,
"location": {
"_": "inputDocumentFileLocation",
"id": "*",
"access_hash": "*",
"file_reference": [
*, *, *, *
]
},
"size": 42,
"mimeType": "video/mp4",
"fileName": "***.pyzw"
}
另外,Telegram Desktop的影片播放方式决定了Telegram Desktop将会把这些较小的视讯资源放置在本地下载目录,然后通过“执行”的方式来加载本地影片至内嵌播放器,这也就是为什么在用户点击这些“假影片”后会自动执行攻击者编写的代码。