近年来,微软SharePoint作为企业广泛使用的协作和内容管理平台,在数字化办公环境中扮演着重要角色。然而,随着其应用范围扩大,安全威胁也日益凸显。2025年中暴露的SharePoint ToolShell漏洞链成为全球安全界关注的焦点,这套漏洞利用链仅需一次HTTP请求,即可实现未授权的远程代码执行,给企业带来严重安全风险。本文将深入探讨ToolShell漏洞链的技术细节、成因及其防护建议。 ToolShell漏洞链由两个关键的安全缺陷组成。首先是CVE-2025-49706,涉及ToolPane页面的认证绕过漏洞。
其次是CVE-2025-49704,源自DataSetSurrogateSelector的不安全反序列化。通过这两个漏洞的组合,不仅攻破了传统的身份验证限制,还利用反序列化漏洞实现了代码执行,展现出极强的攻击能力。 ToolPane.aspx作为SharePoint系统中特殊的布局页,通常只允许认证用户访问。它承载了主要的Web部件处理逻辑,其中函数GetPartPreviewAndPropertiesFromMarkup负责解析网页部件的相关数据。安全机制中的SPRequestModule.PostAuthenticateRequestHandler一般会对未登录用户请求予以拒绝。然而,ToolShell利用了对Referer头信息中特定注销路径的特殊处理,使得未经授权的访问得以绕过认证限制。
通过设置Referer为SignOut.aspx路径,攻击者可巧妙触发flag7变量使认证检查失效,打开了攻击大门。 此后,SharePoint的页面认证机制还会在不同生命周期阶段进行二次校验,尤其是基于WebPartPage的页面会在加载时要求呈现防跨站请求伪造的表单摘要(form digest),该步骤同样需要身份验证。ToolShell深挖分页生命周期,发现能在InitComplete事件前执行目标函数,通过巧妙地设置查询参数DisplayMode=Edit和强制页面路径检测,成功在未认证情况下调用了GetPartPreviewAndPropertiesFromMarkup方法,进而将恶意Web部件注入执行流程。 恶意Web部件通过MSOTlPn_DWP参数传递,其内容被Node解析为ASP.NET控件树,支持普通控件格式,能够加载任意服务器端控件。尽管新一代Web部件格式会对权限进行严格校验,ToolShell选择了免校验的旧格式进行绕过。为保证解析时不触发文件权限错误,ToolShell要求MSOTlPn_Uri参数指向系统文件路径下存在的ascx控件,如/_controltemplates/15/AclEditor.ascx,以实现在文件系统级别读取控件设计器内容。
反序列化作为攻击链核心,涉及微软DataSetSurrogateSelector。这个组件负责在反序列化过程中过滤非预期的类型,只允许定义好的安全类型通过。其机制会验证XML结构中的DataType、InstanceType与Expression属性,确保仅包含白名单内的简单数据类型,理论上阻断了恶意对象反序列化风险。 然而,漏洞关键在于TypeNameParser组件解析类型名称的方式。正常情况下,类型名称中包含带方括号的嵌套泛型时,不会因逗号分割进行错误判断。但当使用System.Collections.Generic.List`1这种泛型,且不明示其内部具体类型的程序集时,解析逻辑错误地将该复杂类型默认映射为了System.Object,这恰巧是白名单中允许的类型之一。
借助这一漏洞,攻击者可以绕过过滤机制,将任意类型包装进泛型集合中,触发对恶意对象的反序列化执行。 进一步深化链路,ToolShell利用了避开的控件元素,挑选了微软PerformancePoint.Scorecards.ExcelDataSet类作为载体。该类具有一个关键属性DataTable,在访问时会自动解压缩并反序列化隐藏的Base64编码的对象数据。通过构造恶意的Gzip压缩反序列化负载,攻击者能够在该控件访问时触发远程代码执行。 工具集成方面,ToolShell通过封装UpdateProgress控件,利用其支持自定义进度模板的特性,将恶意ExcelDataSet控件置于模板内,以发挥其反序列化触发机制。此形式让整个调用链自然流畅,全流程无需认证,完成由输入恶意Web部件参数至实际的服务器端代码执行,实现一键式远程攻击。
本漏洞链针对的SharePoint版本主要集中在2019年及之前版本,包含最新2025年6月前的多个补丁之前版本。同时,ToolPane认证绕过不仅影响最新版本,对2013版同样有效。微软已在2025年7月发布安全更新,针对该漏洞链进行了修复,建议所有使用SharePoint的企业和组织务必尽快应用补丁,确保系统安全。 防护策略方面,单纯限制匿名访问或者加强服务器权限不足以阻止此类链式攻击。关键在于全面审查SharePoint各类页面及控件的安全边界,杜绝未授权输入的控件注入风险。另外,企业应注重日志监控和网络流量分析,及时捕获异常HTTP请求特征,如伪造Referer和异常参数组合。
机密环境中,应结合应用防火墙与身份验证强化策略,减少潜在攻击面。 本次ToolShell漏洞链的发现与公开,再次提醒业界应重视大型复杂应用的代码审计和供应链安全。SharePoint平台因其庞大且多元的代码基底,潜藏多样化攻击向量,安全研究人员和开发者需要保持持续警觉与深度分析。未来,期望在代码设计时引入更完善的类型约束与序列化安全策略,防止利用泛型类型解析漏洞的攻击发生。 综上所述,SharePoint ToolShell漏洞链凭借巧妙认证绕过及类型反序列化缺陷,实现了仅通过单一请求的远程代码执行攻击。它暴露了企业信息系统中复合型漏洞的严峻挑战,也体现了安全研究在推动防护升级中的重要作用。
保持系统最新且强化安全防御,是规避此类高级威胁的最佳出路。安全社区需携手加快漏洞识别和修复流程,为全球用户创造更安全的网络协作环境。