本文仅增加了中文对照翻译,原始来源地址为:
https://palant.info/2024/03/06/numerous-vulnerabilities-in-xunlei-accelerator-application/?continueFlag=b356b9302d211d309327b91395f5b9e4
迅雷加速器(迅雷客户端)又名迅雷雷霆,由总部位于中国的迅雷有限公司开发,是一款广受欢迎的应用程序。根据该公司的年度报告,2022 年 12 月统计了 5110 万活跃用户。该公司的 Google Chrome 扩展迅雷下载支持,虽然不是使用该应用程序的强制性要求,但在撰写本文时拥有 2800 万用户。
我发现这个应用程序暴露了一个巨大的攻击面。应用程序用户碰巧正在访问的任意网站在很大程度上可以访问此攻击面。其中一些也可以从同一网络中的其他计算机访问,或者由能够拦截用户网络连接的攻击者访问(中间人攻击)。
在此应用程序的设计中似乎没有考虑安全问题。大量的内部接口在没有充分保护的情况下暴露出来。一些现有的安全机制被禁用。该应用程序还包含大量第三方代码,这些代码似乎没有收到任何安全更新。
我向迅雷报告了许多漏洞,其中大部分允许远程执行代码。尽管如此,考虑到攻击面的大小,我感觉我几乎没有触及表面。
迅雷上一次做安全新闻,是因为分发了一个恶意软件组件。那时候是内部工作,有的员工胭脂。但是,该应用程序的缺陷允许从该应用程序的用户碰巧访问的任何网站轻松实现相同的效果。
内容
什么是迅雷加速器?
内置 Web 浏览器
基于 Chromium 的自定义浏览器的麻烦
已禁用保护
包括审查制度
原生 API
进入迅雷浏览器
修复
主要应用
过时的 Electron framework
跨站脚本漏洞
在渲染器进程中执行任意代码的影响
(缺少)修复
XLLite 应用程序
应用概述
“泛身份验证”
通过插件安装实现代码执行
修复
插件管理
怪异之处
示例方案:XLServicePlatform
(缺少?)修复
过时的组件
报告问题
什么是迅雷加速器?
维基百科将迅雷有限公司的主要产品列为 Bittorrent 客户端,也许十年前确实如此。然而,今天很难描述这个应用程序的作用。是下载管理器吗?网络浏览器?云存储服务?多媒体客户端?游戏平台?它似乎是所有这些东西,甚至更多。
将迅雷视为一个广告平台可能更容易。这是一个应用程序,其目标是通过显示广告和销售订阅来最大化利润。因此,它需要尽可能长时间地将用户留在平台上。这就是为什么它试图实现用户可能需要的每一项功能,当然也不是特别擅长其中任何一个。
因此,有一个经典的下载管理器可以劫持浏览器中启动的下载,并承诺加快速度。还有一个基本的网络浏览器(实际上是两个截然不同的网络浏览器),因此您无需返回常规网络浏览器。您可以在内置媒体播放器中播放正在下载的任何内容,也可以将其上传到内置存储。我有没有提到游戏?是的,也有游戏,只是为了让你忙得不可开交。
总而言之,这是众多应用程序的集合,这些应用程序使用各种不同的技术构建,通常为同一目标实现竞争机制,但努力保持单个应用程序的外观。
内置 Web 浏览器
基于 Chromium 的自定义浏览器的麻烦
公司喜欢推出自己的网络浏览器。原因不在于他们的浏览器比市场上已有的其他 812 浏览器更好。相反,网络浏览器可以通过您的搜索获利(如果您不那么幸运,还可以通过您的浏览历史记录获利),这是一项非常有利可图的业务。
显然,如果公司尽可能少地投入维护精力,那么定制浏览器的利润会更高。因此,他们采用了开源的 Chromium,在上面打上了自己的品牌,也许还有一些半心半意的功能,然后他们就收工了。
麻烦的是:浏览器具有巨大的攻击面,根据定义,该攻击面暴露在任意网页(和广告网络)中。像 Mozilla 或 Google 这样的公司投入了大量资源来快速堵塞漏洞,并每六周发布一次更新。而且,基于 Chromium 的自定义浏览器也需要每六周更新一次,否则它将使用户暴露于已知的(并且经常被广泛利用的)漏洞。
即使只是跟上 Chromium 的开发也很困难,这就是为什么它几乎从未发生过。事实上,当我查看 Xunlei 应用程序内置的未命名 Web 浏览器(内部名称:TBC)时,它基于 Chromium 83.0.4103.106。这个特定的浏览器版本于 2020 年 5 月发布,当时已经有三年半的历史了。供参考:仅在 2023 年,谷歌就修复了 Chromium 中八个被积极利用的零日漏洞。
除其他外,该浏览器被证明容易受到 CVE-2021-38003 的攻击。本文解释了此漏洞如何允许任何网站上的 JavaScript 代码获得对原始内存的读 / 写访问权限。我可以在迅雷浏览器中重现这个问题。
已禁用保护
很难说在这个浏览器中没有弹出窗口阻止程序是一个故意的选择,还是仅仅是因为浏览器太基础了。无论哪种方式,网站都可以自由打开任意数量的标签。但是,添加 --autoplay-policy=no-user-gesture-required 命令行标志肯定是故意发生的,关闭了视频自动播放保护。
同样值得注意的是,迅雷在他们的浏览器中恢复了 Flash Player。2020 年 12 月,由于各种原因(包括安全性),所有浏览器都禁用了对 Flash Player 的支持。迅雷不仅决定忽略这个推理,他们还随浏览器一起发布了 Flash Player 29.0.0.140(2018 年 4 月发布)。Adobe 支持网站列出了 2018 年 4 月之后和支持终止前发布的大量 Flash Player 安全修复程序。
包括审查制度
有趣的是,迅雷浏览器不允许用户访问该网站 example.com (而不是 example.net )。当您尝试时,浏览器会将您重定向到 static.xbase.cloud 上的页面。这是一个异步过程,因此您很有可能首先瞥见原始页面。
文本的自动翻译:“此网页包含非法或非法内容,访问已停止。”
事实证明,该应用程序会将您访问的每个网站发送到 api-shoulei-ssl.xunlei.com . 该终结点将接受您选择的导航目标,或指示将您重定向到其他地址。因此,何时导航到 example.com 将发送以下请求:
POST /xlppc.blacklist.api/v1/check HTTP/1.1
Content-Length: 29
Content-Type: application/json
Host: api-shoulei-ssl.xunlei.com
{"url":"http://example.com/"}
服务器响应:
{
"code": 200,
"msg": "ok",
"data": {
"host": "example.com",
"redirect": "https://static.xbase.cloud/file/2rvk4e3gkdnl7u1kl0k/xappnotfound/#/unreach",
"result": "reject"
}
}
有趣的是,给它地址 http://example.com./ (注意尾随点)将导致响应 {"code":403,"msg":"params error","data"} 。由于端点无法处理此地址,浏览器将允许您访问它。
原生 API
有趣的是,迅雷浏览器向所有网页公开 window.native.CallNativeFunction () 了方法。调用将被转发到主应用程序,任何插件都可以在其中注册其本机函数处理程序。当我检查时,有 179 个这样的处理程序注册,尽管这个数字可能因活动插件而异。
公开的功能包括 ShellOpen (使用 Windows shell API 打开文件)、 QuerySqlite (查询包含下载任务的数据库)、 SetProxy (配置用于所有下载的代理服务器)或 GetRecentHistorys (检索迅雷浏览器的浏览历史记录)。
我的概念验证漏洞将运行以下代码:
native.CallNativeFunction("ShellOpen", "c:\windows\system32\calc.exe");
这将打开 Windows 计算器,正如您所期望的那样。
现在,这个 API 从来都不是要向所有网站公开的,而只是要向少数几个非常 “受信任” 的网站公开。此处的允许列表是:
[
".xunlei.com",
"h5-pccloud.onethingpcs.com",
"h5-pccloud.test.onethingpcs.com",
"h5-pciaas.onethingpcs.com",
"h5-pccloud.onethingcloud.com",
"h5-pccloud-test.onethingcloud.com",
"h5-pcxl.hiveshared.com"
]
以下是访问的验证方式:
function isUrlInDomains(url, allowlist, frameUrl) {
let result = false;
for (let index = 0; index < allowlist.length; ++index) {
if (url.includes(allowlist[index]) || frameUrl && frameUrl.includes(allowlist[index])) {
result = true;
break;
}
}
return result;
}
您可能已经注意到,这实际上不会根据列表验证主机名,而是在整个地址中查找子字符串匹配项。因此 https://malicious.com/?www.xunlei.com 也被认为是一个受信任的地址,允许对这种 “保护” 进行微不足道的规避。
进入迅雷浏览器
现在,大多数用户希望不会使用迅雷进行常规浏览。这些应该是安全的,对吧?
很遗憾没有,因为网页有多种方法可以打开迅雷浏览器。最简单的方法是使用特殊 thunderx:// 地址。例如, thunderx://eyJvcHQiOiJ3ZWI6b3BlbiIsInBhcmFtcyI6eyJ1cmwiOiJodHRwczovL2V4YW1wbGUuY29tLyJ9fQ== 将打开迅雷浏览器并加载 https://example.com/ 到其中。然而,从攻击者的角度来看,这种方法有一个缺点:现代浏览器在允许外部应用程序处理地址之前会要求用户进行确认。
但是,还有其他选择。例如,迅雷浏览器扩展程序(根据 Chrome 网上应用店的数据,有 2800 万用户)旨在将下载内容传递给迅雷应用程序。然而,它可以在没有任何用户交互的情况下传递 thunderx:// 链接,这些链接会立即在迅雷浏览器中打开任意网页。
XLLite 应用程序的 API 公开了实现此目的的更多方法,稍后将介绍。这甚至可能还没有结束。
修复
虽然迅雷从未向我传达过这些问题的任何解决方案,但从迅雷加速器 12.0.8.2392(根据可执行签名判断,于 2024 年 2 月 2 日构建)开始,已经实施了几项更改。首先,该应用程序不再打包 Flash Player。如果 Flash Player 安装在用户的系统上,它仍会激活它,因此某些用户仍会暴露。但是,这个 Flash Player 安装很有可能至少是最新的(就像软件在停产三年后可以是 “最新的” 一样)。
isUrlInDomains () 函数已被重写,当前逻辑显得合理。它现在只会根据主机名的末尾检查允许列表,不接受地址中其他地方的匹配项。因此,现在 “仅” 保留所有 xunlei.com 域可以访问应用程序的内部 API。此域上任何位置的任何跨站点脚本漏洞都将再次使用户面临风险。
过时的 Chromium 基础似乎保持不变。它仍然报告为 Chromium 83.0.4103.106,并且对 CVE-2021-38003 的利用仍然成功。
浏览器扩展迅雷下载支持也于 2024 年 1 月 3 日收到了更新,版本为 3.48。根据自动翻译,此版本的更新日志条目为:“修复了一些已知问题。” 该修复程序似乎为 event.isTrusted 属性添加了一堆检查,确保扩展不再那么容易地检测。鉴于这些限制,现在直接打开 thunderx:// 地址可能有更高的成功机会,尤其是当与社会工程相结合时。
主要应用
过时的 Electron framework
迅雷的主要应用程序基于 Electron 框架。这意味着它的用户界面是用 HTML 编写的,并通过 Chromium Web 浏览器(渲染器进程)显示。在这里,再次令人担忧的是,使用的 Electron 版本是 83.0.4103.122(于 2020 年 6 月发布)。可以预期,它将与类似的旧 Chromium 浏览器共享大部分安全漏洞。
当然,像这样的应用程序应该比 Web 浏览器暴露得更少,因为它不会只加载任何网站。但它确实适用于远程网站,因此它处理 Web 内容的方式存在漏洞是一个问题。
跨站脚本漏洞
由于基于 HTML,Xunlei 应用程序可能容易受到跨站脚本漏洞的影响。在大多数情况下,这可以通过使用 React 框架来缓解。React 通常不能处理原始 HTML 代码,因此这里没有潜在的漏洞。
嗯,通常。除非 dangerouslySetInnerHTML 属性正在使用,这通常应该避免。但似乎迅雷开发人员在一些地方使用了这个属性,现在他们有代码显示这样的消息:
$createElement("div", {
staticClass: "xly-dialog-prompt__text",
domProps: { innerHTML: this._s(this.options.content) }
})
如果消息内容恰好是一些恶意数据,它可能会创建 HTML 元素,从而导致执行任意 JavaScript 代码。
恶意数据将如何最终到达这里?最简单的方法是通过浏览器。例如, MessageBoxConfirm 本机函数可以这样调用:
native.CallNativeFunction("MessageBoxConfirm", JSON.stringify({
title: "Hi",
content: <img src="x" onerror="alert(location.href)">
,
type: "info",
okText: "Ok",
cancelVisible: false
}));
当在迅雷浏览器中的 “受信任” 网站上执行时,这将使主应用程序显示一条消息,并且作为副作用,运行 JavaScript 代码 alert (location.href)。
在渲染器进程中执行任意代码的影响
Electron 通常对渲染器进程进行沙箱处理,确保这些进程只有有限的权限,并且漏洞更难被利用。此安全机制在迅雷应用程序中处于活动状态。
然而,迅雷的开发者一定在某个时候认为它有一定的局限性。毕竟,他们的用户界面需要执行大量操作。为每个此类操作提供受限接口太费力了。
因此,他们在应用程序中构建了一个通用接口。通过像 AR_BROWSER_REQUIRE 或 AR_BROWSER_MEMBER_GET 这样的消息,渲染器进程可以指示应用程序的主(特权)进程执行任何操作。
我的概念验证漏洞通过加载 Electron 的 shell 模块(沙盒渲染器无法通过常规方式访问)并调用其方法之一,成功地滥用了这个接口。换句话说,迅雷应用程序设法使这个安全边界完全无用。
(缺少)修复
查看迅雷加速器 12.0.8.2392,我无法识别出这方面的任何改进。该应用程序仍然基于 Electron 83.0.4103.122。消息呈现代码中潜在 XSS 漏洞的数量也没有变化。
看来,迅雷在确定触发具有任意内容的消息变得更加困难后就结束了一天。然而,我怀疑这是不可能的。
XLLite 应用程序
应用概述
XLLite 应用程序是在 Xunlei 框架内运行的插件之一。鉴于我从未创建迅雷帐户来查看此应用程序的运行情况,因此我对其预期功能的理解是有限的。然而,它的目的似乎是将迅雷云存储集成到主应用程序中。
由于它不能直接修改主应用程序的用户界面,因此它会在 10500 和 10599 之间随机选择的端口上将自己的用户界面公开为本地 Web 服务器。该服务器实质上提供嵌入在应用程序中的静态文件,所有功能都是在客户端 JavaScript 中实现的。
特权操作由在端口 21603 上运行的单独本地服务器提供。此处公开的一些 API 调用由应用程序直接处理,其他 API 调用则通过另一个本地服务器转发到主应用程序。
我最初对 Web 界面如何访问 API 服务器感到困惑,后者未能正确实现 CORS—— OPTION 请求没有得到正确的响应,因此只有基本请求成功。迅雷开发人员似乎没有设法解决这个问题,而是求助于在用户界面服务器上代理 API 服务器。因此,API 服务器上可用的任何端点也由用户界面服务器公开,在这里正确(但似乎没有必要)使用 CORS 允许从任何地方进行访问。
所以通信的工作原理是这样的:迅雷应用程序在一个帧中加载 http://127.0.0.1:105xx/ 。然后,该页面在自己的端口上请求一些 API,例如 http://127.0.0.1:105xx/device/now . 处理请求时,XLLite 应用程序在内部请求 http://127.0.0.1:21603/device/now 。同一进程中的 API 服务器处理程序使用当前时间戳进行响应。
这种方法似乎没有多大意义。但是,据我所知,迅雷也生产可以安装在本地网络上的存储设备。据推测,这些设备运行相同的代码来公开 API 服务器。这也可以解释为什么 API 服务器向网络公开,而不是仅是本地主机服务器。
“泛身份验证”
由于相当多的 API 调用可能会造成严重损害或至少暴露私人信息,因此需要以某种方式保护这些调用。如上所述,迅雷开发者选择不使用 CORS 来限制访问,而是决定将 API 暴露给所有网站。相反,他们实现了自己的 “泛身份验证” 机制。
他们生成身份验证令牌的方法是获取当前时间戳,将其与长静态字符串(在应用程序中硬编码)连接起来,并使用 MD5 对结果进行哈希处理。此类令牌将在 5 分钟后过期,显然是为了阻止重放攻击。
他们甚至执行时间同步,确保纠正网页(在用户计算机上运行)和 API 服务器(在用户计算机上运行)感知到的当前时间之间的偏差。同样,如果 API 服务器在某些情况下可以在网络上的其他地方运行,这可能是有意义的。
毋庸置疑,这种 “身份验证” 机制除了非常基本的混淆之外,不会提供任何价值。
通过插件安装实现代码执行
这里公开了不少有趣的 API 调用。例如, device/v1/xllite/sign 终结点将使用应用程序中硬编码的三个私有 RSA 密钥中的一个对数据进行签名。我不知道这个功能是做什么用的,但我真诚地希望它尽可能远离安全和隐私主题。
还有 device/v1/call 端点,这是在迅雷浏览器中打开页面的另一种方式。两者都 OnThunderxOpt OpenNewTab 允许这样做,前者采用要处理的 thunderx:// 地址,后者采用要在浏览器中打开的原始页面地址。
很明显,API 公开了对用户云存储的完全访问权限。然而,我选择将注意力集中在端点 drive/v1/app/install 上,它看起来可能会造成更大的伤害。事实上,这个端点被证明是一种安装二进制插件的方法。
除了已经提到的无用的 “泛身份验证” 之外,我找不到任何安全机制来阻止以这种方式安装恶意软件。但是,我找不到任何实际的插件作为示例。最后,我发现插件必须打包在包含如下 manifest.yaml 文件的存档中:
ID: Exploit
Title: My exploit
Description: This is an exploit
Version: 1.0.0
System:
- OS: windows
ARCH: 386
Service:
ExecStart: Exploit.exe
ExecStop: Exploit.exe
插件将成功安装, Thunder\Profiles\XLLite\plugin\Exploit\1.0.1\Exploit 但由于某种原因,二进制文件无法执行。也许我错过了一种安全机制,或者插件界面根本无法正常工作。
无论哪种方式,我都开始思考:如果不是让 XLLite 运行我的 “插件”,而是替换现有的二进制文件会怎样?生成具有 . ......\oops.exe 但是,这里使用的 Go 包存档器可以防止此类路径遍历攻击。
另一方面,决定将插件放入哪个文件夹的 XLLite 代码没有任何此类保护。文件夹由插件清单的 ID 和 Version 值确定。弄乱前者很不方便,它在路径中出现两次。但是将 “版本” 设置为类似 ...... 的东西达到了预期的结果。
两种并发症:
要替换的应用程序无法运行,否则 Windows 文件锁定机制将阻止其被替换。
插件安装只会替换整个文件夹。
最后,我选择用迅雷的媒体播放器来代替我的概念验证。这个通常不会运行,它包含在自己的文件夹中。使用 thunderx:// 链接让 Xunlei 运行媒体播放器也相当容易。看,在没有任何用户交互的情况下安装和执行恶意应用程序。
请记住,API 服务器向本地网络公开,这意味着网络上的任何设备也可以执行 API 调用。因此,这种攻击不仅可以从用户碰巧访问的任何网站执行,还可以由同一网络上的某个人发起,例如,当用户连接到公共 WiFi 时。
修复
从 XLLite 插件的 3.19.4 版本(根据其数字签名于 2024 年 1 月 25 日构建)开始,“泛身份验证” 方法更改为使用 JSON Web 令牌。身份验证令牌嵌入在用户界面服务器的主页中。如果不为此页面生成任何 CORS 标头,则其他网页无法提取令牌。
目前尚不清楚使用什么秘密来生成令牌。但是,如果重新启动 Xunlei 应用程序,身份验证令牌不会失效。这表示机密不是在应用程序启动时随机生成的。剩下的可能性是:随机生成的密钥存储在系统上的某个地方(正常)或应用程序中混淆的硬编码密钥(非常糟糕)。
虽然在调整身份验证后对其他终结点的调用成功,但对 drive/v1/app/install 终结点的调用现在会导致 “权限被拒绝” 响应。我没有调查端点是否已被禁用或添加了一些额外的安全机制。
插件管理
XLLite 的插件系统实际上只是迅雷应用程序中至少五个完全不同的插件管理系统中的一个。另一个是主应用程序的插件系统,XLLite 应用程序作为这样的插件安装。还有更多,并 XLLiveUpdateAgent.dll 负责保持更新。它将从以下 http://upgrade.xl9.xunlei.com/plugin?os=10.0.22000&pid=21&v=12.0.3.2240&lng=0804 地址下载插件列表,并确保安装了适当的插件。
请注意,这里缺少 TLS 加密,这是非常典型的。部分问题似乎是迅雷决定为他们的下载实现自己的 HTTP 客户端。事实上,他们已经实现了许多不同的 HTTP 客户端,而不是使用 Windows API 提供的任何选项。其中一些 HTTP 客户端非常有限,甚至无法解析不常见的服务器响应,更不用说支持 TLS。其他人支持 TLS,但使用他们自己的 CA 证书列表,这恰好是 Mozilla 从 2016 年开始的列表(是的,这几乎是八年前的)。
另一个常见问题是,几乎所有这些不同的更新机制都作为常规应用程序流程的一部分运行,这意味着它们只有用户的权限。那么他们如何设法写入应用程序目录呢?那么,迅雷解决了这个问题:他们用用户的权限使应用程序目录可写!另一个安全机制被成功拆除。还有一个好处:他们可以将应用程序数据存储在同一个目录中,而不是像 AppData 那样诉诸于每个用户的废话。
总而言之,你最好不要在不受信任的网络上运行迅雷加速器(意思是:其中任何一个?您网络上的任何人或设法将自己插入您和迅雷更新服务器之间的路径的任何人都将能够操纵服务器响应。因此,该应用程序将安装恶意插件,而您甚至不会注意到任何事情。
您最好不要在与其他人共享的计算机上运行迅雷加速器。共享计算机上的任何人都可以向 Xunlei 应用程序添加恶意组件,因此下次运行它时,您的用户帐户将受到威胁。
示例方案:XLServicePlatform
我决定专注于 XLServicePlatform,因为与所有其他插件管理系统不同,这个系统以系统权限运行。这是因为它是一个系统服务,任何已安装的插件都将作为动态库加载到此服务进程中。显然,在这里注入恶意插件会导致整个系统受到损害。
管理服务从 http://plugin.pc.xunlei.com/config/XLServicePlatform_12.0.3.xml 下载插件配置。是的,这里没有 TLS 加密,因为有问题的 “HTTP 客户端” 不支持 TLS。因此,例如,与您在同一 WiFi 网络上的任何人都可以重定向此请求并给您恶意响应。
事实上,那个 HTTP 客户端写得相当糟糕,尽管我没有积极寻找它们,但我还是发现了多个越界读取漏洞。由于意外响应而使服务崩溃是相当容易的。
但不仅如此。XML 响应是使用 libexpat 2.1.0 解析的。由于该版本是在十多年前发布的,因此存在许多已知漏洞,包括许多关键的远程代码执行漏洞。
然而,我通常将二元利用留给其他人。继续高级问题,恶意插件配置将导致下载 DLL 或 EXE 文件,但它不会运行。这里有一个有效的安全机制:这些文件需要颁发给深圳市迅雷网络技术有限公司的有效代码签名。
但它仍然下载。还有我们的老朋友:路径遍历漏洞。选择该插件的文件名 ..\XLBugReport.exe 将覆盖 Xunlei 服务使用的合法 bug 报告器。然后,使用恶意服务器响应使服务崩溃将运行此具有系统权限的特洛伊木马错误报告程序。
我的概念验证漏洞只是在目录中 C:\Windows 创建了一个文件,只是为了证明它以足够的权限运行。但我们在这里谈论的是完整的系统妥协。
(缺少?)修复
在撰写本文时,XLServicePlatform 仍然使用自己的 HTTP 客户端来下载插件,这些插件仍然没有实现 TLS 支持。服务器响应仍使用 libexpat 2.1.0 进行解析。据推测,越界读取和路径遍历漏洞已得到解决,但验证这一点需要的时间比我愿意投入的时间还要多。
应用程序仍将使其目录可写给所有用户。它还将生成许多未加密的 HTTP 请求,包括一些与下载应用程序组件相关的请求。
过时的组件
我已经提到过该浏览器基于过时的 Chromium 版本,主应用程序构建在过时的 Electron 平台之上,并且在整个应用程序中广泛使用了一个十年前的 XML 库。然而,这绝不是它的结束。应用程序打包了许多第三方组件,一般方法似乎是它们都不会更新。
以媒体播放器 XMP 为例,又名 Thunder Video,它是作为应用程序的一部分安装的,可以通过任何网站的 thunderx:// 地址启动。这也是一个基于 Electron 的应用程序,但它基于更旧的 Electron 59.0.3071.115(2017 年 6 月发布)。播放功能似乎是基于迅雷免费提供的 APlayer SDK,供其他应用使用。
现在您可能知道媒体编解码器是极其复杂的软件,以灾难性的安全问题而闻名。这就是为什么 Web 浏览器对它们包含哪些媒体编解码器非常谨慎的原因。然而,APlayer SDK 的媒体编解码器在十多年前就已经停产了,有些甚至很古老,我甚至无法弄清楚最初是谁开发的。有 FFmpeg 2021-06-30(可能是 4.4.4 版本左右的快照),它有数十个已知漏洞。libpng 1.0.56 于 2011 年 7 月发布,受到 7 个已知漏洞的影响。最后但并非最不重要的一点是,zlib 1.2.8-4 于 2015 年发布,受到至少两个严重漏洞的影响。这些只是一些例子。
因此,有一个非常真实的威胁,即迅雷用户可能会通过恶意媒体文件受到损害,要么是因为他们被诱骗使用迅雷的视频播放器打开它,要么是因为网站使用了几种可能的方式之一来自动打开它。
从迅雷加速器 12.0.8.2392 开始,我没有注意到这些组件的任何更新。
报告问题
报告安全漏洞通常是一次冒险,语言障碍并没有让它变得更好。因此,我惊喜地发现迅雷安全响应中心甚至可以通过英语搜索找到,这要归功于网站标题的翻译。
不幸的是,有一个障碍:只有通过微信或 QQ 登录后才能提交漏洞。虽然这些社交网络在中国非常受欢迎,但事实证明,在中国境外创建一个账户几乎是不可能的。我花了太多时间来验证这一点。
就在那时,我仔细查看了一下,发现了页面上列出的电子邮件地址,作为无法登录的人的后备。因此,我在 2023-12-06 和 2023-12-07 总共发送了五份漏洞报告。报告的漏洞数量实际上更高,因为报告通常合并了多个漏洞。报告提到 2024-03-06 为出版截止日期。
一天后,我在 2023-12-08 收到了回复:
非常感谢您提交漏洞。迅雷安全响应中心已收到您的报告。一旦我们成功重现了该漏洞,我们将与您联系。
就像大多数公司一样,他们实际上没有再联系我。我看到我的概念验证页面被访问,所以我认为这些问题正在处理中,没有进一步询问。尽管如此,在 2024 年 2 月 10 日,我还是提醒说,距离出版截止日期只有一个月的时间。我这样做是因为根据我的经验,公司经常会 “忘记” 截止日期(更有可能的是:他们认为我没有认真对待它)。
一周后,我收到了另一封简洁的回复,上面写着:
迅雷安全响应中心已对漏洞进行了验证,但漏洞尚未完全修复。
通信到此结束。我真的不知道 Xunlei 认为修复了什么,以及他们仍然打算做什么。 关于这里的修复,我能说的是什么,都是通过查看当前的软件版本拼凑起来的,可能并不完全正确。
迅雷似乎没有在这次沟通后的一个月内发布任何进一步的更新。但是,鉴于该应用程序及其各种插件系统的性质,我不能完全确定。