XP SP3范围检查隐藏溢出条件?| MSRC博客
我们收到了一些关于完整披露帖子http://seclists.org/fulldisclosure/2007/Dec/0470.html的询问,该帖子指出Windows XP SP3为终端服务器RPC函数RpcWinStationEnumerateProcesses添加了范围检查。推测称此更改是为了隐藏溢出条件,可能导致旧版Windows中存在可被利用的漏洞。实际上,对终端服务RPC接口定义的这一更新是为了更好地遵循我们自身的RPC最佳实践。
从《IDL技术实现更优接口和方法设计》中:
对于标记有[out, size_is]属性元组的参数,当数据长度在客户端已知或客户端有合理上限时,方法定义在参数属性和序列上应类似以下形式:
|
|
在这种情况下,客户端为pArr提供固定大小的缓冲区,允许服务器端RPC服务以较高确信度分配合理大小的缓冲区。请注意,在示例中数据是从服务器接收的([out])。对于传递给服务器的数据([in]),定义类似。
查看IDA反汇编代码,可以看到该值用于从RtlAllocateHeap检索内存块。然后该内存被传递给NtQuerySystemInformation,后者用各种系统信息填充它——正如您所猜测的。如果由于此值存在溢出,它将在这些较低级别的函数中存在并被修复,而不是在高级接口定义中。
反汇编 | 完整披露 | IDA | RPC