CVE-2026-45659:Microsoft SharePoint远程代码执行漏洞深度解析与修复指南

摘要: 2026年5月,Microsoft披露了SharePoint Server高危漏洞CVE-2026-45659,CVSS评分8.8。该反序列化漏洞允许已认证攻击者在SharePoint服务器上远程执行代码,无需管理员权限。本文深度剖析漏洞原理、攻击场景、影响范围,并提供完整的修复方案和临时缓解措施。

难度等级 : ⭐⭐⭐⭐(中级)

前置知识:

  • 了解 SharePoint Server 基本架构和权限模型
  • 熟悉 .NET 反序列化基础概念
  • 掌握 PowerShell 基本操作

🎯 背景与痛点

高危RCE漏洞,已认证即可利用

text 复制代码
【紧急安全公告】CVE-2026-45659 SharePoint远程代码执行漏洞
CVSS评分: 8.8 (高危)
漏洞类型: 反序列化导致的远程代码执行
攻击条件: 需要认证(最低Site Member权限)
影响范围: Microsoft SharePoint Server多个版本
披露日期: 2026-05-26

作为企业IT管理员,我收到这条告警时必须立即响应------任何拥有SharePoint账号的用户都可能利用此漏洞获取服务器控制权。

漏洞全景

#mermaid-svg-VpDPkQ7vT3Y3cFDT{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .error-icon{fill:#552222;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .marker.cross{stroke:#333333;}#mermaid-svg-VpDPkQ7vT3Y3cFDT svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VpDPkQ7vT3Y3cFDT p{margin:0;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge{stroke-width:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section--1 rect,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section--1 path,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section--1 circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section--1 polygon,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section--1 text{fill:#ffffff;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-depth--1{stroke-width:17;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:lightgray;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:#efefef;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-0 rect,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-0 path,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-0 circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-0 polygon,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-0 text{fill:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .node-icon-0{font-size:40px;color:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-depth-0{stroke-width:14;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:lightgray;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:#efefef;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-1 rect,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-1 path,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-1 circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-1 polygon,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-1 text{fill:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .node-icon-1{font-size:40px;color:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-depth-1{stroke-width:11;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:lightgray;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:#efefef;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-2 rect,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-2 path,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-2 circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-2 polygon,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-2 text{fill:#ffffff;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-depth-2{stroke-width:8;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:lightgray;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:#efefef;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-3 rect,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-3 path,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-3 circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-3 polygon,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-3 text{fill:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .node-icon-3{font-size:40px;color:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-depth-3{stroke-width:5;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:lightgray;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:#efefef;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-4 rect,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-4 path,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-4 circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-4 polygon,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-4 text{fill:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .node-icon-4{font-size:40px;color:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-depth-4{stroke-width:2;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:lightgray;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:#efefef;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-5 rect,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-5 path,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-5 circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-5 polygon,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-5 text{fill:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .node-icon-5{font-size:40px;color:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-depth-5{stroke-width:-1;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:lightgray;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:#efefef;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-6 rect,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-6 path,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-6 circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-6 polygon,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-6 text{fill:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .node-icon-6{font-size:40px;color:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-depth-6{stroke-width:-4;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:lightgray;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:#efefef;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-7 rect,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-7 path,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-7 circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-7 polygon,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-7 text{fill:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .node-icon-7{font-size:40px;color:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-depth-7{stroke-width:-7;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:lightgray;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:#efefef;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-8 rect,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-8 path,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-8 circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-8 polygon,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-8 text{fill:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .node-icon-8{font-size:40px;color:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-depth-8{stroke-width:-10;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:lightgray;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:#efefef;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-9 rect,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-9 path,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-9 circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-9 polygon,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-9 text{fill:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .node-icon-9{font-size:40px;color:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-depth-9{stroke-width:-13;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:lightgray;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:#efefef;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-10 rect,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-10 path,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-10 circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-10 polygon,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-10 text{fill:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .node-icon-10{font-size:40px;color:black;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge-depth-10{stroke-width:-16;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:lightgray;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .disabled text{fill:#efefef;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-root rect,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-root path,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-root circle,#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-root text{fill:#ffffff;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-root span{color:#ffffff;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .section-2 span{color:#ffffff;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .edge{fill:none;}#mermaid-svg-VpDPkQ7vT3Y3cFDT .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-VpDPkQ7vT3Y3cFDT :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} CVE-2026-45659

SharePoint RCE
漏洞特征
CVSS 8.8 高危
需认证即可利用
无需管理员权限
无需用户交互
网络远程触发
技术原理
BinaryFormatter 反序列化
不可信数据未验证
ObjectDataProvider 链
WindowsIdentity 提升
攻击路径
构造恶意序列化对象
通过 API 发送
触发反序列化
RCE 获取服务器权限
修复方案
首选
临时
辅助
兜底

