栈溢出与栈缓冲区溢出的关键区别:安全影响深度解析

本文详细解析栈溢出(栈耗尽)与栈缓冲区溢出的区别,通过实际案例说明栈溢出不会直接导致远程代码执行,并探讨其安全影响及微软的处理流程。文章还引用了相关研究,说明在特定条件下栈溢出可能与其他漏洞结合产生安全风险。

栈溢出(栈耗尽)与栈缓冲区溢出的区别

定期我们会收到关于客户端应用程序(如 Internet Explorer、Word 等)中栈耗尽的报告。这些是有效的稳定性错误,幸运的是,它们本身不会导致可利用的条件(没有权限提升的潜力)。我们想澄清栈耗尽和栈缓冲区溢出之间的区别。栈缓冲区溢出通常会导致权限提升。不幸的是,文献倾向于使用“栈溢出”来指代这两种情况,因此造成了混淆。错误代码 STATUS_STACK_BUFFER_OVERRUN (0xc0000409) 指的是栈缓冲区溢出,而错误代码 STATUS_STACK_OVERFLOW (0xc00000fd) 指的是栈耗尽。

今天早上在 Bugtraq 上,有一个公开的栈耗尽错误帖子,幸运的是,它不会导致任意代码执行。让我们仔细看看它和其他几个例子。我们从今天的 Bugtraq 帖子开始:

1
<INPUT type="text" name="A" value="CCCCCCCCCCCCCCCCCCCC(数千个字符)">

当 IE 尝试解析此 HTML 时,它会耗尽栈空间。连接 Windbg,您将观察到以下首次异常:

1
2
3
4
5
6
7
(f9c.5b8): Stack overflow - code c00000fd (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=00000000 ebx=0337304c ecx=09410040 edx=0007c3c0 esi=00000000 edi=0346b800
eip=77f66627 esp=03373000 ebp=03373000 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010206
77f66627 56              push    esi

栈只是耗尽了,在这种情况下没有运行任意代码的可能性。让我们看看其他几个例子。

下一个问题最近也在 IE 中报告:

1
2
3
4
<SCRIPT>
foo = new Array();
while(true) {foo = new Array(foo).sort();}
</SCRIPT>

同样,HTML 请求了异常大量的栈空间。IE 尝试分配空间,最终耗尽。无法处理 HTML,它返回栈溢出/耗尽错误 (0xc00000fd)。

最后一个例子来自 2008 年 4 月,同样导致栈溢出/耗尽错误 (0xc00000fd):

1
2
3
4
5
6
7
8
var str = "aaaaaaaaaaaaaaa(数千个字符)"
document.myform.text.value = str
document.myform.submit()

<form name='myform'>
<input name='text' type='text' />
<input name='Submit' type='submit' />
</form>

如您所见,有几种方法可以达到栈耗尽条件。幸运的是,这些是稳定性问题,本身不会导致远程代码执行。当解析客户端应用程序无法分配足够的栈空间来完成操作时,就会发生这种情况(如这里的例子所示,网页试图分配尽可能多的栈空间,最终耗尽空间)。

我们总是乐于处理发送到 secure@microsoft.com 的错误报告。请将它们发送给我们。我们 definitely 致力于工程和安全卓越。我们评估每个报告,并决定是将其作为安全问题处理,还是将其交给产品团队作为可靠性和稳定性问题修复。对于每个安全问题,我们将根据 SDL bug bar(链接到示例 bug bar)进行分流,并通过 MSRC 安全公告流程处理。所有问题(如这些栈耗尽错误)如果是稳定性或可靠性问题,将根据客户影响进行分流,并在产品的未来版本中解决。

更新于 1 月 29 日:感谢 Mark Dowd 指出,栈耗尽错误如果与缓冲区溢出错误结合,可能会产生安全影响。您可以在 https://www.blackhat.com/presentations/bh-usa-07/Dowd_McDonald_and_Mehta/Whitepaper/bh-usa-07-dowd_mcdonald_and_mehta.pdf 阅读更多关于他的研究。

  • Jonathan Ness, SVRD 博主 发布内容“按原样”提供,不提供任何保证,也不授予任何权利。

参考文献:

可利用性 | 全披露 | Internet Explorer (IE)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计