跳过内容

MASWE-0076: 带有已知漏洞的依赖项

Beta 版内容

此内容处于 beta 版,仍在积极开发中,因此随时可能发生变化(例如结构、ID、内容、URL 等)。

发送反馈

概述

移动应用通常依赖第三方库、软件开发工具包 (SDK) 或框架(包括社区维护的开源组件和商业供应商提供的闭源产品),以实现功能、简化开发或集成平台服务。

当这些依赖项包含漏洞时,它们比第一方代码中的漏洞更容易被利用,因为这些漏洞(和一些利用方法)通常在公共数据库(如 CVE 列表)中有记录,或通过安全公告可获得。

开发者有责任确保所有依赖项都是安全且最新的,因为它们是应用代码库的一部分,因此扩展了应用的攻击面。谷歌和苹果在其安全最佳实践中都强调了这一点

谷歌的 安全使用 SDK

"如果您的应用中包含 SDK,您有责任确保其第三方代码和实践符合 Google Play 开发者计划政策,并且不会导致您的应用违反政策。"

苹果的 App Store 审核指南

"您有责任确保应用中的所有内容均符合这些指南,包括广告网络、分析服务和第三方 SDK,因此请仔细审查和选择它们。"

在隐私方面,如果依赖项在未经适当同意或透明度的情况下收集或传输用户数据,则可能引入风险。谷歌和苹果都要求应用中使用的第三方 SDK 遵守其隐私政策和指南,以确保用户数据得到安全和透明的处理。开发者有责任确保应用中使用的任何第三方库或 SDK 遵守这些要求,即使这些库本身不在其直接控制之下,即使他们不使用可能违反平台政策的特定代码。

谷歌的 安全使用 SDK

"应用开发者必须将 SDK 在其应用内收集的任何数据视为自己直接收集的数据进行处理。"

苹果的 第三方 SDK 要求

"当您在应用中使用第三方 SDK 时,您对 SDK 包含在您应用中的所有代码负责,并且需要了解其数据收集和使用实践。

有关隐私和数据收集声明的更多信息,请参阅 数据收集声明不充分

影响

在移动应用中使用带有已知漏洞的依赖项可能导致各种安全风险,包括但不限于:

  • 敏感数据泄露:易受攻击的依赖项可能被利用来绕过访问控制或加密保护,这可能导致敏感用户数据(包括凭据、会话令牌和个人身份信息 (PII))的泄露。这可能导致数据泄露,从而产生法律、财务和声誉后果。
  • 执行未经授权的代码或权限升级:嵌入式依赖项中的可利用漏洞可能允许攻击者在应用上下文中执行任意代码(例如,通过代码注入)、升级权限或操纵应用行为。总体影响可能从用户账户的完全泄露、后端服务的滥用或对受保护资源的持久访问不等。业务影响可能很严重,包括财务损失、服务中断和客户信任受损。
  • 不遵守法规和政策:包含带有公开已知 CVE 的依赖项可能违反法规要求(例如 GDPR、HIPAA、PCI-DSS)或平台安全政策(例如 Google Play 或 App Store 指南)。未能更新或修复此类漏洞可能导致应用被拒、罚款或强制披露。

引入方式

  • 直接依赖项:易受攻击的依赖项可以通过手动(复制和链接源文件或二进制文件)或更常见地通过包管理器和构建工具(例如 Gradle、CocoaPods、Swift Package Manager)引入到应用中。这包括第一方和第三方 SDK,并可能涉及静态链接和动态链接库。
  • 传递依赖项:依赖项可以通过应用使用的其他库或 SDK 间接引入。这意味着即使应用不直接包含某个库,如果其依赖项之一包含该库,应用仍可能受到易受攻击的库的影响。
  • 动态加载的依赖项:某些库可能在运行时动态加载,这使得跟踪和管理依赖项变得困难。这可能导致在开发者不知情的情况下使用易受攻击版本的库。
  • 过时的平台安全组件:移动应用可能依赖于平台提供的安全组件,例如加密库或 SSL/TLS 实现。如果这些组件过时或缺乏及时更新,它们可能会将已知漏洞引入应用程序。例如,在 Android 上,负责安全网络通信的系统安全提供程序必须由开发者在应用启动时明确更新。
  • 使用第三方框架:应用程序可能使用第三方应用程序框架(如 Flutter 或 React Native)构建。框架本身以及任何平台特定的绑定都可能包含漏洞。

缓解措施

  • 使用软件物料清单 (SBOM):生成并维护 SBOM,以跟踪所有组件和传递依赖项,确保第三方代码的可见性和可追溯性。有关 SBOM 及其在管理软件依赖项方面的重要性,请参阅 NIST SSDF (NIST SP 800-218) PS.3.2NTIA 软件物料清单 (SBOM) 的最低要素CISA SBOM 类型文档
  • 负责任地更新依赖项:作为安全依赖项管理的一部分,定期监控所有使用的第三方依赖项的安全相关更新(例如,通过在您的 CI/CD 管道中使用软件成分分析 (SCA) 工具和 SBOM)。当更新修复已知漏洞时,应用这些更新,并明确固定版本以防止意外更改并降低供应链攻击的风险。
  • 移除未使用或过时的依赖项:定期审查并删除未使用、旧版或不必要的库,以减少应用的攻击面和依赖项足迹。
  • 使用可信来源:仅包含来自信誉良好来源(例如官方存储库或维护良好的开源项目)的库和 SDK,以最大程度地降低引入恶意或易受攻击代码的风险。

测试

MASTG-TEST-0272: 识别 Android 项目中带有已知漏洞的依赖项 MASTG-TEST-0274: 应用 SBOM 中带有已知漏洞的依赖项 MASTG-TEST-0275: 应用 SBOM 中带有已知漏洞的依赖项 MASTG-TEST-0273: 通过扫描依赖管理器工件识别带有已知漏洞的依赖项