摘要: 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小时)
- [ ] 验证补丁安装
- [ ] 测试业务功能
- [ ] 审查安全配置
- [ ] 更新应急预案
📝 总结与下一步行动
核心收获
- CVE-2026-45659 是SharePoint Server的高危反序列化RCE漏洞
- CVSS 8.8,任何已认证用户都可利用
- 最有效的修复方案是安装Microsoft安全更新
- 临时缓解包括限制用户权限、WAF防护、禁用危险功能
- 持续监控和及时打补丁是防御此类漏洞的关键
立即行动清单
markdown
□ **今天完成**:
- [ ] 确认SharePoint版本
- [ ] 检查是否有安全更新可用
- [ ] 评估业务影响
□ **本周完成**:
- [ ] 测试安全更新
- [ ] 安装补丁
- [ ] 验证修复效果
□ **本月完成**:
- [ ] 审查SharePoint权限
- [ ] 加强监控告警
- [ ] 更新补丁管理流程
👍 如果本文对你有帮助,欢迎点赞、收藏、转发!
💬 如果你在修复过程中遇到问题,请在评论区留言,我会逐一回复!
🔔 关注我,获取更多企业安全实战干货!
专栏导航:
- 📖 上一篇 : Gitea容器镜像未授权访问漏洞修复指南
- 📖 下一篇: KnowledgeDeliver LMS远程代码执行漏洞修复指南(即将发布)
- 📚 专栏首页 : CVE漏洞修复指南专栏
- 🌟 推荐文章 :