通过补丁比对来寻找微软3月补丁修复的ntfs漏洞

admin 2025年3月26日14:30:05评论26 views字数 1879阅读6分15秒阅读模式

通过补丁比对来寻找微软3月补丁修复的ntfs漏洞

背景

微软在3月补丁修复了四个NTFS相关的漏洞,其中有三个检测到了在野利用:

通过补丁比对来寻找微软3月补丁修复的ntfs漏洞

本文我们就通过diff的方式来寻找其中的一个漏洞修复,并尝试做一个poc出来。

比对

可以看到其中一个补丁位于ReadRestartTable函数:

__int64 __fastcall ReadRestartTable(        __int64 Context,        __int64 StartContext,        __int64 QuadPart,        __int64 a4,        _DWORD *p_NumberOfBytes){  ...if ( (unsignedint)Feature_1347162426__private_IsEnabledDeviceUsageNoInline() )    {    v10 = v9[7];    n40 = 8 * v10 + 32;if ( (unsigned __int16)v10 <= 1u )      n40 = 40;if ( !NtfsCheckRestartTable((unsigned __int16 *)((char *)v9 + n40), *(_DWORD *)(a4 + 64) - v9[2], a8) )    {      NtfsAttachCorruptionSimple(Context, 1u0x802u0xE2001E0391i64, 0);      NtfsAttachRepairInfoPriv(Context, 00i64, (struct _LIST_ENTRY *)0xE2001E0391i64);if ( (_BYTE)NtfsStatusDebugFlags )        NtfsStatusTraceAndDebugInternal(Context, 0xC00000320x1E0391u);      NtfsRaiseStatusInternal(Context, 0xC0000032000x1E0391i64);    }    }else    {if ( !NtfsCheckRestartTable((unsigned __int16 *)((char *)v9 + v9[2]), *(_DWORD *)(a4 + 64) - v9[2], a8) )    {      NtfsAttachCorruptionSimple(Context, 1u0x802u0xE2001E0398i64, 0);      NtfsAttachRepairInfoPriv(Context, 00i64, (struct _LIST_ENTRY *)0xE2001E0398i64);if ( (_BYTE)NtfsStatusDebugFlags )        NtfsStatusTraceAndDebugInternal(Context, 0xC00000320x1E0398u);      NtfsRaiseStatusInternal(Context, -1073741774001967000i64);    }    v12 = v9[7];    n40 = 8 * v12 + 32;if ( (unsigned __int16)v12 <= 1u )      n40 = 40;    }    *p_NumberOfBytes = *(_DWORD *)(a4 + 64) - n40;return (__int64)v9 + n40;    ...}

poc

跟一下函数调用链,结合Windows源码进行比对,推测这个漏洞可能是出现在vhd文件在挂载后未被正确卸载,再次挂载时出现的问题。

我们使用Windows的磁盘管理工具创建一个ntfs格式的vhd,这里不用很大的vhd,我创建了一个8MB的就可以,创建好后格式化为NTFS:

通过补丁比对来寻找微软3月补丁修复的ntfs漏洞

然后把创建好的vhd进行挂载,直接复制一份vhd文件到我们的虚拟机,此时因为vhd未被卸载就直接复制,就能触发恢复操作。

接着在windbg里给漏洞函数ReadRestartTable打上断点,挂载后进入到目标函数:

通过补丁比对来寻找微软3月补丁修复的ntfs漏洞

运行到猜测可能有问题的指令,查看这里的内存:

通过补丁比对来寻找微软3月补丁修复的ntfs漏洞
通过补丁比对来寻找微软3月补丁修复的ntfs漏洞

这里rsi+0x0e的位置即是rcx(已经被我改成了0xd,原本是0),我直接在vhd文件中搜索附近内存找到了这个值:

通过补丁比对来寻找微软3月补丁修复的ntfs漏洞

尝试对其进行修改,最终在0xd时触发崩溃:

通过补丁比对来寻找微软3月补丁修复的ntfs漏洞
通过补丁比对来寻找微软3月补丁修复的ntfs漏洞
通过补丁比对来寻找微软3月补丁修复的ntfs漏洞

漏洞具体原因需要对NTFS的恢复过程以及NTFS的文件格式进行逆向,我可能会在完成研究后发表在后续文章中,敬请关注。

通过补丁比对来寻找微软3月补丁修复的ntfs漏洞

原文始发于微信公众号(BeFun安全实验室):通过补丁比对来寻找微软3月补丁修复的ntfs漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月26日14:30:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   通过补丁比对来寻找微软3月补丁修复的ntfs漏洞https://cn-sec.com/archives/3886653.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息