最新消息:图 床

Exim Off-by-one(CVE-2018-6789)漏洞復現分析

COOL IAM 291浏览 0评论

作者:Hcamael@知道創宇404實驗室
英文版本:https://paper.seebug.org/1024/

前段時間meh又挖了一個Exim的RCE漏洞,而且這次RCE的漏洞的約束更少了,就算開啟了PIE仍然能被利用。雖然去年我研究過Exim,但是時間過去這麼久了,所以這次復現還是花了大量時間在熟悉Exim源碼上。

本次漏洞復現的過程中,踩了好多坑,實際復現的過程中發現堆塊的實際情況無法像meh所說的那樣的構造,所以在這部分卡了很久(猜測是因為環境不同的原因),之後決定先理解meh利用的大致思路,然後自己根據實際情況對堆塊進行構造,雖然過程艱難,但最終基本算是成功了。

復現環境搭建

本次使用的環境和上次大致相同, 首先去github上該漏洞的patch commit

然後把分支切換到上一個commit

$ git clone https://github.com/Exim/exim.git
$ git checkout 38e3d2dff7982736f1e6833e06d4aab4652f337a
$ cd src
$ mkdir Local

Makefile仍然使用上次那個:

$ cat Local/makefile | grep -v "#"
BIN_DIRECTORY=/usr/exim/bin
CONFIGURE_FILE=/usr/exim/configure
EXIM_USER=ubuntu
SPOOL_DIRECTORY=/var/spool/exim
ROUTER_ACCEPT=yes
ROUTER_DNSLOOKUP=yes
ROUTER_IPLITERAL=yes
ROUTER_MANUALROUTE=yes
ROUTER_QUERYPROGRAM=yes
ROUTER_REDIRECT=yes
TRANSPORT_APPENDFILE=yes
TRANSPORT_AUTOREPLY=yes
TRANSPORT_PIPE=yes
TRANSPORT_SMTP=yes
LOOKUP_DBM=yes
LOOKUP_LSEARCH=yes
LOOKUP_DNSDB=yes
PCRE_CONFIG=yes
FIXED_NEVER_USERS=root
AUTH_CRAM_MD5=yes
AUTH_PLAINTEXT=yes
AUTH_TLS=yes
HEADERS_CHARSET="ISO-8859-1"
SUPPORT_TLS=yes
TLS_LIBS=-lssl -lcrypto
SYSLOG_LOG_PID=yes
EXICYCLOG_MAX=10
COMPRESS_COMMAND=/usr/bin/gzip
COMPRESS_SUFFIX=gz
ZCAT_COMMAND=/usr/bin/zcat
SYSTEM_ALIASES_FILE=/etc/aliases
EXIM_TMPDIR="/tmp"

然後就是編譯安裝了:

$ make -j8
$ sudo make install

啟動也是跟上次一樣,但是這裡有一個坑點,開啟debug,輸出所有debug信息,不開debug,這些都堆的布局都會有影響。不過雖然有影響,但是只是影響構造的細節,總體的構造思路還是按照meh寫的paper中那樣。

本篇的復現,都是基於只輸出部分debug信息的模式:

$ /usr/exim/bin/exim -bdf -dd
# 輸出完整debug信息使用的是-bdf -d+all
# 不開啟debug模式使用的是-bdf

漏洞復現

因為我覺得meh的文章中,漏洞原理和相關函數的說明已經很詳細,我也沒啥要補充的,所以直接寫我的復現過程

STEP 1

首先需要構造一個被釋放的chunk,但是沒必要像meh文章說的是一個0x6060大小的chunk,只需要滿足幾個條件:

转载请注明:IAMCOOL » Exim Off-by-one(CVE-2018-6789)漏洞復現分析

0 0 vote
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x