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(概念验证),攻击过程极其简洁:
- 攻击者开发一款普通的Android应用(可以是任何类型——游戏、工具、壁纸等),将其上传到Google Play或通过其他方式安装到目标设备上
- 受害者正常使用手机,安装并打开这款应用
- 应用在后台调用Microsoft的令牌接口,由于调试模式跳过了验证,直接获得当前登录用户的FOCI令牌
- 攻击者利用获取的令牌,以受害者身份执行任何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设备的企业安全团队,建议采取以下措施:
- 通过MDM推送更新:强制所有设备更新Microsoft 365应用到最新版本
- 确认版本号:确保设备上的Word版本号不低于16.0.19822.20190
- 强制重新认证:对于在旧版本上运行过Microsoft 365的设备,要求用户重新登录以刷新令牌
- 应用白名单:通过MDM限制设备上可安装的应用,减少恶意应用的存在空间
- 日志审计:检查过去几个月的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)技术团队出品,关注我们获取更多网络安全深度分析。