IIS中Http.sys处理Range整数溢出漏洞及修复建议

 一、漏洞概要

2015年04月14日,微软发布严重级别的安全公告 MS15-034,编号为 CVE-2015-1635,据称在 Http.sys  中的漏洞可能允许远程执行代码。

     漏洞描述

Http.sys 是一个位于 Windows 操作系统核心组件,能够让任何应用程序通过它提供的接口,以 Http 协议进行信息通讯。微软在 Windows 2003 Server 里引进了新的 HTTP API 和内核模式驱动 Http.sys,目的是使基于 Http 服务的程序更有效率。其实在 Windows XP 安装 SP2 后,Http.sys 已经出现在系统里了,但事实上操作系统并没有真的使用这个内核级驱动,而 XP 上自带的 IIS 5.1 也没有使用 HTTP API。

从曝出的 POC 来看,此漏洞是一个整数溢出类型的漏洞,微软安全公告称最大安全影响是远程执行代码。

    漏洞影响

受影响版本:

IIS 7.0以上的Windows 7/8/8.1和Windows Server 2008 R2/Server 2012/Server 2012 R2等操作系统。

    漏洞分析

根据补丁比较发现,POC 中提到的代码出现在 UlpParseRange 函数中修改的部分。

在未打补丁的 Http.sys 文件的 UlpParseRange 函数中,代码如下。

可以看到,在计算 64 位整数时直接进行了运算,没有进行必要的整数溢出检查。

而在打补丁的 Http.sys 文件的 UlpParseRange 函数中,修改代码如下。

用 RtlULongLongAdd 函数来计算 Range 范围长度 v18,这个函数中是做了整数溢出检查的。

再看一下对 RtlULongLongAdd 函数的调用情况。

在未打补丁的 Http.sys 文件中只有 1 处调用了 RtlULongLongAdd 函数。

而在打补丁的 Http.sys 文件中总共有 13 处调用了 RtlULongLongAdd 函数进行整数溢出检查,说明有漏洞的系统中可能有多个处理流程会涉及到整数溢出造成的安全问题。

通过补丁比较确定了修改过的函数如下。

经过分析发现,UlAdjustRangesToContentSize 函数中的整数溢出点,才是导致漏洞能发挥作用的关键流程。

这段代码还是采用了直接运算 64 位整数的方式,没有检查是否溢出,在补丁文件中替换为调用 RtlULongLongAdd 函数。

这部分代码的功能是判断获取文件偏移量的范围,是否会超过请求缓存文件的数据长度,如果超出就把读取长度 修改为合适的大小,防止越界访问数据。但是由于发生了整数溢出,使得判断越界的代码失效,这样就不会修改读取长度,造成用可控的长度值越界访问数据。

但是如果要成功利用此漏洞还需要一些必要的条件,具体细节有待进一步分析。

    漏洞验证

可以使用以下 Python 程序对系统进行漏洞检测。

    import socket
    import random

    ipAddr = "192.168.154.130"
    hexAllFfff = "18446744073709551615"

    req1 = "GET /HTTP/1.0\r\n\r\n"
    req = "GET /HTTP/1.1\r\nHost: stuff\r\nRange: bytes=0-" + hexAllFfff + "\r\n\r\n"

    print "[*] AuditStarted"
    client_socket =socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((ipAddr, 80))
    client_socket.send(req1)
    boringResp = client_socket.recv(1024)

    if "Microsoft" not in boringResp:
        print "[*] Not IIS"
    exit(0)

    client_socket.close()
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((ipAddr,80))
    client_socket.send(req)
    goodResp = client_socket.recv(1024)

    if "Requested RangeNot Satisfiable" in goodResp:
        print "[!!] Looks VULN"
    elif " The requesthas an invalid header name" in goodResp:
        print "[*] Looks Patched"
    else:
        print "[*] Unexpected response,cannot discern patch status"

如果打印出“Looks VULN”,说明系统存在漏洞。

二、ZoomEye 应急概要

知道创宇安全研究团队通过网络空间搜索引擎 ZoomEye 进行全网搜索,得出目前网络空间中可能受影响网站所使用 IIS 版本比例如下所示:

▲受威胁网站使用版本比例

▲全国网站受 IIS 漏洞影响地域分布情况

另外,ZoomEye 搜索结果显示,全国受漏洞威胁的网站总数达 795,317  个,超过我国网站总数的五分之一,从区域分布来看,排在首位的北京地区共  276,39  个,对漏洞的修复工作刻不容缓。请网络管理员尽快打补丁修复,官方补丁下载地址:

    https://support.microsoft.com/zh-cn/kb/3042553。

三、修复建议

通过 Windows 更新机制,选择 KB3042553 安全更新进行系统升级。

此漏洞在线验证地址:http://www.scanv.com/lab

四、相关资源链接

    https://technet.microsoft.com/zh-cn/library/security/ms15-034

时间: 2024-09-27 19:03:14

IIS中Http.sys处理Range整数溢出漏洞及修复建议的相关文章

绿盟科技网络安全威胁周报2017.28 关注Nginx远程整数溢出漏洞CVE-2017-7529

绿盟科技发布了本周安全通告,周报编号NSFOCUS-17-28,绿盟科技漏洞库本周新增74条,其中高危53条.本次周报建议大家关注 Nginx 远程整数溢出漏洞 .目前厂商已经发布了升级补丁以修复这个安全问题,请到 厂商主页 下载更新. 焦点漏洞 Nginx 远程整数溢出漏洞 NSFOCUS ID  37146 CVE ID  CVE-2017-7529 受影响版本 Nginx Nginx 0.5.6-1.13.2 漏洞点评 Nginx是一款使用非常广泛的高性能web服务器.Nginx 0.5.

