网站首页 > 博客文章 正文
CVE 简要说明
CVE-2023-29357它允许攻击者绕过身份验证并升级权限,是一个影响SharePoint使用的漏洞。由于未正确验证 JWT 令牌的签名,该漏洞存在于 ValidateTokenIssuer 方法内部。
受影响的版本为:小于16.0.10399.20005。
相关公告:
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-29357
- https://www.zerodayinitiative.com/advisories/ZDI-23-882/
解决办法
- 升级到最新版本的SharePoint。
- 启用AMSI集成功能并使用Windows Defender。
具体分析
在SPJsonWebSecurityBaseTokenHandler类中添加MissingAlgorithm枚举,以覆盖传入的令牌缺少算法的情况。
重写ReadToken方法,并调用SPAuthenticationAlgorithmValidator.ValidateAlgorithm。
ValidateAlgorithm继续调用HasValidAlgorithm方法来检查JWT中的alg的值。
ZDI的公告中也描述了该漏洞存在于ValidateTokenIssuer方法中。补丁代码添加了调用SPClaimsUtility.IsEnableOldHashedProofTokenFormat方法的代码段。
调用堆栈到ValidateTokenIssuer:
基于以上信息,可以用该算法制作 JWT 令牌并执行与 JWT 发行者( JWT 令牌 none 值)相关的操作。
为了进行身份验证,SharePoint会从以下两个位置获取令牌: GET param prooftoken/headerX-PROOF_TOKEN和 header Authorization。
该令牌需要具有以下值:
- ver: giá tr? ph?i là hashedprooftoken.
- nbf和exp: JWT 令牌的当前时间值和过期时间
- aud和iss: 是目标受众和发行者的值,这里必须是00000003-0000-0ff1-ce00-000000000000。该值00000003-0000-0ff1-ce00-000000000000代表Office 365 SharePoint Online的应用程序ID,其也可以在本地部署的SharePoint版本中使用。
图片来源:https://learn.microsoft.com/en-us/troubleshoot/azure/active-directory/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications
- realm: 这个值通过向API发送Authorization中的令牌值的请求,其会泄露该值。
在尝试使用上述格式发送JWT后,SharePoint识别出当前用户是“SharePoint App”。
虽然用户已经成功认证SharePoint App,但该漏洞的目的是我们需要冒充farmadmin账户。使用/_api/web/siteusers端点列出当前站点上具有权限的用户。
为了模拟其他账户,我们需要修改proof token中的nameid字段.此时,我们的proof token如下所示:
在使用新令牌进行请求后,进程报错Specified method is not supported。
进行调试找出原因,异常在SPApplicationPrincipalName.CreateFromString方法中显现。
主要原因是我们当前的值applicationPrincipleName没有@字符,因此无法拆分成长度为2的数组。
根据堆栈跟踪定位到SPApplicationPrincipalName.CreateFromString方法
从堆栈跟踪向上追溯一点,SharePoint会检查SPAppRequestContext.Current是否有效,如果有效,则调用SPAppRequestContext.Current.ClientId ? SPApplicationPrincipalName.CreateFromString,如上面的堆栈跟踪截图所示。
因此,只需要将SPAppRequestContext.Current的值设置为null,就不会再调用ClientId了。
经过一段时间的调试,我发现SPAppRequestContext.InitCurrent方法负责给SPAppRequestContext.Current赋值。其中调用了SPApplicationRequestHelper.IsApplicationRequest方法来检查发送的请求是否是“应用程序请求”。
该方法如下:
在这里,我们只需要关注spincomingOAuthIdentityType两个常量SPIncomingOAuthIdentityType.UserAndApplication和SPIncomingOAuthIdentityType.ApplicationOnly进行比较。只要我们的请求不符合这两个条件,SPAppRequestContext.Current就是null。
为了使spincomingOAuthIdentityType不等于上述两个值,我们需要关注SPIncomingTokenContext.SetIdentityType方法。该方法通过我们发送的proof token来确定我们的token是用户还是应用程序。
经过一段时间的调试,我们发现当我的proof token中的isuser字段的值为true时,可以将claimsIdentity.Actor的值设置为null,从而不进入if语句的内部代码块。
然后,程序继续执行到下面的SPIncomingTokenContext.IsProofToken方法,该方法检查proof token中的tt字段,如果该字段不存在,则跳过并返回false。
因此,我们成功将IdentityType设置为UserOnly而不是UserAndApplication或ApplicationOnly。
此时,SPApplicationRequestHelper.IsApplicationRequest的返回值为false,app请求上下文设置为null。
至此认证已经成功。
目前的proof token是:
在使用新的令牌重新尝试后,结果如下:
成功模拟farmadmin账户后,我们可以继续利用CVE-2023-24955来RCE,这个漏洞我会在下一篇博文中写到。
翻译自:https://sec.vnpt.vn/2023/08/phan-tich-cve-2023-29357-microsoft-sharepoint-validatetokenissuer-authentication-bypass-vulnerability/
猜你喜欢
- 2024-10-11 苹果手机出现新严重漏洞:账户被接管
- 2024-10-11 你必须知道的十大漏洞之失效的访问控制——A1
- 2024-10-11 互联网小产品开发之(4)基于JWT的登录认证设计
- 2024-10-11 苹果在macOS,iOS中散布零日漏洞(如何在普通pc上安装macos苹果操作系统)
- 2024-10-11 「热点」微软自动化服务被爆高危的账户越权访问漏洞
- 2024-10-11 黑客发现苹果安全漏洞;苹果支付10万美元赏金
- 2024-10-11 垂直越权漏洞与代码分析(垂直越权漏洞修复方案)
- 2024-10-11 Apple登录功能存在安全漏洞,允许未经授权的黑客访问用户信息
- 2024-10-11 在Web应用中,别再把JWT当做session使用
- 2024-10-11 Java 15以上版本爆加密漏洞:CVE-2022-21449
你 发表评论:
欢迎- 367℃用AI Agent治理微服务的复杂性问题|QCon
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 358℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 346℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 345℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 342℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)