Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)

ADLab2019-03-15共23605人围观 ,发现 4 个不明物体安全报告漏洞
https://www.freebuf.com/vuls/197309.html

MS17- 再现的感觉。。。

一 漏洞背景

2月12日,微软发布2月份月度例行安全公告,修复了多个高危漏洞,其中包括Windows DHCP Server远程代码执行漏洞CVE-2019-0626。当攻击者向DHCP服务器发送精心设计的数据包并成功利用后,就可以在DHCP服务中执行任意代码,漏洞影响范围较大。针对此漏洞,启明星辰ADLab第一时间对其进行了详细分析。

二 漏洞影响版本

Windows 7

Windows 8.1

Windows 10

Windows Server 2008

Windows Server 2012

Windows Server 2016

Windows Server 2019

三 协议简介

DHCP,动态主机配置协议,前身是BOOTP协议,是一个局域网的网络协议。DHCP通常用于集中管理分配IP地址,使client动态地获得IP地址、Gateway地址、DNS服务器地址等信息。DHCP客户端和DHCP服务端的交互过程如下图所示。

传输的DHCP协议报文需遵循以下格式:

DHCP包含许多类型的Option,每个Option由Type、Length和Data三个字段组成。

Type取值范围1~255,部分Type类型如下图所示。

DHCP服务在处理VendorSpecific 类型(Type=43)的Option结构存在安全漏洞。首先看下DHCP服务程序对Option的处理过程, ProcessMessage函数负责处理收到的DHCP报文,调用ExtractOptions函数处理DHCP的Option字段,传入函数ExtractOptions的参数1(v7)为DHCP报文指针,参数3(*(unsigned int *)(v5 + 16))对应指针偏移位置+16的数据,即Len字段。

ExtractOption函数如下所示。 v6 = (unsigned__int64)&a1[a3 - 1];指向报文末尾位置;v10=a1+240;指向报文中Option结构。在for循环中处理不同类型的Option结构,当type=43(Vendor Specific Information),传入指针v10和指针v6作为参数,调用ParseVendorSpecific函数进行处理。

ParseVendorSpecific函数内部调用UncodeOption函数。UncodeOption函数参数a1指向option起始位置,a2指向报文的末尾位置。UncodeOption函数存在安全漏洞,下面结合POC和补丁比对进行分析。

四 漏洞分析

构造一个DHCP Discovery报文,POC如下所示,POC包含两个vendor_specific类型的Option结构。vendor_specific1是合法的Option结构,Length取值0x0a等于Data的实际长度(0x0a),vendor_specific2是不合法的Option结构, Length取值0x0f大于Data的实际长度(0x0a)。

(1)DHCP服务器收到Discovery请求报文,对数据包进行处理。首先执行ExtractOptions处理Options,当处理vendor_specific类型的Option时,进入到ParseVendorSpecific进行处理。POC中构造一个合法的vendor_specific1,目的是为了绕过84~85行的校验代码,使程序顺利执行到ParseVendorSpecific函数。

(2)ParseVendorSpecific调用UncodeOption函数。

a. 32~43行在do-while循环中计算Option结构的 Length值之和,保存到v13,作为分配堆内存长度。POC中包含两个vendor_specific结构,首先处理vendor_specific1,计算v13,即vendor_specific1长度a,并且使v12指向下一个Option结构vendor_specific2,当进入43行while条件判断,由于vendor_specific2长度不合法,do-while循环结束。

b. 48行调用HeapAlloc分配堆内存,分配的内存大小v13=a。

c. 51~58行在for循环中依次将vendor_specific结构中的Data拷贝到分配的堆内存中。进入第一次循环时,v1指向vendor_specific1,v8指向末尾位置,满足条件v1<v8,55行调用memcpy将vendor_specific1的Data字段拷贝到分配的堆内存,拷贝长度Length=a。进入第二次循环,v1指向vendor_specific2,v8指向末尾位置,仍然满足条件v1<v8,再次调用memcpy将vendor_specific2的Data字段拷贝到分配的堆内存,拷贝长度Length=0xf。由于分配的堆内存大小只有a个字节,而拷贝的总长度=0x0a+0x0f,从而导致堆溢出。

五 补丁比对

补丁后的版本添加了对Length字段的有效性判断。

六 安全建议

及时安装安全补丁:https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-0626

