微软SSO集成中的顺序用户ID身份验证绕过漏洞剖析

news/2025/9/29 16:22:56/文章来源:https://www.cnblogs.com/qife122/p/19119001

身份验证绕过:微软SSO集成中的顺序用户ID漏洞 | 严重漏洞

如果你是渗透测试人员或漏洞赏金猎人,千万不要在测试中跳过SSO。这是那些人人都认为安全的功能之一,但我不断在其中发现严重缺陷。

我决定撰写本文,是因为我已经不止一次遇到同类漏洞,而且令人惊讶的是它依然存在。人们通常认为,一旦应用程序采用单点登录(特别是像微软这样的方案),身份验证就会自动变得安全。但这种假设是危险的。

在最近一次测试中,我发现登录流程表面看起来完美无缺——微软SSO、Authenticator提示,一切就位。但当我深入后端时,整个安全模型就崩溃了。服务器依赖来自客户端的可预测user_id来决定哪个账户处于活跃状态。更改该值,你突然就能以他人身份登录。

漏洞原理

该应用使用微软SSO(Azure AD)进行登录。SSO完成后,应用会颁发与用户邮箱绑定的令牌。

存在一个接受userId的API端点,服务器使用它来设置活跃账户。服务器既不验证userId是否与令牌中的已认证身份对应,也不验证MFA声明。

userId值为顺序且可枚举 → 攻击者可猜测其他用户的id并切换到其账户。

风险分析

  • 如果后端从不检查MFA声明(amr、auth_time),UI中的MFA就毫无意义。Authenticator提示的存在并不保证强制执行
  • 信任客户端提供的标识符是根本性错误。任何来自客户端的内容都必须根据经过验证的服务端声明进行验证
  • 可预测/顺序ID极易枚举,使授权检查变成可选的表演
  • 账户接管是即时发生的。一旦攻击者能在没有服务端检查的情况下更改活跃用户上下文,整个账户就会被入侵

根本原因

  • 后端信任客户端提供的状态:开发者使用来自客户端的userId作为会话/账户选择的真相来源,而不是将会话与已验证的令牌声明(sub)绑定
  • 令牌绑定逻辑薄弱:应用在SSO后颁发令牌,但从未强制执行该令牌与活跃会话之间的严格绑定
  • 加密令牌或令牌验证缺失:即使令牌被加密(JWE)或由可信IdP返回,团队有时也会跳过服务端的适当解密/验证
  • 身份验证与授权混淆:流程将"我有令牌"与"我被允许以该用户身份操作"分离
  • 遗留或匆忙的集成:快速SSO集成、演示代码或遗留路由经常复制粘贴基于id的简单逻辑并暴露给客户端
  • 可预测标识符+缺乏速率限制:使用顺序整数作为公共用户ID使枚举成本低廉

总结

SSO是一个集成方案,而非安全保证。如果你的后端哪怕稍微信任客户端输入,IdP保护就会被绕过。务必验证令牌、在服务器端强制执行MFA,并停止暴露顺序ID。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

content和text方法的区别

使用requests进行网页请求时,对页面内容进行解码和编码的时候,需要用到.content和.text。Requests对象的get和post方法都会返回一个Response对象,这个对象里面存的是服务器返回的所有信息,包括响应头,响应状态码等…

完整教程:从零开始学神经网络——前馈神经网络

完整教程:从零开始学神经网络——前馈神经网络pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

shell脚本动态域名解析阿里云

下面是一个利用Shell脚本调用阿里云DNS API实现动态域名解析(DDNS)的示例。该方案适用于家庭宽带等动态公网IP环境,主要依赖阿里云的域名解析API。 🖥️ 阿里云DDNS Shell脚本示例 #!/bin/bash# 阿里云DDNS动态域…

聪明的wyk

王俞宽是个人物

Windows下进程和账户权限

一、Windows 进程创建的底层流程(六阶段深度解析) 进程创建是用户态 API 触发、内核态资源分配、子系统协同的复杂过程,核心依赖CreateProcess系列函数(实际为宏定义,映射到CreateProcessA/W),具体分为六个阶段…

论状压记忆化搜索

