打开网易新闻 查看精彩图片

一个Android推送通知库里的隐藏组件,让超过3000万加密钱包用户的私钥和资产数据处于"裸奔"状态。微软安全团队在2025年4月的例行扫描中发现了这个漏洞,但直到11月才彻底封堵——中间这7个月,任何装在用户手机上的恶意应用都能隔着系统沙箱伸手进来。

一个看不见的组件,成了后门

一个看不见的组件,成了后门

EngageSDK是极光推送母公司EngageLab开发的第三方开发工具包,主打推送通知和实时消息功能。开发者把它作为代码依赖集成进App,就像给房子装了个统一的水电接口。

问题出在SDK自动注入的一个叫MTCommonActivity的组件上。这个组件在App编译阶段被悄悄写进最终的Android清单文件,不会出现在开发者的原始代码里。大多数开发者根本不知道自己的App里多了这么个东西,自然也不会去审查它的权限配置。

MTCommonActivity被默认设置为"导出"状态——这是Android系统的一个权限标记,意味着设备上任何其他应用都可以向它发送消息。在正常的SDK设计里,这种导出组件应该严格限制接收内容的范围,但EngageSDK没有这么做。

微软Defender安全研究团队的技术分析指出,这个组件成了突破Android安全沙箱的跳板。攻击者构造一个特定的意图(intent,Android应用间通信的消息载体),就能让目标应用执行本不该执行的操作,同时披着合法应用的外衣。

加密钱包的特殊性让这个问题变得致命。与普通App不同,钱包应用管理着真实的私钥和链上资产。一旦沙箱被穿透,恶意应用可以诱导钱包进行未经授权的签名操作,或者窃取助记词等敏感数据。这不是隐私泄露,是直接的钱包失窃。

5000万安装量的连锁反应

5000万安装量的连锁反应

EngageSDK的客户名单覆盖了大量金融和工具类应用。微软团队确认,仅加密钱包类应用的安装量就超过3000万,加上其他使用同款SDK的应用,总暴露规模突破5000万。

这种"供应链式"漏洞的破坏逻辑值得拆解:开发者信任EngageLab的专业性,EngageLab的代码又信任Android系统的默认配置,而系统默认配置在这个场景下恰好是危险的。风险沿着依赖链条层层传导,最终由终端用户承担全部后果。

Google Play在确认漏洞影响范围后,下架了所有运行问题版本SDK的应用。微软在报告中特别说明,截至分析完成时,没有发现该漏洞被实际利用的攻击证据。但这更像是一次幸运的提前发现,而非系统性的防护生效。

时间线呈现了典型的漏洞响应节奏:2025年4月微软发现漏洞并报告给EngageLab,5月升级至Android安全团队,11月3日EngageLab发布5.2.1版本修复——将MTCommonActivity改为非导出状态。从发现到修复,窗口期长达7个月。

意图重定向:被低估的攻击面

意图重定向:被低估的攻击面

这次漏洞的技术本质叫"意图重定向"(intent redirection),是Android生态里一种经典但常被忽视的攻防领域。

简单类比:意图是Android应用之间的"快递包裹",包含发件人、收件人和具体指令。正常情况下,应用A给应用B发包裹,系统会检查B是否愿意接收、A是否有权限发送。但如果应用B有个"门卫"(导出组件)疏于检查,攻击者就能伪造A的身份,让B执行危险操作。

EngageSDK的MTCommonActivity就是这样一个不设防的门卫。它接收外部意图后,没有充分验证来源和内容,就直接转交给应用内部的其他组件处理。攻击者利用这个信任链条,可以触发本需要特殊权限才能执行的功能。

微软团队的技术文档披露了一个关键细节:漏洞利用不需要root权限,也不需要用户主动安装恶意应用。只要设备上存在任何一款带有广告SDK或流氓软件的应用,就能向同设备的加密钱包发起攻击。这种"旁路攻击"绕过了用户对钱包应用本身的安全预期。

EngageLab的修复方案在技术上很直接——把组件标记为android:exported="false",切断外部访问路径。但更值得追问的是,为什么这个组件在最初设计时被设为导出状态?是功能需求使然,还是开发者对Android权限模型的理解存在盲区?

SDK供应链的信任危机

SDK供应链的信任危机

这不是EngageLab第一次陷入安全争议。作为极光推送的海外品牌,EngageLab服务着大量出海应用,其SDK被集成进工具、社交、金融等多个品类。第三方SDK的"黑箱"特性,让应用开发者很难审计其完整行为。

一个讽刺的对比:应用开发者为了通过Google Play的安全审核,会投入大量精力加固自己的代码,却对引入的第三方库保持盲目信任。MTCommonActivity在编译阶段自动注入的特性,更是把这种信任推向了极致——开发者甚至不知道自己交付的包里多了什么。

微软选择通过协调漏洞披露(CVD)流程处理此事,而非公开曝光,给了EngageLab足够的修复窗口。但这种行业默契也带来一个悬而未决的问题:在漏洞公开前,是否有其他安全团队或攻击者独立发现了同一问题?5000万安装量的暴露规模,是否曾被某些组织纳入武器库?

加密钱包用户的安全习惯也在被重新审视。多数人认为只要不下载来路不明的应用、不点击钓鱼链接就能守住资产,但EngageSDK事件揭示了一种更隐蔽的威胁模型——你信任的钱包应用本身没有问题,问题藏在它依赖的某个推送通知库里。

EngageLab在修复公告中感谢了微软的安全研究,但没有解释为何修复周期长达7个月,也没有披露是否对受影响客户进行了主动通知。对于那3000万钱包用户而言,他们很可能从未收到任何安全提示,只是某天发现自己的应用自动更新了版本。

当加密资产的自我托管成为行业叙事的主流,这类供应链漏洞的打击面正在扩大。用户被教育要掌握私钥、警惕钓鱼,却很少有人提醒他们:你手机上的20个应用可能共享着同一个有缺陷的代码库,而它们之间的沙箱隔离,可能比你想象的更脆弱。

Google Play的下架动作清理了已知的风险版本,但Android生态的碎片化意味着大量侧载应用和第三方商店渠道仍在运行旧代码。那些从官网直接下载APK的硬核用户,反而成了最缺乏保护的人群。

微软安全团队在最后的技术总结中留下了一个开放式观察:意图重定向类漏洞的检测难度正在上升,因为现代SDK越来越倾向于动态注册组件,而非静态声明。EngageSDK的MTCommonActivity是静态注入的,尚且花了数月才被发现——如果是完全运行时生成的组件,安全研究的覆盖成本会更高。

下一次,当某个推送通知库再次请求更新权限时,用户是否该多问一句:这次更新里,又悄悄添加了什么我看不见的组件?