跳转到主要内容
安全资讯 原创

FlagLeft:一个调试标志如何暴露数十亿Microsoft 365用户

0 0







2026-06-04-FlagLeft一个调试标志如何暴露数十亿Microsoft-365用户


FlagLeft:一个调试标志如何暴露数十亿Microsoft 365用户

本文由点滴安全(www.dripsafe.cn)原创发布

引言

在软件工程中,有一类bug被称为”遗留在生产环境的调试代码”。大多数情况下,它们的影响只是多打印了几行日志或者稍微影响了性能。但在2026年6月被披露的FlagLeft漏洞中,一个留在生产代码中的调试标志setIsDebugMode(true),直接导致数十亿Microsoft 365 Android用户面临账户完全被盗的风险。

任何一款安装在手机上的第三方应用,都可以无需密码、无需登录界面、无需任何用户交互,直接获取用户的Microsoft账户令牌。然后以用户身份阅读邮件、打开文件、浏览日历、发送消息。

这不是科幻电影的剧情,而是真实发生的安全事件。

一、FlagLeft漏洞的技术细节

1.1 单点登录机制

Microsoft 365的Android应用之间共享账户访问权限是有意为之的设计。当你在Word中登录后,不需要再次登录PowerPoint或Excel——这种无缝体验背后是Microsoft的单点登录(SSO)机制。

这个机制的核心是FOCI令牌(Family of Client ID tokens),一种Microsoft专用的刷新令牌。FOCI令牌可以在长时间内反复刷新和使用,产生的流量在日志中看起来完全正常。

账户令牌的交接本应有一个严格的验证流程:检查请求方是否为受信任的Microsoft应用。如果不是,拒绝请求。

1.2 被跳过的安全检查

安全公司Enclave的研究人员Yanir Tsarimi和Ofek Levin发现,这个验证检查在多个Microsoft 365 Android应用中被完全跳过了。

原因仅仅是一行代码:

setIsDebugMode(true)

这个方法调用来自Microsoft的一个共享SDK。当调试模式被设置为true时,应用会跳过对请求方身份的验证——这在开发和测试阶段是合理的,方便调试。但问题是,这行代码被留在了发布给用户的生产版本中。

因为这段代码存在于共享SDK中,同一个漏洞在多个应用中反复出现,形成了”一损俱损”的局面。

1.3 影响的应用

FlagLeft影响以下六款Microsoft 365 Android应用,这些应用的下载量合计达数十亿次:

  • Word(CVE-2026-41101,CVSS 7.1)
  • PowerPoint(CVE-2026-41102,CVSS 7.1)
  • Excel(CVE-2026-42832,CVSS 7.7)
  • Microsoft 365 Copilot(CVE-2026-41100,CVSS 4.4)
  • Microsoft Loop(未分配CVE)
  • OneNote(未分配CVE)

有趣的是,Teams使用的是相同的SDK,但Teams将这个标志设为了false,因此不受影响。Enclave将此解读为一个疏忽——Teams的开发者恰好没有留下这个调试开关,而不是因为安全意识更高。

1.4 攻击过程还原

Enclave构建了一个完整的PoC(概念验证),攻击过程极其简洁:

  1. 攻击者开发一款普通的Android应用(可以是任何类型——游戏、工具、壁纸等),将其上传到Google Play或通过其他方式安装到目标设备上
  2. 受害者正常使用手机,安装并打开这款应用
  3. 应用在后台调用Microsoft的令牌接口,由于调试模式跳过了验证,直接获得当前登录用户的FOCI令牌
  4. 攻击者利用获取的令牌,以受害者身份执行任何Microsoft 365操作

从用户角度完全无感知——没有密码弹窗,没有权限请求,没有任何异常提示。FOCI令牌的刷新和使用的流量在正常日志中完全不可见。

二、为什么这个漏洞特别危险?

2.1 攻击门槛极低

FlagLeft不需要任何高级技术能力。攻击者只需要知道Microsoft SDK的接口,就可以构建一个窃取令牌的应用。与需要利用内存损坏、竞态条件等复杂技术的漏洞相比,FlagLeft的利用几乎是”开箱即用”的。

2.2 隐蔽性极强

由于FOCI令牌的流量看起来完全正常,且不需要用户交互,这个漏洞可以在受害者完全不知情的情况下被利用。令牌可以长期有效,攻击者可以持续访问受害者的Microsoft 365账户。

2.3 影响面极广

Microsoft 365是全球最大的生产力套件之一。根据Microsoft的官方数据,Microsoft 365的付费用户超过4亿,而Android是全球市场份额最大的移动操作系统。两者叠加,受影响的用户基数可能达到数十亿级别。

2.4 企业级风险

对于企业来说,这个漏洞的威胁更加严重:

  • BYOD(自带设备)场景:员工用个人手机安装了Microsoft 365应用,如果手机上还有恶意应用,企业邮件和文档可能被窃取
  • MDM管理的设备:即使通过MDM部署了Microsoft 365,如果员工安装了其他未经审核的应用,同样面临风险
  • 合规风险:如果企业受到数据保护法规的约束(如《个人信息保护法》),这类漏洞可能导致合规违规

三、从软件工程角度看FlagLeft

