安全研究

安全漏洞
Microsoft IIS CGI文件名错误解码漏洞(MS01-026)

发布日期:2001-05-15
更新日期:2001-05-15

受影响系统:
Microsoft IIS 3.0
    - Microsoft Windows NT 4.0 SP6a
    - Microsoft Windows NT 4.0 SP6
    - Microsoft Windows NT 4.0 SP5
    - Microsoft Windows NT 4.0 SP4
    - Microsoft Windows NT 4.0 SP3
    - Microsoft Windows NT 4.0 SP2
    - Microsoft Windows NT 4.0 SP1
    - Microsoft Windows NT 4.0
Microsoft IIS 4.0
    - Microsoft Windows NT 4.0 SP6a
    - Microsoft Windows NT 4.0 SP6
    - Microsoft Windows NT 4.0 SP5
    - Microsoft Windows NT 4.0 SP4
    - Microsoft Windows NT 4.0 SP3
    - Microsoft Windows NT 4.0 SP2
    - Microsoft Windows NT 4.0 SP1
    - Microsoft Windows NT 4.0
Microsoft IIS 5.0
    - Microsoft Windows 2000 Server SP2
    - Microsoft Windows 2000 Server SP1
    - Microsoft Windows 2000 Server
    - Microsoft Windows 2000 Professional SP2
    - Microsoft Windows 2000 Professional SP1
    - Microsoft Windows 2000 Professional
    - Microsoft Windows 2000 Datacenter Server SP2
    - Microsoft Windows 2000 Datacenter Server SP1
    - Microsoft Windows 2000 Datacenter Server
    - Microsoft Windows 2000 Advanced Server SP2
    - Microsoft Windows 2000 Advanced Server SP1
    - Microsoft Windows 2000 Advanced Server
Microsoft Personal Web Server 1.0
    - Microsoft Windows 95
Microsoft Personal Web Server 3.0
    - Microsoft Windows NT 4.0 SP6a
    - Microsoft Windows NT 4.0 SP6
    - Microsoft Windows NT 4.0 SP5
    - Microsoft Windows NT 4.0 SP4
    - Microsoft Windows NT 4.0 SP3
    - Microsoft Windows NT 4.0 SP2
    - Microsoft Windows NT 4.0 SP1
    - Microsoft Windows NT 4.0
    - Microsoft Windows 98
描述:
BUGTRAQ  ID: 2708
CVE(CAN) ID: CVE-2001-0333

IIS 是微软出品的一个广泛应用的Internet Web服务器软件,随Windows NT和Windows 2000捆绑发售。默认情况下IIS的某些目录是允许通过提交HTTP请求执行可执行文件的。

NSFOCUS安全小组发现微软IIS 4.0/5.0在处理CGI程序文件名时存在一个安全漏洞,由于错误地对文件名进行了两次解码,远程攻击者可能利用此漏洞以Web进程的权限在主机上执行任意系统命令。

IIS在加载可执行CGI程序时,会进行两次解码。第一次解码是对CGI文件名进行http解码,然后判断此文件名是否为可执行文件,例如检查后缀名是否为".exe"或".com"等等。在文件名检查通过之后,IIS会再进行第二次解码。正常情况下,应该只对该CGI的参数进行解码,然而,IIS错误地将已经解码过的CGI文件名和CGI参数一起进行解码。这样,CGI文件名就被错误地解码了两次。

通过精心构造CGI文件名,攻击者可以绕过IIS对文件名所作的安全检查,例如对"../"或"./"的检查,在某些条件下,攻击者可以执行任意系统命令。

例如,对于'\'这个字符,正常编码后是%5c。这三个字符对应的编码为:
'%' = %25
'5' = %35
'c' = %63

如果要对这三个字符再做一次编码,就可以有多种形式,例如:
%255c
%%35c
%%35%63
%25%35%63
...

因此,"..\"就可以表示成"..%255c"或"..%%35c"等等形式。

在经过第一次解码之后,变成"..%5c"。IIS会认为这是一个正常的字符串,不会违反安全规则检查。而在第二次被解码之后,就会变成"..\"。因此攻击者就可以使用"..\"来进行目录遍历,执行Web目录之外的任意程序。


<*来源:Nsfocus Security Team (security@nsfocus.com
  
  链接:http://www.cert.org/advisories/CA-2001-12.html
        http://www.microsoft.com/technet/security/bulletin/MS01-026.asp
        http://www.nsfocus.com/sa01-02.htm
*>

测试方法:

警 告

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

NSFOCUS Security Team (security@nsfocus.com)提供了如下测试方法:

如果TARGET存在一个虚拟可执行目录(scripts),并且它与
windows系统在同一驱动器上。那么提交类似下列请求:

http://TARGET/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\

就会列出C:\的根目录。

当然,对于'/'或者'.'做变换同样可以达到上面的效果。
例如:"..%252f", ".%252e/"...

注意:攻击者只能以IUSER_machinename用户的权限执行命令。

建议:
临时解决方法:

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

* 如果不需要可执行的CGI,可以删除可执行虚拟目录,例如 /scripts 等等。

* 如果确实需要可执行的虚拟目录,建议将可执行虚拟目录单独放在一个分区,将所有可被攻击者利用的命令行工具移到另外一个目录中并禁止GUEST组访问。

厂商补丁:

Microsoft
---------
Microsoft已经为此发布了一个安全公告(MS01-026)以及相应补丁:
MS01-026:14 May 2001 Cumulative Patch for IIS
链接:http://www.microsoft.com/technet/security/bulletin/MS01-026.asp

补丁下载:

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

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

浏览次数:13917
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障