千家信息网

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

发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,本篇文章为大家展示了怎么进行CVE-2017-16943-Exim-UAF漏洞分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。0x00 背景介绍Exim 是
千家信息网最后更新 2024年09月23日怎么进行CVE-2017-16943-Exim-UAF漏洞分析

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

0x00 背景介绍

Exim 是剑桥大学开发的一款基于 GPL 协议的开放源代码软件,其主要用于连接互联网 Unix 系统的消息传输代理(MTA)服务器。

2017年11月25日,Exim官方修复了一处use-after-free的漏洞,由台湾安全公司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,全球的影响分布图如下:

2、影响版本

该漏洞影响开启chunk设置的4.88和4.89版本

3、修复版本

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

0x02 漏洞详情

1. 开启dkim配置下控制rip

exim一共管理着三种堆,定义成枚举类型的全局变量:

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

POOL_PERM:表示分配的内存是永久的,直到进程结束才会被释放,保存一些需要共享的信息,例如配置信息,host信息,在使用这块堆池分配前会将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 pool。

将配置文件/usr/exim/configure中的"control =dkim_disable_verify"注释,可以触发进程崩溃,进而控制rip,分析原因如下:

在receive_msg函数中会判断是否开启dkim,如果开启就会进入dkim_exim_verify_init函数:

dkim_exim_verify_init函数里在perm pool中申请内存:

使得在堆中分配一块内存,同时不改变current_block[0]中的值,后续对消息处理时会在main pool中分配堆块,分配一块0x2010大小的堆块,释放后,由于之前perm pool分配的堆块,使得释放的堆块不和top chunk合并,变成一个unsorted bin,此时fd和bk指向main arena区域。再进一次store extend后,通过store_get会获得指向main arena的指针,之后memcpy对main arena进行写操作,后续的free操作会造成崩溃,RIP会变成填充的数据。

具体的细节如下图:

2. 默认配置下控制rip

在devcore公司公布具体细节后,我们对默认配置下如何控制rip进行了分析。其实原理和开启dkim配置类似,需要在top_chunk前分配一块在使用的堆块,防止后面释放的堆块和top_chunk合并,作者的poc是利用DATA来发送一个足够大的数据来扩展堆块,循环多次后,期间释放了之前的堆块,变成了一个大的unsorted bin块供后续分配。此时top_chunk之前就有了正在使用的堆块,再利用BDAT命令达到控制rip的目的。

具体控制rip的流程如下:

0x03 漏洞利用验证

我们根据meh的poc和思路编写了exp,通过控制rip跳转到fflush(stdout),并覆盖_IO_FILE结构覆盖成攻击代码,将_IO_jump_t 虚表结构体中的(_IO_sync_t, __sync)覆盖成system函数地址,来执行攻击代码。

Exp攻击效果图:

0x04 官方补丁

官方补丁判断要释放的堆块是否为最后一个堆块,如果不是的话,就不能释放,这样就达不到UAF的条件,无法触发漏洞。

上述内容就是怎么进行CVE-2017-16943-Exim-UAF漏洞分析,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

漏洞 分配 控制 配置 函数 影响 分析 内存 官方 消息 版本 攻击 代码 信息 数据 细节 补丁 进程 中分 漏洞分析 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小学网络安全教育知识讲座 数据库怎么设置支持中文 服务器能用网络扫描仪吗 网络安全公司哪个工资高 网站数据库可以复制吗 云彩互联网科技是培训 湖南米水互联网科技有限公司 软件开发板块的股票有哪些 高性能云服务器高收录域名 电话号码的数据库约束 激活宝出现服务器异常怎么办 40岁学软件开发有用吗 前端传来的数据库 滴滴出行的软件开发流程 职教云计算机网络技术答案 鼎信诺前段取数数据库连接错误 初创科技互联网公司 数据库二级 关乎网络技术上海有限公司 数据库联合索引存储的是什么 lol进对局无法连接服务器 苏州软件开发正规平台 网络安全感悟怎么写 手机游戏软件开发招聘 腾讯云服务器浏览器下载不了文件 北京应用软件开发大概要多少钱 韦德数据库新浪 计算机网络技术必须英语好 网信系统网络安全工作支撑单位 2010数据库文件去掉密码
0