三个真实场景

场景 1: 内部员工恶意利用

某公司员工拥有 SharePoint Site Member 权限。攻击者利用反序列化漏洞,构造恶意对象并通过 API 发送:

反序列化攻击需要构造恶意对象,通过 ISerializable 接口控制反序列化行为。

csharp 复制代码
// 攻击者构造恶意序列化数据
public class MaliciousPayload : ISerializable
{
    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        // 利用反序列化执行系统命令
        info.SetType(typeof(ProcessStartInfo));
        info.AddValue("FileName", "cmd.exe");
        info.AddValue("Arguments", "/c whoami > C:\\temp\\pwned.txt");
    }
}

构造的恶意对象通过 SharePoint REST API 提交,触发服务端反序列化。

bash 复制代码
# 攻击者通过SharePoint API发送恶意请求
POST /_api/site/lists HTTP/1.1
Host: sharepoint.company.com
Authorization: Bearer <user_token>
Content-Type: application/json

{
    "__metadata": {"type": "SP.List"},
    "Title": "ExploitList",
    "BaseTemplate": 100,
    "CustomSchemaXml": "<恶意序列化数据>"
}
  • ⚠️ 普通用户可获取服务器权限
  • ⚠️ 敏感数据面临泄露风险
  • ⚠️ 内部威胁难以防范

场景 2: 供应链攻击入口

攻击者通过钓鱼获取低权限账号,利用该漏洞从普通用户横向提升至服务器控制权:
#mermaid-svg-RJ37EJgThKhPiKkQ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-RJ37EJgThKhPiKkQ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RJ37EJgThKhPiKkQ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RJ37EJgThKhPiKkQ .error-icon{fill:#552222;}#mermaid-svg-RJ37EJgThKhPiKkQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RJ37EJgThKhPiKkQ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RJ37EJgThKhPiKkQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RJ37EJgThKhPiKkQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RJ37EJgThKhPiKkQ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RJ37EJgThKhPiKkQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RJ37EJgThKhPiKkQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RJ37EJgThKhPiKkQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RJ37EJgThKhPiKkQ .marker.cross{stroke:#333333;}#mermaid-svg-RJ37EJgThKhPiKkQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RJ37EJgThKhPiKkQ p{margin:0;}#mermaid-svg-RJ37EJgThKhPiKkQ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-RJ37EJgThKhPiKkQ .cluster-label text{fill:#333;}#mermaid-svg-RJ37EJgThKhPiKkQ .cluster-label span{color:#333;}#mermaid-svg-RJ37EJgThKhPiKkQ .cluster-label span p{background-color:transparent;}#mermaid-svg-RJ37EJgThKhPiKkQ .label text,#mermaid-svg-RJ37EJgThKhPiKkQ span{fill:#333;color:#333;}#mermaid-svg-RJ37EJgThKhPiKkQ .node rect,#mermaid-svg-RJ37EJgThKhPiKkQ .node circle,#mermaid-svg-RJ37EJgThKhPiKkQ .node ellipse,#mermaid-svg-RJ37EJgThKhPiKkQ .node polygon,#mermaid-svg-RJ37EJgThKhPiKkQ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RJ37EJgThKhPiKkQ .rough-node .label text,#mermaid-svg-RJ37EJgThKhPiKkQ .node .label text,#mermaid-svg-RJ37EJgThKhPiKkQ .image-shape .label,#mermaid-svg-RJ37EJgThKhPiKkQ .icon-shape .label{text-anchor:middle;}#mermaid-svg-RJ37EJgThKhPiKkQ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RJ37EJgThKhPiKkQ .rough-node .label,#mermaid-svg-RJ37EJgThKhPiKkQ .node .label,#mermaid-svg-RJ37EJgThKhPiKkQ .image-shape .label,#mermaid-svg-RJ37EJgThKhPiKkQ .icon-shape .label{text-align:center;}#mermaid-svg-RJ37EJgThKhPiKkQ .node.clickable{cursor:pointer;}#mermaid-svg-RJ37EJgThKhPiKkQ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RJ37EJgThKhPiKkQ .arrowheadPath{fill:#333333;}#mermaid-svg-RJ37EJgThKhPiKkQ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RJ37EJgThKhPiKkQ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RJ37EJgThKhPiKkQ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RJ37EJgThKhPiKkQ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RJ37EJgThKhPiKkQ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RJ37EJgThKhPiKkQ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RJ37EJgThKhPiKkQ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RJ37EJgThKhPiKkQ .cluster text{fill:#333;}#mermaid-svg-RJ37EJgThKhPiKkQ .cluster span{color:#333;}#mermaid-svg-RJ37EJgThKhPiKkQ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RJ37EJgThKhPiKkQ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RJ37EJgThKhPiKkQ rect.text{fill:none;stroke-width:0;}#mermaid-svg-RJ37EJgThKhPiKkQ .icon-shape,#mermaid-svg-RJ37EJgThKhPiKkQ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RJ37EJgThKhPiKkQ .icon-shape p,#mermaid-svg-RJ37EJgThKhPiKkQ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RJ37EJgThKhPiKkQ .icon-shape .label rect,#mermaid-svg-RJ37EJgThKhPiKkQ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RJ37EJgThKhPiKkQ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RJ37EJgThKhPiKkQ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RJ37EJgThKhPiKkQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 钓鱼攻击
获取普通用户账号
登录SharePoint
利用CVE-2026-45659
获取服务器权限
横向移动
域控制器沦陷

  • ⚠️ 整个Active Directory域面临风险
  • ⚠️ 攻击者可持久化后门
  • ⚠️ 数据泄露范围扩大

