CVE-2022-22005 Microsoft Sharepoint RCE
字数 1684 2025-08-07 08:22:27
Microsoft SharePoint RCE漏洞分析 (CVE-2022-22005)
漏洞概述
CVE-2022-22005是Microsoft SharePoint中的一个远程代码执行漏洞,CVSSv3评分为8.8。该漏洞存在于SharePoint的反序列化机制中,允许攻击者在目标系统上执行任意代码。
受影响版本
- Microsoft SharePoint Server 订阅版
- Microsoft SharePoint Server 2019
- Microsoft SharePoint Enterprise Server 2013 Service Pack 1
- Microsoft SharePoint Enterprise Server 2016
漏洞分析
漏洞位置
漏洞位于Microsoft.Office.Server.Internal.Charting.UI.WebControls.ChartPreviewImage.loadChartImage()方法中,该方法的反序列化过程未进行适当的安全限制。
漏洞代码
private ChartImageSessionBlock loadChartImage()
{
byte[] buffer = CustomSessionState.FetchBinaryData(this.sessionKey);
ChartImageSessionBlock result = null;
using (MemoryStream memoryStream = new MemoryStream(buffer))
{
IFormatter formatter = new BinaryFormatter();
result = (ChartImageSessionBlock)formatter.Deserialize(memoryStream);
}
return result;
}
补丁分析
微软通过添加类型限制绑定器来修复此漏洞,限制了可以反序列化的类型。
漏洞利用机制
利用流程
- 会话状态控制:攻击者需要控制SharePoint数据库中的会话状态数据
- 反序列化触发:通过特定请求触发反序列化过程
- 代码执行:精心构造的序列化数据导致任意代码执行
关键利用点
- 会话密钥格式:
guid1_guid2,其中guid1是数据库ID,guid2是ChartImageSessionBlock的ID - 请求触发点:
/_layouts/15/Chart/WebUI/Controls/ChartPreviewImage.aspx - 参数要求:需要提供有效的
sk(sessionKey)参数
详细利用步骤
前置条件
- 拥有一个具有创建页面权限的SharePoint账户
- 目标系统运行受影响版本的SharePoint
利用步骤
-
创建InfoPath列表:
- 在目标SharePoint站点上创建一个InfoPath列表
-
获取itemId:
- 打开表单在列表中创建新项目
- 保存响应中的itemId
-
上传恶意附件:
- 向该项目附加包含恶意负载的文件
- 不要保存表单,确保会话状态保留在数据库中
-
获取attachmentId:
- 将itemId信息发送到
FormServerAttachments.aspx - 从响应中提取attachmentId
- 将itemId信息发送到
-
触发漏洞:
- 构造包含attachmentId的请求到ChartPreviewImage
- 触发反序列化过程执行任意代码
关键请求格式
触发漏洞的请求示例:
GET /_layouts/15/Chart/WebUI/Controls/ChartPreviewImage.aspx?sk=5264ebfb259840faa703bdbc976e069b_74929f85360d499d9f1d4f337bf49300&hash=2551012 HTTP/1.1
Host: sharepoint2016:33257
Referer: http://sharepoint2016:33257/SitePages/testpage.aspx
获取附件数据的请求:
GET /_layouts/15/FormServerAttachments.aspx?fid=[fid]&sid=[sid]&key=[key]&dl=ip HTTP/1.1
其中key参数需要特定格式的base64编码数据,结构如下:
- base64ItemState (int) - 必须为4(Base64ItemState.DelayLoad)
- dataTypeInSessionState (int) - 必须为2(ByteArray)
- base64SerializationId (引导字符串)
- serializedKey (字符串) - 格式为guid1_guid2
- size (整数)
- version (整数)
权限要求
默认情况下,普通账户有权创建子站点,并在新站点上拥有完全权限。因此,只需要一个具有默认权限的账户即可利用此漏洞。
防御措施
- 及时安装微软发布的补丁
- 限制SharePoint的匿名访问
- 实施最小权限原则
- 监控异常的反序列化请求
参考资源
- ZDI关于类似漏洞的分析
- 微软官方安全公告
- SharePoint安全最佳实践文档
概念验证视频
总结
CVE-2022-22005是一个严重的SharePoint远程代码执行漏洞,攻击者可以通过控制会话状态数据并触发反序列化过程来执行任意代码。该漏洞利用需要一定的SharePoint知识,但利用门槛相对较低。建议所有SharePoint管理员立即应用相关补丁并检查系统安全配置。