首页 -> 安全研究

安全研究

绿盟月刊
绿盟安全月刊->第30期->最新漏洞
期刊号: 类型: 关键词:
Microsoft IIS 4.0/5.0 .asp映射分块编码远程缓冲区溢出漏洞

出处:Riley Hassell
日期:2002-04-12

更新日期: 2002-4-12
受影响的系统:  
Microsoft IIS 4.0
    - Microsoft Windows NT 4.0
Microsoft IIS 5.0
    - Microsoft Windows 2000

描述:
--------------------------------------------------------------------------

BUGTRAQ  ID: 4485
CVE(CAN) ID: CAN-2002-0079

Microsoft IIS(Internet Information Server)是MS Windows系统默认自带的Web服务器软件。

IIS 4.0/5.0 ASP (Active Server Pages) ISAPI过滤器存在远程缓冲区溢出漏洞,远程攻击者可以利用此漏洞得到主机本地普通用户访问权限。

默认安装的IIS 4.0/5.0服务器加载了ASP ISAPI过滤器,它在处理分块编码传送(chunked encoding transfer)机制的代码中存在一个缓冲区溢出漏洞。攻击者通过提交恶意分块编码的数据可以覆盖heap区的内存数据,使之以他指定的数据重写任意地址的4字节内存。例如,攻击者可以让dllhost.exe重写它可以访问的任意4字节的内存,包括程序函数指针、意外处理模块指针或其他任何可以用来控制程序执行流程的地址,从而改变程序执行流程,执行任意攻击者指定的代码。

如果攻击者使用随机数据,可能使IIS服务崩溃(IIS 5.0会自动重启)。如果精心构造发送的数据,也可能允许攻击者执行任意代码。

成功地利用这个漏洞,对于IIS 4.0,远程攻击者可以获取SYSTEM权限;对于IIS 5.0攻击者可以获取IWAM_computername用户的权限。

<*来源:Riley Hassell (riley@eeye.com)
  
  链接:http://www.microsoft.com/technet/security/bulletin/MS02-018.asp
        http://www.eeye.com/html/Research/Advisories/AD20020410.html
        http://www.cert.org/advisories/CA-2002-09.html
*>

测试程序:
--------------------------------------------------------------------------
警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

Riley Hassell (riley@eeye.com)提供了如下测试方法:

以下的演示可重现问题,使用一个打了最新补丁的Windows 2000系统,安装一个默认的.asp页面:

**************会话开始****************
POST /iisstart.asp HTTP/1.1
Accept: */*
Host: eeye.com
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked

10
PADPADPADPADPADP
4
DATA
4
DEST
0
[enter]
[enter]
**************会话结束******************

上面的会话导致从dllhost的子进程中执行默认意外处理模块,会弹出消息:

DLLHOST.EXE - Application error
The instruction at 0x77fcb397 referenced memory at 0x54534544

其中0x54534544代表“TSED”,在little endian架构的机器上代表“DEST”。DLLHOST.EXE试图把“DATA”拷贝到“DEST”,因为0x54534544地址的内存不可写,发生访问错误,NT Kernel中的结构化意外处理模块(structured exception handling)捕获了这个信号杀掉了dllhost.exe进程。

问题在于上述会话用自己的数据重写了堆管理头结构(被AllocateHeap()所使用)中两个4字节的数据。在上面演示中,会话用“DATA”重写了第一个4字节的内存,它的内容将会被写到第二个4字节内存中指定的地址中去,当然也用“DEST”重写了第二个4字节的内存,因此,指定内容“DATA”会被程序试图写到地址为0x54534544(“DEST”)的内存里去。通过重写这两个4字节的数据,可以让dllhost.exe重写它可以访问的任意4字节的内存,包括程序函数指针、意外处理模块指针或其他任何可以用来控制程序执行流程的地址。

需要注意的是虽然这个漏洞存在于.ASP ISAPI,但还是需要一个机制来提交Shellcode等利用代码,有表单的ASP程序当然是比较方便,可以通过表单变量提交,如果没有表单,也可以通过HTTP请求头中的服务器变量提交。

-------------------------------------------------------------------------
建议:

临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 如果您不需要使用ASP脚本,您应该立刻删除".asp"的脚本映射。

   可以参考如下步骤删除上述脚本映射:

   1. 打开Internet 服务管理器                                             
   2. 右击你的服务器(例如 "* nsfocus"),在菜单中选择"属性"栏            
   3. 选择"主属性"                                                        
   4. 选择 WWW 服务 | 编辑 | 主目录 | 配置                                
   5. 在扩展名列表中删除".asp"项。                                
   6. 保存设置,然后重启IIS服务。

* 您可以使用微软提供的一个安全工具URLScan来屏蔽分块编码请求。
  如果您已经安装了URLScan,它缺省不会禁止分块编码请求,您可以在URLScan.ini中的[DenyHeaders]域中增加下列语句:
  
  Transfer-Encoding:
  
  这样就可以屏蔽分块编码请求了。
  
  微软也已经提供了一个URLScan的升级版,它缺省就禁止了分块编码请求。您可以在下列地址下载该安全工具:
  http://www.microsoft.com/technet/security/URLScan.asp

厂商补丁:

Microsoft
---------
Microsoft已经为此发布了一个安全公告(MS02-018)以及相应补丁:
MS02-018:Cumulative Patch for Internet Information Services (Q319733)
链接:http://www.microsoft.com/technet/security/bulletin/MS02-018.asp

补丁下载:

    * Microsoft IIS 4.0:
       http://www.microsoft.com/Downloads/Release.asp?ReleaseID=37931

     * Microsoft IIS 5.0:
       http://www.microsoft.com/Downloads/Release.asp?ReleaseID=37824


版权所有,未经许可,不得转载