场景 3: 云环境SharePoint Online

SharePoint Online也可能受影响:

powershell 复制代码
# 使用PowerShell PnP模块利用漏洞
Connect-PnPOnline -Url "https://company.sharepoint.com/sites/target"
# 利用漏洞执行命令(概念演示)
  • ⚠️ 云环境也面临威胁
  • ⚠️ 多租户环境风险更大
  • ⚠️ 合规性问题

为什么这个漏洞如此危险?

此漏洞的核心威胁在于低权限即可触发高危害后果

维度 说明
CVSS评分 8.8 (高危)
攻击复杂度 低,无需特殊条件
权限要求 低,仅需Site Member权限
用户交互 无需用户交互
影响范围 完全控制SharePoint服务器
利用方式 网络远程
实际风险 内部员工或钓鱼账号即可提权至服务器控制权

📖 漏洞原理深度剖析

CVE-2026-45659 基本信息

属性
CVE 编号 CVE-2026-45659
CVSS v4.0 8.8 (High)
影响产品 Microsoft SharePoint Server
漏洞类型 反序列化漏洞 (Deserialization of Untrusted Data)
攻击向量 网络远程
权限要求 已认证用户(最低Site Member)
发现者 MEOW
披露日期 2026-05-26

技术根因分析

1. 不安全的反序列化

在 SharePoint Server 中,部分 API 端点在处理特定格式的请求数据时,直接调用了 BinaryFormatter.Deserialize(),且未对数据类型做任何校验:

BinaryFormatter.Deserialize() 是 .NET 中最危险的反序列化方法------它允许任意类型被实例化,攻击者可借此触发代码执行。

csharp 复制代码
// 简化伪代码 - SharePoint数据处理

public object ProcessUserInput(byte[] serializedData)
{
    // 缺陷:直接反序列化用户提供的数据
    // 未验证数据来源和类型
    
    BinaryFormatter formatter = new BinaryFormatter();
    using (MemoryStream ms = new MemoryStream(serializedData))
    {
        // 危险:直接反序列化不可信数据
        object result = formatter.Deserialize(ms);  // 漏洞点!
        return result;
    }
}