3.1 调试代码遗留:一个老问题的新面孔

调试代码遗留到生产环境,是一个经典的软件工程问题。从Web应用的debug=True到移动应用的setIsDebugMode(true),这类问题的本质是一样的:

开发环境的安全控制与生产环境不一致。

在开发阶段,开发者为了方便调试会放宽安全限制。当代码从开发走向测试,再从测试走向生产时,这些放宽的限制有时会被遗忘。

3.2 共享SDK的连锁效应

FlagLeft的一个关键放大因素是Microsoft使用了共享SDK。同一个bug通过SDK传播到了六个不同的应用中。这种”一次编写,到处部署”的模式在提高开发效率的同时,也让单个安全缺陷的影响呈几何级数放大。

这不是Microsoft独有的问题。几乎所有大型软件公司都使用共享组件和SDK。Apple的FoundationDB、Google的Guava、Meta的React——这些广泛使用的库如果存在安全问题,其影响面同样是全球性的。

3.3 安全左移的缺失

FlagLeft本应在以下任何一个环节被发现:

  • 代码审查(Code Review)setIsDebugMode(true)应该是一个明显的红旗
  • 静态分析(SAST):现代静态分析工具可以检测到调试标志被硬编码为true的情况
  • 发布前扫描(Pre-release Scan): 在CI/CD流水线中加入对调试标志的自动检测
  • 渗透测试:对令牌交接流程的渗透测试应该能发现验证被跳过

但所有这些环节都失效了。这不仅仅是一个技术问题,更是一个流程问题。

四、修复与防御建议

4.1 个人用户

  • 立即更新:从Google Play更新Word、PowerPoint、Excel、Microsoft 365 Copilot、Loop和OneNote到最新版本
  • 撤销令牌:如果曾在安装了不可信应用的设备上使用过Microsoft 365,建议在Microsoft账户安全页面撤销所有刷新令牌并重新登录
  • 审查应用:检查手机上安装的应用,卸载来源不明的应用

4.2 企业安全团队

对于管理Android设备的企业安全团队,建议采取以下措施:

  1. 通过MDM推送更新:强制所有设备更新Microsoft 365应用到最新版本
  2. 确认版本号:确保设备上的Word版本号不低于16.0.19822.20190
  3. 强制重新认证:对于在旧版本上运行过Microsoft 365的设备,要求用户重新登录以刷新令牌
  4. 应用白名单:通过MDM限制设备上可安装的应用,减少恶意应用的存在空间
  5. 日志审计:检查过去几个月的Microsoft 365访问日志中是否存在异常的令牌使用模式

4.3 对开发团队的启示

FlagLeft对所有软件开发团队都是一个警示。以下是值得纳入开发流程的具体措施:

  • 构建时自动剥离调试标志:在Release构建配置中,通过编译选项或ProGuard规则自动将调试标志设为false
  • CI/CD门禁:在发布流水线中加入自动化检查,如果检测到调试标志为true则阻止发布
  • SDK安全审计:对共享SDK定期进行安全审计,特别关注认证和授权相关的代码路径
  • 双轨环境:确保开发和生产环境的安全控制严格分离,开发便利不能以牺牲生产安全为代价

五、FlagLeft在安全事件图谱中的位置

FlagLeft并不是孤例。近年因调试代码或配置错误导致的安全事件屡见不鲜:

  • 2024年:某云服务商因生产环境遗留调试端口,导致客户数据暴露
  • 2025年:某社交应用的API密钥被硬编码在移动客户端代码中
  • 2026年:就是FlagLeft

这类事件的共同特征是:漏洞不在于算法或加密的强度,而在于基本的安全卫生习惯。 不需要量子计算机来破解加密,只需要一个开发者忘记把调试开关关掉。

这也揭示了一个深层的行业问题:在追求快速迭代和开发效率的同时,安全保障经常被视为”以后再补”的环节。FlagLeft用数十亿用户的真实风险告诉我们,这个”以后”可能永远不会来。

结语

FlagLeft是一个简单到令人尴尬的漏洞——一行代码,六个应用,数十亿用户。它不是什么复杂的零日利用,不是什么国家级行为体的APT攻击,就是一行被遗忘的调试代码。

但正是这种”简单”让它如此危险。它不需要复杂的利用链,不需要特定的系统版本,不需要任何用户交互。只要手机上有一款恶意应用和一款未更新的Microsoft 365应用,攻击就可以发生。

好消息是Microsoft已经修补了这个漏洞。坏消息是,谁也不知道在数以万计的移动应用、SDK和共享组件中,还有多少类似的setIsDebugMode(true)在安静地等待着被发现——或者被利用。

去更新你的Microsoft 365应用吧,趁现在还来得及。


参考来源: – Enclave Blog: FlagLeft – Microsoft 365 Android Forgotten Flag Account Takeover – The Hacker News: Microsoft 365 Android Apps Let Any App Steal Account Tokens via Leftover Debug Flag – Microsoft Security Response Center: CVE-2026-41100, CVE-2026-41101, CVE-2026-41102, CVE-2026-42832


本文由点滴安全(www.dripsafe.cn)技术团队出品,关注我们获取更多网络安全深度分析。