第三次审计结果

我们收到了对官方 Android 客户端应用 + API(3 天)和新前端网络服务器设置(1 天)中新 “index-v2” 工作的审计。在网络服务器设置中没有发现问题,因此本文中的分析涉及 F-Droid 客户端应用。审计由 Radically Open Security 进行,它是 F-Droid 的天然合作伙伴,因为他们同样关注自由软件和开放流程。感谢 NLnet 找到审计员并支付雇用他们的费用。我们提供原始报告以供下载

这篇文章是本着以开诚布公的精神对待每个漏洞风险的技术细节而写的。 我们欢迎进一步审查。有关 F-Droid 的安全实践的更多信息,请参阅有关安全模型的文档。

CLN-002 – XML 解析器可能容易受到 XXE 攻击

  • 漏洞类型:输入验证
  • 威胁等级:高

应用的 XML 解析器实现可能容易受到 XML 外部实体 (XXE) 攻击。

影响

如果 XML 解析器对外部和内部实体没有限制,那么在解析 XML 输入时,这可能会导致任意文件泄露或服务器端请求伪造 (SSRF) 漏洞。

我们的回应

原始索引文件,版本 0 格式,是作为任何存储库的一部分生成的 XML 文件。它可以在 index.xmlindex.jar 的最新签名版本中获得。最新版本的客户端总是会首先尝试 index-v1.jar,这是一种签名的 JSON 格式。如果不可用,客户端将回退到 index.jarindex.jar 也用于“附近”应用交换功能。所有这些 index.jar 文件都必须在解析 XML 之前通过签名验证。

成功利用它需要 a) 攻击者能够让目标添加恶意存储库,或者 b) 攻击者能够获得存储库签名密钥,然后闯入现有存储库的服务器并替换索引文件。例如,恶意行为者可能会尝试通过附近应用交换来攻击某人,因此只能从您信任的人那里获取应用。客户端设置为解析 XML 的方式很容易受到攻击,并且允许成功的攻击者读取 F-Droid 应用可以读取的文件

对于 f-droid.org 和 Guardian Project 存储库,索引文件受到监控,并记录对它们的更改。因此我们可以非常肯定地说,index-v1.jar 从未被删除,而这是利用此漏洞的先决条件。

F-Droid 客户端 v1.15.4 禁用了对 XML 外部实体的所有支持。v1.16-alpha0 完全移除了对 XML 索引的支持,所有与 XML 索引解析和生成相关的代码都被删除了。作为 FFDW-DVD 资助的一部分,我们还将致力于提高添加存储库的安全性。

CLN-005 – 接受易受攻击的 TLS 版本

  • 漏洞类型:不安全配置
  • 威胁等级:高

应用使用的后端域接受过时的 TLS 1.0 和 TLS 1.1 协议。

影响

使用 TLS 1.0 和 1.1 使通信容易受到降级攻击,因为它们使用 SHA-1 哈希来确保交换消息的完整性。握手身份验证也是在 SHA-1 上完成的,这使得攻击者更容易冒充服务器进行中间人攻击。 PCI DSS(支付卡行业数据安全标准)规定自 2018 年 6 月 30 日起不允许再使用 TLS 1.0,并且还强烈建议禁用 1.1,因此这可能会影响合规性。

我们的回应

F-Droid 非常重视尽可能长时间地保持兼容性。这就是我们在网站上启用 TLS 1.0 和 TLS 1.1 的原因。我们相信保持软件更新的人不会增加风险。F-Droid 客户端应用不允许 TLS 1.1 或 1.0 连接。TLS 1.3 提供了良好的降级保护,TLS 1.2 提供的保护较少。过去几年中任何信誉良好的 TLS 实施都很难强制连接使用 TLS 1.0 或 1.1。最近的浏览器版本完全取消了对 TLS 1.0 和 1.1 的支持。这意味着任何通过 TLS 1.0 或 1.1 连接的浏览器或客户端版本实际上都需要它才能运行。运行 Android 1.6 的设备应该能够安装旧版本的 F-Droid,并有一个可用的应用商店。