核心问题:
反序列化模块 SharePoint Server 已认证用户 反序列化模块 SharePoint Server 已认证用户 #mermaid-svg-W2bosdl7Q6ta5NuJ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-W2bosdl7Q6ta5NuJ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-W2bosdl7Q6ta5NuJ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-W2bosdl7Q6ta5NuJ .error-icon{fill:#552222;}#mermaid-svg-W2bosdl7Q6ta5NuJ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-W2bosdl7Q6ta5NuJ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-W2bosdl7Q6ta5NuJ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-W2bosdl7Q6ta5NuJ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-W2bosdl7Q6ta5NuJ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-W2bosdl7Q6ta5NuJ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-W2bosdl7Q6ta5NuJ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-W2bosdl7Q6ta5NuJ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-W2bosdl7Q6ta5NuJ .marker.cross{stroke:#333333;}#mermaid-svg-W2bosdl7Q6ta5NuJ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-W2bosdl7Q6ta5NuJ p{margin:0;}#mermaid-svg-W2bosdl7Q6ta5NuJ .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-W2bosdl7Q6ta5NuJ text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-W2bosdl7Q6ta5NuJ .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-W2bosdl7Q6ta5NuJ .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-W2bosdl7Q6ta5NuJ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-W2bosdl7Q6ta5NuJ .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-W2bosdl7Q6ta5NuJ #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-W2bosdl7Q6ta5NuJ .sequenceNumber{fill:white;}#mermaid-svg-W2bosdl7Q6ta5NuJ #sequencenumber{fill:#333;}#mermaid-svg-W2bosdl7Q6ta5NuJ #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-W2bosdl7Q6ta5NuJ .messageText{fill:#333;stroke:none;}#mermaid-svg-W2bosdl7Q6ta5NuJ .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-W2bosdl7Q6ta5NuJ .labelText,#mermaid-svg-W2bosdl7Q6ta5NuJ .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-W2bosdl7Q6ta5NuJ .loopText,#mermaid-svg-W2bosdl7Q6ta5NuJ .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-W2bosdl7Q6ta5NuJ .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-W2bosdl7Q6ta5NuJ .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-W2bosdl7Q6ta5NuJ .noteText,#mermaid-svg-W2bosdl7Q6ta5NuJ .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-W2bosdl7Q6ta5NuJ .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-W2bosdl7Q6ta5NuJ .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-W2bosdl7Q6ta5NuJ .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-W2bosdl7Q6ta5NuJ .actorPopupMenu{position:absolute;}#mermaid-svg-W2bosdl7Q6ta5NuJ .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-W2bosdl7Q6ta5NuJ .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-W2bosdl7Q6ta5NuJ .actor-man circle,#mermaid-svg-W2bosdl7Q6ta5NuJ line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-W2bosdl7Q6ta5NuJ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 缺陷:未验证数据类型 允许任意类型反序列化 发送恶意序列化数据 处理用户输入 执行恶意代码 服务器被控制

2. 攻击链路

#mermaid-svg-FP5ynhECCcz1NvVu{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-FP5ynhECCcz1NvVu .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-FP5ynhECCcz1NvVu .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-FP5ynhECCcz1NvVu .error-icon{fill:#552222;}#mermaid-svg-FP5ynhECCcz1NvVu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-FP5ynhECCcz1NvVu .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-FP5ynhECCcz1NvVu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-FP5ynhECCcz1NvVu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-FP5ynhECCcz1NvVu .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-FP5ynhECCcz1NvVu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-FP5ynhECCcz1NvVu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-FP5ynhECCcz1NvVu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-FP5ynhECCcz1NvVu .marker.cross{stroke:#333333;}#mermaid-svg-FP5ynhECCcz1NvVu svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-FP5ynhECCcz1NvVu p{margin:0;}#mermaid-svg-FP5ynhECCcz1NvVu .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-FP5ynhECCcz1NvVu .cluster-label text{fill:#333;}#mermaid-svg-FP5ynhECCcz1NvVu .cluster-label span{color:#333;}#mermaid-svg-FP5ynhECCcz1NvVu .cluster-label span p{background-color:transparent;}#mermaid-svg-FP5ynhECCcz1NvVu .label text,#mermaid-svg-FP5ynhECCcz1NvVu span{fill:#333;color:#333;}#mermaid-svg-FP5ynhECCcz1NvVu .node rect,#mermaid-svg-FP5ynhECCcz1NvVu .node circle,#mermaid-svg-FP5ynhECCcz1NvVu .node ellipse,#mermaid-svg-FP5ynhECCcz1NvVu .node polygon,#mermaid-svg-FP5ynhECCcz1NvVu .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-FP5ynhECCcz1NvVu .rough-node .label text,#mermaid-svg-FP5ynhECCcz1NvVu .node .label text,#mermaid-svg-FP5ynhECCcz1NvVu .image-shape .label,#mermaid-svg-FP5ynhECCcz1NvVu .icon-shape .label{text-anchor:middle;}#mermaid-svg-FP5ynhECCcz1NvVu .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-FP5ynhECCcz1NvVu .rough-node .label,#mermaid-svg-FP5ynhECCcz1NvVu .node .label,#mermaid-svg-FP5ynhECCcz1NvVu .image-shape .label,#mermaid-svg-FP5ynhECCcz1NvVu .icon-shape .label{text-align:center;}#mermaid-svg-FP5ynhECCcz1NvVu .node.clickable{cursor:pointer;}#mermaid-svg-FP5ynhECCcz1NvVu .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-FP5ynhECCcz1NvVu .arrowheadPath{fill:#333333;}#mermaid-svg-FP5ynhECCcz1NvVu .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-FP5ynhECCcz1NvVu .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-FP5ynhECCcz1NvVu .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FP5ynhECCcz1NvVu .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-FP5ynhECCcz1NvVu .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FP5ynhECCcz1NvVu .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-FP5ynhECCcz1NvVu .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-FP5ynhECCcz1NvVu .cluster text{fill:#333;}#mermaid-svg-FP5ynhECCcz1NvVu .cluster span{color:#333;}#mermaid-svg-FP5ynhECCcz1NvVu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-FP5ynhECCcz1NvVu .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-FP5ynhECCcz1NvVu rect.text{fill:none;stroke-width:0;}#mermaid-svg-FP5ynhECCcz1NvVu .icon-shape,#mermaid-svg-FP5ynhECCcz1NvVu .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FP5ynhECCcz1NvVu .icon-shape p,#mermaid-svg-FP5ynhECCcz1NvVu .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-FP5ynhECCcz1NvVu .icon-shape .label rect,#mermaid-svg-FP5ynhECCcz1NvVu .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FP5ynhECCcz1NvVu .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-FP5ynhECCcz1NvVu .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-FP5ynhECCcz1NvVu :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 构造恶意对象
序列化为字节流
通过API发送
SharePoint反序列化
触发代码执行
获取服务器权限

