深入解析IIS FastCGI请求头漏洞的可利用性

本文详细分析了MS10-065安全更新中涉及的IIS FastCGI请求头缓冲区溢出漏洞(CVE-2010-2730),探讨其技术细节、远程代码执行的可能性以及实际利用中面临的技术挑战,帮助评估风险并优先部署更新。

MS10-065: IIS FastCGI请求头漏洞的可利用性分析

本月,微软发布了针对IIS的三个漏洞的更新。本文重点关注其中之一:请求头缓冲区溢出漏洞(CVE-2010-2730),该漏洞影响IIS 7.5版本,最大安全影响为远程代码执行(RCE)。以下我们提供有关漏洞的更多细节以及可靠远程代码执行的可能性,以帮助评估风险并优先部署更新。我们还旨在缓解恶意软件利用此漏洞在网络中传播的担忧。

漏洞详情

CVE-2010-2730影响运行IIS且配置为非默认设置的Windows服务器。如果启用了FastCGI处理程序(例如,以支持第三方服务器端脚本语言),系统在处理HTTP请求头时可能容易发生堆缓冲区溢出。

成功的利用将允许远程攻击者在IIS工作进程的上下文中执行代码。

有关更多详细信息,请参阅安全公告MS10-065。

可利用性详情

虽然理论上可能导致RCE的成功利用是可能的,但存在一些技术因素使其不太可能发生。实际上,攻击更可能导致IIS工作进程崩溃,并在服务达到其重启限制时导致拒绝服务(DoS)条件。让我们看看阻碍利用的因素:

易受攻击的代码处理来自客户端的HTTP请求头——这些完全在攻击者的控制之下。初始缓冲区在堆上分配,用于存储请求头名称和值,并根据需要调整大小,直到处理完所有客户端的头。

此时,尚未发生缓冲区溢出。代码然后继续将预定义的参数复制到缓冲区,假设之前的代码已保留足够的空间。在某些情况下,这将导致缓冲区溢出。写入缓冲区的数据采用以下格式:

名称:字符串指针 名称长度:整数 值:字符串指针 值长度:整数

在发生缓冲区溢出时,只有名称和名称长度字段被填充(非零)——代码将在这些参数附加到缓冲区后检索每个参数的值。

需要注意的重要一点是,写入缓冲区末端之外的任何数据都不在攻击者的控制之下。名称字段将指向IIS工作进程中的字符串数据。由于ASLR,指针值将是不可预测的。名称长度字段将是可预测的低值整数,但对攻击者没有太大用处。

一旦这些参数的值被填充,值字段将指向字符串数据,值长度也将是一个低值整数。(字符串的内容可能由攻击者控制)。

结论

为了获得可靠的RCE利用,攻击者需要能够预测或控制上述值,并在一定程度上控制堆缓冲区的布局。由于写入缓冲区末端之外的数据缺乏控制或可预测性,此漏洞将难以或不可能可靠地利用。

因此,尝试利用此漏洞更可能导致DoS而不是RCE。

我要感谢Nazim Lala、Bruce Dang和Charles Weidner在此问题上的工作。

  • Mark Wodrich, MSRC Engineering

发布内容“按原样”提供,不提供任何保证,也不授予任何权利。

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