Repository navigation
【安全】自动升级未校验发布包签名,建议补充完整性校验 #10305
Firefly0619sec
started this conversation in
General
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
操作系统 / v2rayN / Core 版本
Windows 10 Pro for Workstations 22H2 (Build 19045) / v2rayN 7.25.4 /
预期情况
自动升级在安装前应校验升级包的完整性(项目已为发布物提供 GPG 签名), 确保升级包确实来自官方发布,而非传输环节被替换的内容。
实际情况
自动升级流程只下载 .zip,不下载对应的 .sig,也不做任何签名校验或
哈希比对,直接解压替换程序文件。
项目已为所有发布物提供完整的 GPG 签名(每个平台每个资产都有 .sig,
README 公布了公钥指纹),但自动升级这条路径完全没有使用它。
相关代码位置:
完整说明见下方"额外信息"。
复现方法
不需要攻击步骤即可确认:阅读上述代码位置即可看出自动升级流程
未调用任何签名校验。
修复方向:
验签失败即中止并删除文件(复用现有签名体系即可)
为避免公开可复现的攻击细节,此处不提供构造方式。
如维护者需要,可通过 Telegram 私下联系我。
软件日志
本问题与运行日志无关(问题出在自动升级流程的完整性校验),故不粘贴日志。
需要说明的是:guiLogs 目录下的 Vaccess_*.txt 记录了完整的访问目标,
属个人隐私,不适宜提交到公开 issue。
如需任何具体日志,请在 issue 中说明需要哪一部分,我会单独提供。
内核日志
同上,本问题与内核运行日志无关,为保护隐私不公开。
如需任何具体信息,请在 issue 中说明,我会单独提供。
额外信息
说明
这是一处安全问题,不是功能 bug。我先以 issue 形式提交,原因是:
项目当前没有 SECURITY.md,GitHub 的私有漏洞报告通道未开启,
也没有提供专用联系邮箱,我没有找到可用的私密上报渠道。
如果维护者希望私下处理,可以通过 Telegram 联系我:
Jiaming_Wei为免误会,请确认:我不会主动索要任何凭据、密钥或密码,
也不会要求下载或运行任何东西 —— 完整报告只是文字与代码位置。
在你们确认之前,我不会公开任何可复现的攻击细节。
环境
v2rayN-windows-64.zip问题
项目已经为所有发布物提供了完整的 GPG 签名:每个平台的每个资产
都有对应的
.sig,README 中也公布了公钥指纹,并说明签名用途是防止镜像站、运营商或 CDN 劫持。
但是,应用内的自动升级流程没有使用这套签名机制:
.zip,不下载对应的.sig也就是说,项目已经准备好的完整性保护,在自动升级这条路径上被绕过了。
相关代码位置:
v2rayN/ServiceLib/Services/UpdateService.cs—— 自动升级流程v2rayN/AmazTool/UpgradeApp.cs—— 升级包解压与文件替换v2rayN/AmazTool/Utils.cs—— 解压路径拼接影响
升级包的完整性失去保障。若升级包在传输环节被替换,程序会直接接受并
安装,用户在过程中没有察觉的机会。
README 中说明签名机制的目的正是防止传输环节被劫持,
因此「已提供签名」与「升级时不校验签名」这两者之间存在不一致。
建议的修复方向
自动升级在下载
.zip后,一并下载同名.sig,用项目已公布的公钥验签;验签失败即中止解压并删除文件。
这不需要新建机制,直接复用项目现有的签名体系即可。
解压前对每个条目的最终路径做规范化,校验结果仍位于程序目录之内,
对越界条目(含
..或绝对路径)直接拒绝。对服务端返回的下载地址增加主机名约束。
关于我
我是学生,不常使用 GitHub,回复可能不及时。
报告本身已经写完整 —— 文件位置、代码依据、影响分析与修复建议都在里面。
请不必等我,直接推进修复即可。
如果需要完整报告或需要我测试补丁,在 issue 中说明即可,我会尽力配合。
我确认已更新至最新版本
我确认已查询历史issues
我确认系统版本是受支持的
All reactions