3. 常见利用链

攻击者通常使用以下 .NET 反序列化 gadget 链来执行代码:

Gadget链 说明 风险
WindowsIdentity 模拟其他用户身份
ClaimsPrincipal 篡改声明身份
ObjectDataProvider 调用任意方法 极高
PSObject 执行PowerShell命令 极高

ObjectDataProvider 是 .NET 反序列化中最常被利用的 gadget,它能在反序列化过程中调用任意对象的任意方法。

csharp 复制代码
// 利用ObjectDataProvider执行命令(概念演示)
var payload = new ObjectDataProvider
{
    MethodName = "Start",
    ObjectInstance = new Type[]
    {
        typeof(System.Diagnostics.Process),
        "cmd.exe",
        "/c whoami"
    }
};

影响范围

受影响版本
产品 受影响版本 修复版本
SharePoint Server 2019 所有版本 2026年5月安全更新
SharePoint Server 2016 所有版本 2026年5月安全更新
SharePoint Server Subscription Edition 所有版本 2026年5月安全更新
高风险场景
  • ✅ 大型企业SharePoint环境
  • ✅ 多部门协作的SharePoint站点
  • ✅ 允许外部用户访问的SharePoint
  • ✅ 未及时打补丁的系统

真实陷阱案例

陷阱 1:误认为仅影响管理员

场景: 运维人员认为漏洞仅影响管理员,未意识到普通用户也可利用。

错误做法: 仅限制管理员权限,未修复根本的反序列化漏洞。

正确做法:

bash 复制代码
# 正确:安装安全更新,修复反序列化漏洞
# 检查SharePoint版本
(Get-SPFarm).BuildVersion
# 如果版本受影响,立即安装安全更新

⚠️ 风险提醒: 反序列化漏洞的利用不依赖用户权限高低,只要攻击者已登录(最低权限级别 Site Member),即可触发漏洞。仅靠限制管理员权限无法缓解风险。

教训: 反序列化漏洞可被普通用户利用,必须修复根本原因------安装安全更新。

陷阱 2:仅依赖WAF防护

场景: 团队部署了WAF规则,认为这样就安全了。

错误做法: 仅添加WAF规则,未安装安全更新。WAF规则可能被绕过。

正确做法: 安装安全更新,WAF仅作为辅助防护。

⚠️ 风险提醒 : 反序列化攻击的 payload 可以通过多种编码方式绕过 WAF 规则(Base64、GZip、自定义序列化格式)。WAF 检测模式(如 __type=$type=)在 .NET BinaryFormatter 的原生负载中并不一定出现。

教训: WAF可能被绕过,安装安全更新才是根本解决方案。

陷阱 3:忽略用户权限检查

场景: 团队修复了漏洞,但未检查用户权限。过多的用户权限可能被滥用。

正确做法: 修复漏洞后,检查并收缩用户权限:

bash 复制代码
# 1. 检查SharePoint用户权限
# 2. 限制不必要的权限
# 3. 监控异常用户行为

教训: 反序列化漏洞修复后,还应检查用户权限,防止其他攻击面被利用。

陷阱 4:误认为仅影响特定版本

场景: 团队认为漏洞仅影响特定版本,未检查其他版本。

事实: CVE-2026-45659 影响所有 SharePoint Server 主要版本(2016/2019/Subscription Edition)。

正确做法: 统一检查所有 SharePoint 实例的版本并安装更新:

bash 复制代码
# 检查所有SharePoint实例的版本
Get-SPProduct -Local | Select-Object Name, Version

教训: 多版本共存的环境必须逐一核查。

陷阱 5:仅监控成功登录

场景: 团队配置监控仅检测成功登录,未监控反序列化攻击特征。

事实: 反序列化攻击需要认证,但不需要管理员权限。攻击者登录后可能使用普通账号触发漏洞。

