如何进行CVE-2017-16943-进出口-UAF脆弱性分析

技术怎么进行CVE-2017-16943-Exim-UAF漏洞分析本篇文章为大家展示了怎么进行CVE-2017-16943-Exim-UAF漏洞分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希

本文向您展示了如何进行CVE-2017-16943-Exim-UAF漏洞分析。内容简洁易懂,一定会让你眼前一亮。希望通过这篇文章的详细介绍,你能有所收获。

0x00 背景介绍

Exim是剑桥大学开发的基于GPL协议的开源软件,主要用于在互联网上连接Unix系统的MTA服务器。

2017年11月25日,Exim正式修复了一个免后用漏洞。台湾省安防公司DEVCORE研究员Meh发现CVE号为CVE-2017-16943,发表了POC。但是根据我们的分析和跟进,POC必须开启配置文件中的dkim,才能达到控制EIP,导致进程崩溃的效果。

2017年12月11日,Meh在DEVCORE官网公布了默认配置下的漏洞和POC的具体细节。

360 CERT验证了这一点,并证明其会造成远程代码执行,影响范围广,危害严重。

0x01 漏洞攻击面影响

1、影响面

360CERT全网资产检索平台显示,截至2017年12月15日,检索结果显示,全球运行Exim的服务器超过百万台,全球影响力分布图如下:

怎么进行CVE-2017-16943-Exim-UAF漏洞分析

2、影响版本

此漏洞会影响开放区块设置的4.88和4.89版本。

3、修复版本

360 CERT建议相关用户及时下载官方修复补丁,关闭组块设置或更新到4.90版本。

0x02 漏洞详情

1. 开启dkim配置下控制rip

Exim管理三种堆,它们被定义为枚举类型的全局变量:

怎么进行CVE-2017-16943-Exim-UAF漏洞分析

POOL_MAIN:表示主要分配的堆块,可以释放,消息处理将分配在这个堆池中。

POOL_PERM:意味着分配的内存是永久的,在进程结束之前不会释放。它保存一些需要共享的信息,如配置信息和主机信息。在使用这个堆池分配之前,store_pool将被更改为POOL_PERM,然后调用store_get()。

POOL_SEARCH:保存搜索到的数据,用于search _ tidyup、search_open和internal_search_find函数。

Exim将循环读取消息并动态分配内存。申请内存的函数包括:expand_string(),store_get(),string_xxx(),store_get_perm()将使用perm池。

在配置文件/usr/exim/configure中注释“control=dkim_disable_verify”,这会触发进程崩溃,然后控制rip。原因如下:

在receive_msg函数中,将判断是否打开dkim。如果打开,将进入dkim_exim_verify_init功能:

怎么进行CVE-2017-16943-Exim-UAF漏洞分析

在dkim_exim_verify_init函数中,申请perm池中的内存:

怎么进行CVE-2017-16943-Exim-UAF漏洞分析

在堆中分配一块内存,而不更改current_block[0]中的值。在随后的消息处理中,将在主池中分配一块0x2010。释放后,由于之前perm池的块,释放的块不会与顶部块合并,成为无序的bin。此时,fd和bk指向主竞技场区域。再次前往store extend后,通过store_get获取主竞技场的指针,然后memcpy写入主竞技场,后续自由操作崩溃,RIP变成填充数据。

具体详情如下:

怎么进行CVE-2017-16943-Exim-UAF漏洞分析

2. 默认配置下控制rip

devcore公司公布具体细节后,我们分析了默认配置下如何控制rip。其实原理和开dkim的配置差不多。有必要在top_chunk之前分配一个正在使用的堆块,以防止稍后释放的堆块与top_chunk合并。作者的概念验证是使用DATA发送足够大的数据来扩展堆块。在许多周期之后,前一个堆块在此期间被释放,并成为一个大的未排序的bin块供后续分配。此时,top_chunk之前有一个正在使用的堆块,然后使用BDAT命令来控制rip。

控制rip的具体过程如下:

怎么进行CVE-2017-16943-Exim-UAF漏洞分析

0x03 漏洞利用验证

根据meh的概念和想法,我们写了exp。通过控制rip跳转到fflush(stdout),并将_IO_FILE结构覆盖为攻击代码,并将_IO_jump_t虚拟表结构中的(_IO_sync_t,__sync)覆盖为系统函数地址,执行攻击代码。

Exp攻击效果图:

怎么进行CVE-2017-16943-Exim-UAF漏洞分析

0x04 官方补丁

怎么进行CVE-2017-16943-Exim-UAF漏洞分析

官方补丁确定要释放的堆块是否是最后一个堆块,如果不是,则无法释放,因此无法满足UAF条件,也无法触发漏洞。

以上内容是如何进行CVE-2017-16943-Exim-UAF漏洞分析。你学到什么知识或技能了吗?如果你想学习更多的技能或丰富你的知识,请关注行业信息渠道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/153814.html

(0)

相关推荐

  • 分析SQL优化的limit分页延迟关联

    技术分析SQL优化的limit分页延迟关联这篇文章主要介绍“分析SQL优化的limit分页延迟关联”,在日常操作中,相信很多人在分析SQL优化的limit分页延迟关联问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操

    攻略 2021年11月5日
  • 数据分析

    技术数据分析 数据分析数据预处理
    在本次数据分析过程中,缺失数据将被进一步划分成为三个部分,一类数据是数据为0的情况,一类是数据为空值的情况,一类是数据为特殊符号,例如“--”的数据。
    针对不同的数据缺

    礼包 2021年11月18日
  • java中的堆和栈是什么数据结构(java栈的应用数据结构)

    技术java数据结构中栈怎么应用本篇内容主要讲解“java数据结构中栈怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java数据结构中栈怎么应用”吧!1.声明一个栈接

    攻略 2021年12月22日
  • jq如何修改css属性

    技术jq如何修改css属性本篇内容介绍了“jq如何修改css属性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    攻略 2021年11月17日
  • 高抬腿的正确做法,高抬腿的动作要领是什么

    技术高抬腿的正确做法,高抬腿的动作要领是什么原地高抬腿:运动者的位置大致不发生变化的高抬腿运动。  高抬腿跑:运动者在交替抬腿的同时向前(快速)移动。动作要领:标准动作是在保持上身挺直的情况下高抬腿的正确做法,两腿交替抬

    生活 2021年10月25日
  • 如何使用arthas提高日常开发效率(arthastt命令使用方法)

    技术如何用Arthas重启热更新如何用Arthas重启热更新,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、前言热更新代码的场景1)当线上服务器出现问

    攻略 2021年12月21日