绿盟科技互联网安全威胁周报2016.31 Memcached多个整数溢出漏洞CVE-2016-8704

绿盟科技发布了本周安全通告,周报编号NSFOCUS-16-31,绿盟科技漏洞库本周新增31条,其中高危21条.本次周报建议大家关注持续关注Memcached多个整数溢出漏洞CVE-2016-8704.CVE-2016-8705.CVE-2016-8706,目前官方已发布修补后的最新版本,请广大用户检查自身Memcache版本,尽快升级. 焦点漏洞 Memcached多个整数溢出漏洞 CVE ID CVE-2016-8704 CVE-2016-8705 CVE-2016-8706 受影响版本 ve

PHP5.2下chunk_split()函数整数溢出漏洞 分析_php文摘

受影响系统:PHP PHP < 5.2.3不受影响系统:PHP PHP 5.2.3描述:--------------------------------------------------------------------------------BUGTRAQ ID: 24261CVE(CAN) ID: CVE-2007-2872 PHP是一种流行的WEB服务器端编程语言. PHP中的chunk_split函数在处理畸形参数时存在整数溢出漏洞,本地攻击者可能利用此漏洞提升自己的权限. PHP中

IIS中常见的十八个安全漏洞

iis|安全|安全漏洞 1. iis4hack缓冲溢出 主要存在于.htr,.idc和.stm文件中,其对关于这些文件的URL请求没有对名字进行充分的边界检查,导致运行攻击者插入一些后门程序 在系统中下载和执行程序.要检测这样的站点你需要两个文件iishack.exe,ncx.exe,你可以到下面 的站点www.technotronic.com去下载,另外你还需要一台自己的WEB服务器.你现在你自己的WEB服务器上运行WEB服务程序并把ncx.exe放到你自己相应的目录下,然后使用iishack

PHP 内存管理器符号比较多个溢出漏洞

受影响系统:PHP PHP 5.2.0 不受影响系统:PHP PHP 5.2.1 描述:BUGTRAQ ID: 23238 PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中.PHP的内存管理器实现上存在漏洞,本地攻击者可能利用此漏洞提升权限.如果通过emalloc()函数分配内存的话,PHP中新的Zend内存管理器会在内部的_zend_mm_alloc_int()函数中处理这个请求,首先使用ZEND_MM_TRUE_SIZE宏判断所请求内存块的真实大小,如下所示: s

绿盟科技网络安全威胁周报2017.01 请关注MatrixSSL堆缓冲区溢出漏洞CVE-2016-6890

绿盟科技发布了本周安全通告,周报编号NSFOCUS-16-39,绿盟科技漏洞库本周新增30条,其中高危9条.本次周报建议大家关注 MatrixSSL 堆缓冲区溢出漏洞 ,目前,此漏洞已经公布了一段时间并且官方已经进行了修复,强烈建议仍在使用受影响版本的用户进行升级. 焦点漏洞 MatrixSSL 堆缓冲区溢出漏洞 NSFOCUS ID  35726 CVE ID  CVE-2016-6890 受影响版本 3.8.5 漏洞点评 MatrixSSL是SSL/TLS的开源实现,主要应用于嵌入式系统中.

Cisco Nexus 7000和7700交换机OTV缓冲区溢出漏洞 绿盟科技专家给出变通防护方案

2016年10月5日,思科官网发布了存在于Cisco Nexus 7000系列和7700系列交换机中的OTV技术存在缓冲区溢出漏洞,此漏洞编号为CVE-2016-1453.该漏洞将导致攻击者执行任意代码,或者思科交换机的全部权限.官方已经给出升级补丁,如果您的交换机暂时无法升级,绿盟科技的专家给出了变通防护方案. 该漏洞位于Overlay Transport Virtualization(OTV)技术的GRE隧道协议实现中,由于对OTV包头部的参数没有进行完整校验,导致攻击者可以通过向受影响设备

虚拟机危险!一个存在11年的缓冲区溢出漏洞--毒液

本文讲的是 虚拟机危险!一个存在11年的缓冲区溢出漏洞--毒液,CrowdStrike的研究人员昨日声称,他们发现当今大多数最流行的虚拟机平台软件中,都存在一个缓冲区溢出漏洞,该漏洞能够潜在的导致攻击者访问主机. 雪上加霜的是,即使管理员禁止访问虚拟软盘驱动代码(话说这年代谁还用软盘?),另一个完全无关的漏洞,仍然允许该代码被访问. 由于害怕媒体放大漏洞危害而引起恐慌,研究人员在建立了介绍及修补"毒液"漏洞的网站之后才通知了媒体. 研究人员将这个漏洞称为"毒液"(V

如何在IIS中绑定两个域名并且独立运行

有两个网站,采用两个域名访问,可是服务器只有一个固定IP地址,如何在一个服务器上同时加上两个网站,并且独立运行? 首先在IIS中将两个网站按照正常的方式添加.随后选中第二个站点名称并单击右键,在弹出的菜单中选择"属性",在"网络标志"项下单击"IP地址"右侧的"高级"按钮,打开"高级网站标志"对话框,单击"添加"按钮后,在"IP地址"中选中本地IP地址,在"