正确监控:

bash 复制代码
# 1. 监控异常的API请求体大小
# 2. 监控反序列化异常事件(Event ID 1309/1310)
# 3. 监控异常的命令执行进程创建
# 4. 监控异常的出站网络连接

教训: 反序列化攻击需要监控 API 请求和异常事件日志,不能仅监控登录行为。

🔧 修复方案总览

方案对比矩阵

方案 难度 效果 适用场景 推荐度
安装安全更新 ⭐⭐ ⭐⭐⭐⭐⭐ 所有环境 🏆 首选
限制用户权限 ⭐⭐ ⭐⭐⭐⭐ 临时缓解 ⭐⭐⭐⭐
WAF防护 ⭐⭐ ⭐⭐⭐ 有WAF基础设施 ⭐⭐⭐
禁用危险API ⭐⭐⭐ ⭐⭐⭐⭐ 无法立即更新 ⭐⭐⭐⭐

临时缓解措施性能影响评估:

缓解措施 性能开销 适用场景 建议
安装安全更新 0% 所有环境 推荐
限制用户权限 < 1% 临时缓解 推荐
WAF防护 3-8% 有WAF基础设施 推荐
禁用危险API 5-10% 无法立即更新 可选

总体性能开销:临时缓解措施性能开销 < 10%,对业务影响可忽略。

🔧 方案一:安装安全更新(强烈推荐)

步骤 1:确认当前版本

确认版本是修复的第一步,不同 SharePoint 版本对应的安全更新补丁不同。

powershell 复制代码
# SharePoint Management Shell
(Get-SPFarm).BuildVersion

# 或检查注册表
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\16.0\WSS" | Select-Object Version

步骤 2:下载安全更新

必须从官方渠道获取正确的安全更新补丁。SharePoint 2016/2019/Subscription Edition 各有独立的补丁包。

powershell 复制代码
# 访问Microsoft Update Catalog
# https://www.catalog.update.microsoft.com/

# 或使用Windows Server Update Services (WSUS)
# 批准SharePoint 2026年5月安全更新

步骤 3:安装修补程序

安装 SharePoint 安全更新需要按正确顺序停止服务、安装补丁、运行配置向导,否则可能导致更新失败。
⚠️ 风险提醒: 安装更新前必须备份 SharePoint 数据库和配置文件。如果在多服务器场环境中部署,需逐台服务器执行更新,在此期间 SharePoint 服务可能短暂不可用。

powershell 复制代码
# 1. 停止SharePoint服务
Stop-Service SPTimerV4
Stop-Service SPAdminV4
Stop-Service W3SVC

# 2. 安装更新(以SharePoint Server 2019为例)
# 下载对应的.msp文件后运行
msiexec /p sharepoint2019-kb-xxxxxx-fullfile-x64-glb.msp /qn

# 3. 运行配置向导
PSConfig.exe -cmd upgrade -inplace b2b -wait -cmd applicationcontent -install -cmd installfeatures -cmd secureresources

# 4. 启动服务
Start-Service SPTimerV4
Start-Service SPAdminV4
Start-Service W3SVC

步骤 4:验证安装

验证补丁安装成功是修复闭环的关键,需同时检查版本号和产品配置状态。

powershell 复制代码
# 检查构建版本
(Get-SPFarm).BuildVersion
# 应显示更新后的版本号

# 检查产品配置向导状态
Get-SPProduct -Local

批量部署脚本

大型企业拥有多台 SharePoint 前端/应用程序服务器,手动逐台更新效率低且容易遗漏。

powershell 复制代码
# deploy-sharepoint-patch.ps1

$servers = @("SP-WFE01", "SP-WFE02", "SP-APP01")

foreach ($server in $servers) {
    Write-Host "正在更新 $server ..." -ForegroundColor Yellow
    
    # 复制更新文件
    Copy-Item ".\sharepoint2019-kb-xxxxxx.msp" "\\$server\C$\temp\"
    
    # 远程安装
    Invoke-Command -ComputerName $server -ScriptBlock {
        Stop-Service SPTimerV4, SPAdminV4, W3SVC
        msiexec /p "C:\temp\sharepoint2019-kb-xxxxxx.msp" /qn
        Start-Service SPTimerV4, SPAdminV4, W3SVC
    }
    
    Write-Host "$server 更新完成!" -ForegroundColor Green
}

🔧 方案二:限制用户权限(临时缓解)

实施最小权限原则

通过限制用户权限降低攻击面------即使漏洞未被修复,降低账号权限也可减少可利用的攻击路径。

powershell 复制代码
# 1. 审查Site Member权限
$site = Get-SPSite "https://sharepoint.company.com"
$web = $site.RootWeb

