文章预览
测试环境: 10.0.19045 漏洞出现在 CCommandBuffer::Initialize 函数中。由于分配的内存大小计算错误,导致发生溢出。补丁引入了一个关于可整除的快速检查,如果除法操作有余数,函数将终止,然而内存仍然会被分配 :) 试图追踪漏洞函数的可达路径时,得到了如下结果。 图表 从调用树来看,我们有三个选择: CSurfaceBrush::GetBrushParameters 。 CPrimitiveGroup::GenerateDrawList 。 CPrimitiveGroup::GetTextureMemoryLayoutData 。 我选择了 CSurfaceBrush 来创建触发条件。 我创建了一个可执行 PoC 代码,它可以到达 CCommandBuffer::Initialize 代码。在创建过程中,我依赖于在 CSurfaceBrush::GetBrushParameters 函数上设置断点后获得的标准堆栈跟踪。为了创建这个 PoC,我使用了 HelloComposition 示例,从中可以看出如何构建资源树以到达漏洞代码。 这是 HelloComposition 用于在窗口中绘制随机大小且
………………………………