[转帖]Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)的更多相关文章

  1. CVE-2012-0003 Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞 分析

    [CNNVD]Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞(CNNVD-201201-110)    Microsoft Wi ...

  2. CVE-2012-1876Microsoft Internet Explorer Col元素远程代码执行漏洞分析

    Microsoft Internet Explorer是微软Windows操作系统中默认捆绑的WEB浏览器.         Microsoft Internet Explorer 6至9版本中存在漏 ...

  3. Spring框架的反序列化远程代码执行漏洞分析(转)

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  4. thinkphp5.0.22远程代码执行漏洞分析及复现

    虽然网上已经有几篇公开的漏洞分析文章,但都是针对5.1版本的,而且看起来都比较抽象:我没有深入分析5.1版本,但看了下网上分析5.1版本漏洞的文章,发现虽然POC都是一样的,但它们的漏洞触发原因是不同 ...

  5. Nexus Repository Manager 3(CVE-2019-7238) 远程代码执行漏洞分析和复现

    0x00 漏洞背景 Nexus Repository Manager 3是一款软件仓库,可以用来存储和分发Maven,NuGET等软件源仓库.其3.14.0及之前版本中,存在一处基于OrientDB自 ...

  6. CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析

    漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc ...

  7. CVE-2018-7600 Drupal核心远程代码执行漏洞分析

    0x01 漏洞介绍 Drupal是一个开源内容管理系统(CMS),全球超过100万个网站(包括政府,电子零售,企业组织,金融机构等)使用.两周前,Drupal安全团队披露了一个非常关键的漏洞,编号CV ...

  8. phpMoadmin CVE-2015-2208 远程代码执行漏洞分析

    原文:http://www.thinkings.org/2015/03/05/cve-2015-2208-phpmoadmin-exec-vul.html phpMoAdmin 是一个用PHP 开发的 ...

  9. Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11)

    周五下午爆洞能不能让人们好好休个周末! 分析过程 本次漏洞关键位置:/thinkphp/library/think/Request.php,lines:501由图可以看到在method函数中引入了可控 ...

随机推荐

  1. JavaScript显示文本框后自动获取焦点

    废话少说,见官方文档: 他的用法是:document.getElementById('username').focus();                   这样写在display:block;显 ...

  2. WPF触发器(非数据库中的触发器)

    一.什么是触发器?触发器(Trigger)就是当某种条件满足后即完成相应逻辑功能的一部分程序组成.在当前的WPF中,Trigger一共有三种类型,它们分别是: (1)属性触发器:其对应的类是Trigg ...

  3. 自己动手写处理器之第二阶段(1)——可编程逻辑器件与PLD电路设计流程

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第五篇,我尽量每周四篇         通过上一章的介绍,读者应该知道CPU内部有一些主要的电路,比方:译码电路.运算电路.控 ...

  4. content-box和border-box

    理解box-sizing属性border-box,content-box,其实也是理解正常盒模型与异常盒模型. 如果不做特殊说明,我们日常所用的div都是正常盒子模型. 正常盒子模型 正常盒子模型,是 ...

  5. RESTful学习笔记

    作为一名只有几个月IT自学经历的人,在接受新知识的时候总是想找到浅显易懂的方式去理解,但往往却很难找到相关的文章,大部分都是针对具有一定经验的开发人员,因此在看了很多相关的文章才对RESTful架构有 ...

  6. Windows下pip命令无法使用的解决办法

    今天遇见了一个pip相关的问题 如下 我的python环境变量也有,但是还是无法使用pip 经过一位大佬的点播使用,使用python -m ensurepip这个命令可以检查 在cmd下运行自动完成p ...

  7. python相关资料链接

    后续的博客更新,会涉及到很多的python及python的框架相关的内容,这里将自己收藏的一些关于python相关资料的链接做一个整理,算是一个导航索引吧... PS:其中有些链接对应的技术团队文章, ...

  8. 【转】强化学习(一)Deep Q-Network

    原文地址:https://www.hhyz.me/2018/08/05/2018-08-05-RL/ 1. 前言 虽然将深度学习和增强学习结合的想法在几年前就有人尝试,但真正成功的开端就是DeepMi ...

  9. javaweb 项目启动问题:Application Server was not connected before run configuration stop, reason: javax.manage

    参考:https://blog.csdn.net/whm18322394724/article/details/80290187 换成本机的jre就行了(路径要正确,特别是项目迁移的时候有时候用环境变 ...

  10. Item 18: 使用srd::unique_ptr来管理独占所有权的资源

    本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 当你需要一个智能指针的时候,std::unique_ptr通常是最 ...