# 列出所有有Member权限的用户
$web.RoleAssignments | Where-Object {
    $_.RoleDefinitionBindings.Name -contains "Contribute"
} | ForEach-Object {
    Write-Host "用户: $($_.Member.Name) - 权限: $($_.RoleDefinitionBindings.Name)"
}

# 2. 降低不必要的用户权限
# 将Member降级为Reader(只读)
$user = $web.EnsureUser("domain\username")
$roleDefinition = $web.RoleDefinitions["Read"]
$roleAssignment = New-Object Microsoft.SharePoint.SPRoleAssignment($user)
$roleAssignment.RoleDefinitionBindings.Add($roleDefinition)
$web.RoleAssignments.Add($roleAssignment)
$web.Update()

禁用自定义脚本

攻击者常通过自定义脚本功能上传恶意页面或 Web Part,禁用此能力可阻断常见 Webshell 写入路径。

powershell 复制代码
# 限制用户执行自定义脚本的能力
Set-SPOSite -Identity "https://company.sharepoint.com/sites/target" `
    -DenyAddAndCustomizePages $true

🔧 方案三:WAF防护规则

IIS请求过滤

在 HTTP 层面拦截明显的反序列化 payload 特征。虽然不能替代补丁安装,但可作为纵深防御的补充手段。

xml 复制代码
<!-- web.config -->
<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- 限制请求体大小 -->
        <requestLimits maxAllowedContentLength="10485760"/>

        <!-- 阻止可疑的序列化数据 -->
        <denyUrlSequences>
          <add sequence="__type="/>
          <add sequence="$type="/>
          <add sequence="__metadata"/>
        </denyUrlSequences>
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>

⚠️ 风险提醒 : IIS 请求过滤只能拦截已知的 payload 特征字符串,无法防御经过编码/加密的序列化攻击负载。此方案应作为辅助手段,不可替代官方安全更新。

Azure Application Gateway WAF

对于部署在 Azure 或混合云环境的 SharePoint,可在网关层统一应用反序列化防护规则。

json 复制代码
{
  "properties": {
    "policySettings": {
      "requestBodyCheck": true,
      "maxRequestBodySizeInKb": 128,
      "fileUploadLimitInMb": 100
    },
    "customRules": [
      {
        "name": "BlockDeserializationAttack",
        "priority": 1,
        "ruleType": "MatchRule",
        "matchConditions": [
          {
            "matchVariables": [
              {
                "variableName": "RequestBody"
              }
            ],
            "operator": "Contains",
            "matchValues": [
              "BinaryFormatter",
              "ObjectStateFormatter",
              "LosFormatter"
            ]
          }
        ],
        "action": "Block"
      }
    ]
  }
}

🔧 方案四:禁用危险功能

禁用ViewState反序列化

.NET 的 ViewState 是反序列化攻击的常见入口之一,启用 MAC 验证可防止伪造的 ViewState 被反序列化。

xml 复制代码
<!-- web.config -->
<configuration>
  <system.web>
    <!-- 启用ViewState MAC验证 -->
    <pages enableViewStateMac="true"/>

    <!-- 使用更安全的序列化器 -->
    <appSettings>
      <add key="aspnet:MaxHttpCollectionKeys" value="1000"/>
    </appSettings>
  </system.web>
</configuration>

配置.NET反序列化限制

通过 SerializationGuard 限制 .NET 运行时允许被反序列化的类型范围,减少攻击者可用的 gadget 链。

csharp 复制代码
// Global.asax
protected void Application_Start()
{
    // 限制允许反序列化的类型
    AppDomain.CurrentDomain.SetData(
        "System.Runtime.Serialization.SerializationGuard",
        true
    );
}

📊 修复验证

验证补丁安装

powershell 复制代码
# 检查已安装的更新
Get-HotFix | Where-Object {$_.HotFixID -like "KB*"} | Sort-Object InstalledOn -Descending

# 检查SharePoint版本
(Get-SPFarm).BuildVersion

验证漏洞状态

powershell 复制代码
# 尝试使用已知的PoC(仅在测试环境)
# 如果补丁安装成功,应返回错误或被阻止

# 检查事件日志是否有相关错误
Get-EventLog -LogName Application -Source "SharePoint*" -After (Get-Date).AddDays(-1)

🛡️ 生产环境最佳实践

1. 补丁管理策略

markdown 复制代码
## SharePoint补丁管理最佳实践

### 更新策略

- [ ] 订阅Microsoft安全公告
- [ ] 建立测试环境验证补丁
- [ ] 制定补丁部署窗口
- [ ] 准备回滚计划

### 部署流程

- [ ] 测试环境验证(1-2天)
- [ ] 预生产环境验证(1-2天)
- [ ] 生产环境灰度部署
- [ ] 全量部署并监控

2. 访问控制策略

powershell 复制代码
# 定期审查SharePoint权限
function Audit-SharePointPermissions {
    param([string]$SiteUrl)
    
    $site = Get-SPSite $SiteUrl
    $web = $site.RootWeb
    
    Write-Host "=== SharePoint权限审计 ===" -ForegroundColor Cyan
    Write-Host "站点: $SiteUrl"
    
    # 审计有编辑权限的用户
    $web.RoleAssignments | ForEach-Object {
        $user = $_.Member
        $perms = $_.RoleDefinitionBindings.Name -join ", "
        
        if ($perms -match "Contribute|Edit|Full Control") {
            Write-Host "高权限用户: $($user.Name) - $perms" -ForegroundColor Yellow
        }
    }
}

3. 监控与告警

powershell 复制代码
# 监控可疑的API调用
$eventFilter = @{
    LogName = 'Application'
    ID = 1309, 1310  # SharePoint相关事件ID
    Level = 2, 3    # Warning, Error
}

Get-WinEvent -FilterHashtable $eventFilter -MaxEvents 100 | Where-Object {
    $_.Message -match "deserialization|BinaryFormatter|反序列化"
} | Select-Object TimeCreated, Message

4. 应急响应预案

markdown 复制代码
## CVE-2026-45659 应急响应流程

### Phase 1: 检测与评估(0-1小时)

- [ ] 确认SharePoint版本是否受影响
- [ ] 检查是否有异常登录或API调用
- [ ] 评估业务影响

### Phase 2: 临时缓解(1-4小时)

- [ ] 限制高权限用户数量
- [ ] 启用WAF防护规则
- [ ] 加强日志监控

### Phase 3: 永久修复(4-24小时)

- [ ] 测试安全更新
- [ ] 备份SharePoint数据
- [ ] 安装安全更新
- [ ] 运行配置向导

### Phase 4: 验证与复盘(24-48小时)

- [ ] 验证补丁安装
- [ ] 测试业务功能
- [ ] 审查安全配置
- [ ] 更新应急预案

📝 总结与下一步行动

核心收获

  1. CVE-2026-45659 是SharePoint Server的高危反序列化RCE漏洞
  2. CVSS 8.8,任何已认证用户都可利用
  3. 最有效的修复方案是安装Microsoft安全更新
  4. 临时缓解包括限制用户权限、WAF防护、禁用危险功能
  5. 持续监控和及时打补丁是防御此类漏洞的关键

立即行动清单

markdown 复制代码
□ **今天完成**:
  - [ ] 确认SharePoint版本
  - [ ] 检查是否有安全更新可用
  - [ ] 评估业务影响

□ **本周完成**:
  - [ ] 测试安全更新
  - [ ] 安装补丁
  - [ ] 验证修复效果

□ **本月完成**:
  - [ ] 审查SharePoint权限
  - [ ] 加强监控告警
  - [ ] 更新补丁管理流程

👍 如果本文对你有帮助,欢迎点赞、收藏、转发!

💬 如果你在修复过程中遇到问题,请在评论区留言,我会逐一回复!

🔔 关注我,获取更多企业安全实战干货!

专栏导航:

相关推荐
zwd20057 小时前
Manim DLL 报错,先别重装 Python|把环境问题拆成可验证的步骤
microsoft
zandy10111 天前
体验家 XMPlus 问卷答题体验优化与完成率提升引擎:从交互设计到行为心理学的工程化实践
windows·microsoft·交互
码银1 天前
放弃了豆包,我使用Python做了一个桌面宠物
python·microsoft·宠物
C.咖.1 天前
C++ 实战:从零手写控制台五子棋(深入解析内存管理与核心算法)
microsoft·五子棋·编程实践·c++ 项目实战·游戏开发教程
大郭鹏宇2 天前
基于 LangGraph 构建智能分诊系统(一):项目概述与环境搭建
大数据·人工智能·microsoft·langchain
DisonTangor2 天前
【微软开源】Mage-Flow 深度解读:微软4B参数图像生成与编辑模型,单卡A100仅需0.59秒
人工智能·microsoft·ai作画·开源·aigc
大模型码小白2 天前
企业级检索增强后端集成:Java 服务如何管理知识库版本
java·服务器·开发语言·人工智能·python·microsoft
会飞的小新3 天前
C 标准库之 <fenv.h> 详解与深度解析
c语言·开发语言·microsoft
编码者卢布3 天前
【Azure Policy】Policy修正任务为Azure资源添加诊断日志报错问题的调查
microsoft·flask·azure