首页
社区
课程
招聘
4
[原创]CVE-2022-37969 CLFS 提权漏洞
发表于: 2023-5-26 18:34 22741

[原创]CVE-2022-37969 CLFS 提权漏洞

2023-5-26 18:34
22741

大佬可直接转至https://www.zscaler.com/blogs/security-research/technical-analysis-windows-clfs-zero-day-vulnerability-cve-2022-37969-part
照着文章复现一遍
通用日志文件系统(CLFS)是一种通用的日志记录子系统,可供运行在内核模式和用户模式下的应用程序使用,用于构建高性能的事务日志,并在驱动程序CLFS.sys中进行实现。通用日志文件系统在基本日志文件(BLF)中生成事务日志。
CLFS的官方文档:https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/introduction-to-the-common-log-file-system
CLFS的非官方文档:https://github.com/ionescu007/clfs-docs/blob/main/README.md

blf 日志文件格式

图片描述
基本日志文件由六个不同的元数据块组成,控制块(Control Block)、基本块(Base Block)和截断块(Truncate Block)以及它们对应的影子块。三种类型的记录(控制记录、基本记录和截断记录((Control Record, Base Record, and Truncate Record))可以驻留在这些块中。 Base Record包含符号表,这些符号表存储有关与基本日志文件关联的客户端上下文、容器上下文和安全上下文的信息。
每个日志块的都有一个日志块头CLFS_LOG_BLOCK_HEADER,大小为0x70字节的CLFS_LOG_BLOCK_HEADER结构的内存布局如上图所示,结构如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
typedef struct _CLFS_LOG_BLOCK_HEADER
{    
    UCHAR MajorVersion;
    UCHAR MinorVersion;
    UCHAR Usn;
    CLFS_CLIENT_ID ClientId;
    USHORT TotalSectorCount;
    USHORT ValidSectorCount;
    ULONG Padding;
    ULONG Checksum;
    ULONG Flags;
    CLFS_LSN CurrentLsn;
    CLFS_LSN NextLsn;
    ULONG RecordOffsets[16];
    ULONG SignaturesOffset;
} CLFS_LOG_BLOCK_HEADER, *PCLFS_LOG_BLOCK_HEADER;

基本块在.BLF文件的偏移0x800到0x71FF,以Log Block Header (0x70 bytes)开始,然后是基础记录头与记录
基础记录头的的CLFS_BASE_RECORD_HEADER结构如下
图片描述
图片描述
Base Record以大小为 0x1338 字节的标头 (CLFS_BASE_RECORD_HEADER) 开始,后面是相关的上下文数据。在CLFS_BASE_RECORD_HEADER中,与该漏洞相关的一些重要字段说明如下:
rgClients表示指向客户端上下文对象的偏移数组。
rgContainers表示指向容器上下文对象的偏移数组。
cbSymbolZone表示符号区域中新符号的下一个可用偏移量。
在Base Record中 Client Context, Container Context, 和Shared Security Context 用符号表示,他们前面是CLFSHASHSYM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
typedef struct _CLFS_NODE_ID {
   ULONG cType;
   ULONG cbNode;
 } CLFS_NODE_ID, *PCLFS_NODE_ID;
 
  typedef struct _CLFSHASHSYM
{    CLFS_NODE_ID cidNode;
     ULONG ulHash;
     ULONG cbHash;
     ULONGLONG ulBelow;
     ULONGLONG ulAbove;
     LONG cbSymName;
     LONG cbOffset;
     BOOLEAN fDeleted;
 } CLFSHASHSYM, *PCLFSHASHSYM;

CLFSHASHSYM 的内存布局如下
图片描述
在Base Record,中,客户端上下文(client context )用于标识日志文件的客户端。在基础日志文件中至少可以创建一个客户端上下文。CLFS_CLIENT_CONTEXT结构如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
typedef struct _CLFS_CLIENT_CONTEXT
 {
     CLFS_NODE_ID cidNode;
     CLFS_CLIENT_ID cidClient;
     USHORT fAttributes;
     ULONG cbFlushThreshold;
     ULONG cShadowSectors;
     ULONGLONG cbUndoCommitment;
     LARGE_INTEGER llCreateTime;
     LARGE_INTEGER llAccessTime;
     LARGE_INTEGER llWriteTime;
     CLFS_LSN lsnOwnerPage;
     CLFS_LSN lsnArchiveTail;
     CLFS_LSN lsnBase;
     CLFS_LSN lsnLast;
     CLFS_LSN lsnRestart;
     CLFS_LSN lsnPhysicalBase;
     CLFS_LSN lsnUnused1;
     CLFS_LSN lsnUnused2;
     CLFS_LOG_STATE eState; //+0x78
     union
     {
         HANDLE hSecurityContext;
         ULONGLONG ullAlignment;
     };
 } CLFS_CLIENT_CONTEXT, *PCLFS_CLIENT_CONTEXT;

在Base Record中,container context与为一个base log文件添加一个容器文件有关
CLFS_CONTAINER_CONTEXT结构如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
typedef struct _CLFS_CONTAINER_CONTEXT
{
     CLFS_NODE_ID cidNode; //8 bytes
     ULONGLONG cbContainer; //8 bytes
     CLFS_CONTAINER_ID cidContainer; // 4 bytes
     CLFS_CONTAINER_ID cidQueue; // 4 bytes
     union
     {
         CClfsContainer* pContainer; //8 bytes
         ULONGLONG ullAlignment;
     };
     CLFS_USN usnCurrent;
     CLFS_CONTAINER_STATE eState;
     ULONG cbPrevOffset; //4 bytes
     ULONG cbNextOffset; //4 bytes
 } CLFS_CONTAINER_CONTEXT, *PCLFS_CONTAINER_CONTEXT;

pContainer是指向运行时表示容器的CClfsContainer对象的内核指针,该指针位于CLFS_CONTAINER_CONTEXT结构的偏移0x18处
图片描述

poc编写

文章中给出了部分poc
图片描述

 

[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2023-6-7 11:16 被hml189编辑 ,原因: 增加内容
收藏
免费 4
支持
分享
赞赏记录
参与人
雪币
留言
时间
Ally Switch
+1
为你点赞!
2024-11-6 21:45
PLEBFE
为你点赞~
2023-12-26 00:33
王cb
为你点赞~
2023-7-22 17:23
hml189
为你点赞~
2023-6-5 17:55
最新回复 (3)
雪    币: 3937
活跃值: (31411)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2023-10-16 09:08
1
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
师傅,poc代码可以分享一下吗?我看到师傅写Poc见附件,但是没找到QAQ
2024-11-28 09:51
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册