其实非常简单,甚至比递推写法简单 比如P2704,递推做这个比较麻烦,但状压记搜强大 #include<bits/stdc++.h> #include<bits/extc++.h> using namespace std; using namespace __gnu_cxx; using namespac…

做微视频的网站组工网站建设方案

二、学习回归 1. y y y与 f θ ( x ) f_\theta(x) fθ​(x) y y y 是实际数据x对应的值 f θ ( x ) f_\theta(x) fθ​(x)是我们构造出来的函数&#xff0c;例如 f θ ( x ) θ 0 θ 1 x f_\theta(x) \theta_0 \theta_1 x fθ​(x)θ0​θ1​x 所以我们希望这两个越接近&…

Spring Gateway动态路由实现方案 - 详解

Spring Gateway动态路由实现方案 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

postman使用总结 - 详解

postman使用总结 - 详解2025-09-29 16:09 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fon…

Nordic 高性能无线SoC nRF54LM20A,专为低功耗蓝牙与Matter设计

Nordic 宣布推出新一代nRF54L系列超低功耗无线系统级芯片 (SoC)的最新成员nRF54LM20A。nRF54L系列基于Nordic创新的22nm技术平台,不仅简化设计挑战,同时实现了可靠通信、更长的电池寿命和紧凑的产品设计。 Nordic 短…

调用setState 之后发生了什么?

触发状态更新 当你在组件里调用: this.setState({ count: this.state.count + 1 });React 并不会马上修改 this.state,而是 把更新请求放到一个队列中(即所谓的异步/批量更新机制)。 合并新旧状态React 会将你传入…

网站建设考虑哪些因素沈阳妇科医院排名前十名

在线预览|GB/T 41510-2022http://c.gb688.cn/bzgk/gb/showGb?typeonline&hcno696806EC48F4105CEF7479EB32C80C9E 知识点&#xff1a; 安全等级定义&#xff0c;设计寿命&#xff0c;剩余寿命&#xff0c;使用寿命。 标准附录有应力的具体解算演示。

湖北专业网站建设市面价wordpress格子主题

A. Submission Bait&#xff08;博弈&#xff09; 题意&#xff1a;爱丽丝和鲍勃在大小为n的数组a中进行游戏&#xff0c;他们轮流进行运算&#xff0c;爱丽丝先开始&#xff0c;不能运算的一方输&#xff0c;一开始mx0&#xff0c;每次操作&#xff0c;玩家可以选择一个牵引i…

连云港做网站公司建设网站的网站空间

JAVA&#xff1a;线程总结 目录 目录 JAVA&#xff1a;线程总结 JAVA&#xff1a;线程总结 01_多线程(多线程的引入)(了解) 02_多线程(多线程并行和并发的区别)(了解) 03_多线程(Java程序运行原理和JVM的启动是多线程的吗)(了解) 04_多线程(多线程程序实现的方式1)(掌握…

做网站开发 甲方提供资料网站建设特定开发

如果能用python代替Javascript编写基于浏览器的应用&#xff0c;该有多好啊。但是&#xff0c;Javascript是唯一一种能在浏览器里执行的语言(Flash或Silverlight除外)。换个思路&#xff0c;先用Python编写代码&#xff0c;然后在通过编译器转为为Javascript脚本&#xff0c;这…

黄金分割比

不会初中数学…… 定义:将线段分为两部分,满足较大部分(a)与整体(a+b)的比值等于较小部分(b)与较大部分的比值,即 \(\frac{a}{a+b} = \frac{b}{a}(a > b)\)。 \(a^2 = ab + b^2 \Rightarrow \frac{b^2}{a^…

how create rhel8 local repository server

Repository Server ConfigurationMount DVD.iso. Create DVD repo. [BaseOS] name=DVD_BaseOS enabled=1 gpgcheck=0 baseurl=file:///mnt/BaseOS [AppStream] name=DVD_AppStream enabled=1 gpgcheck=0 baseurl=file:…

对称加密和非对称加密原理对比

I will use the web search tool to find detailed explanations about the differences between asymmetric and symmetric encryption, including principles and specific cases. It seems the initial search didn…