如果您使用的设备仍然需要使用 TLS 1.0 或 1.1,那么已经有很多众所周知的安全漏洞,因此这个漏洞并不是特别有趣。如果您想测试您的浏览器是否仍然支持 TLS 1.0 或 1.1,请单击下面的链接,看看它们是否给您一条错误消息。

CLN-001 – 使用不安全模式和填充方案的加密算法

  • 漏洞类型:弱密码
  • 威胁等级:低

应用中使用的加密算法使用不安全的模式和填充方案。

影响

如果使用不安全的模式和填充对敏感数据进行加密,可能会导致数据被盗或从加密数据中恢复。

我们的回应

这仅用于签署附近应用交换中使用的应用索引文件,该文件仅适用于本地网络。签名位于动态生成的短期文件中,几乎总是在一对一交互中使用。要利用这一点,必须准备好许多其他部分。此外,破解几秒钟或几分钟前签署的文件的密码需要大量费用,而且可能只会使用大约 10 分钟。通过附近交换收到的任何应用更新仍将受到 APK 签名的全面保护。因此,使用 SHA1 算法仍然是安全的,这是兼容性所必需的。此用例属于“第二原像攻击”的情况,这意味着攻击者无法在数据签名之前影响数据。因此 Git 仍然可以依赖 SHA1。

F-Droid 客户端 v1.15.4 和 v1.16-alpha1 从 RSA/ECB/PKCS1Padding 切换到标准 SHA1withRSA 算法来签署附近 index.jar。在 v1.16-alpha0 中添加的存储库的新 “index-v2” 使用 SHA256withRSA 作为签名算法。官方客户端总是从尝试每个存储库中的最新索引版本开始,v1.16 添加了降级保护,因此已经提供 index-v2 的存储库不能降级到 index-v1。

CLN-003 – 应用中启用了明文流量

  • 漏洞类型:不安全配置
  • 威胁等级:低

应用的基本网络配置允许明文流量。

影响

允许明文流量会影响机密性、真实性和防止篡改。执行中间机器攻击的攻击者可以窃听传输的数据并在不被发现的情况下对其进行修改。

我们的回应

这个用于阻止明文 HTTP 连接的 Android 功能是应用应该使用的一个很好的功能。禁用此功能显然并不理想,但我们不得不这么做以支持本地 HTTP 交换功能,以及过去的 HTTP .onion 地址(现在可能有另一种解决方法)。所以我们采取了额外的措施来强制执行 HTTPS:

此漏洞适用于与 CLN-001 完全相同的上下文:附近应用交换。因此,对于恶意行为者来说,这已经是一个相当有限的环境。这完全不会影响内置的存储库,因为它们被硬编码为 HTTPS。再加上像 f-droid.org 这样良好的网络服务器设置不允许通过纯 HTTP 发送数据。

CLN-004 – 记录了 HTTP 请求 URL

  • 漏洞类型:信息泄露
  • 威胁等级:低

Android 应用 (org.fdroid.fdroid.debug ver. 1.14-alpha3-505-gc8514adb9-debug) 记录 URL。

影响

不建议在 Android 日志中记录敏感信息,因为同一设备上的其他应用可以(在某些情况下)访问此信息。URL 可能包含令牌或其他可能被记录的敏感数据,从而导致该数据泄露给其他应用。

我们的回应

隐私很重要,我们希望确保任何潜在的私人信息不被泄露,即使以更容易调试或服务分析为代价。因此,我们感谢审计员在报告此问题时的关注程度,并已从发布版本的日志记录中删除了这些 URL。

此漏洞不影响操作的安全性。许多 Web 服务将私有标记放在 URL 中,记录这些标记就像泄露明文密码一样。包括 f-droid.org 在内的所有知名存储库都是作为静态网站运行的,因此没有用户帐户。这里的问题是,如果有人得到了“日志”文本,而 Android 中通常是受保护的,并且应用不能再简单地读取文本。一种潜在的泄漏情况是,如果有人安装了敏感应用,然后将其卸载。该应用安装和卸载将列在日志中,如果用户被迫提供该日志或者如果设备被攻击以访问受保护的数据,则这些信息将被获取。

在 v1.16 最终版中 将修复 该问题。

这项工作由 NLnet 在 Tracking the TrackersGuardian ProjectThe Search for Ethical Apps 项目下资助