漏洞分析 CVE-2019-6250

admin 2023年11月29日20:07:44评论55 views字数 3111阅读10分22秒阅读模式



软件介绍


ZeroMQ(Zero Message Queue) 是一个 C++ 编写的高性能分布式消息队列,是一个非常简单好用的传输层,使得 Socket 编程更加简单、简洁和性能更高效。ZeroMQ 核心引擎是libzmq。




环境配置


系统环境 ubuntu18.04(64bit)
目标软件版本: libzmq 7302b9b8d127be5aa1f1ccebb9d01df0800182f3

安装 libzmq


下载目标软件
Git clone https://github.com/zeromq/libzmq.git

跳转到有漏洞的版本
git reset --hard 7302b9b8d127be5aa1f1ccebb9d01df0800182f3

安装 libtool
sudo apt-get install libtool pkg-config build-essential autoconf automake

执行
./autogen.sh

执行
./configure

执行
make

执行
sudo make install


安装 Cmake


cppzmq 的编译需要版本较新的 Cmake。

第一步:卸载原来的cmake版本:
sudo apt-get remove cmake

第二步:自https://cmake.org/download/下载cmake源码,cmake-3.26.0-rc5.tar.gz。

第三步:解压cmake源码。在cmake源码所在文件夹中打开命令终端,解压文件:
tar -zxv -f cmake-3.26.0-rc5.tar.gz
cd cmake-3.26.0-rc5

第四步:进入解压后的cmake文件,执行bootstrap。接下来的bootstrap、make、make install三个命令执行时间都很长,需要耐心等待。
./bootstrap

出现以下错误可尝试依次使用下列命令,记得重新运行第四步的命令:
sudo apt-get install g++
sudo apt-get install libssl-dev

第五步:编译构建:
make
sudo make install

第六步:验证安装版本。
cmake --version


安装 cppzmq


下载 cppzmq。
git clone https://github.com/zeromq/cppzmq

这一步会卡很久,而且会提示 CMake libzmq package not found,多等一会儿就可以了。
root@ubuntu:~/cppzmq# cmake .

转到 demo 文件夹。
cd demo

编辑 demo 文件,添加 helloworld。
printf("hello worldn")

编译 demo 文件。
root@ubuntu:~/cppzmq/demo# make

demo 文件可以正常执行。
root@ubuntu:~/cppzmq/demo# ./demo
root@ubuntu:~/cppzmq/demo# hello world





漏洞复现


◆复制 POChttps://github.com/zeromq/libzmq/issues/3351
◆在 cmakelists.txt 文件第一行添加:
set(CMAKE_CXX_FLAGS "-std=c++11 -g -O3")
◆复制到demo并重新编译
◆执行./demo
◆漏洞成功复现




分析POC


send 的第三个参数就是 msg_size,是可控的,这里传了一个非常大的数,应该是导致溢出的关键参数。

const uint8_t v2msg[] = {
0x02, /* v2_decoder_t::eight_byte_size_ready */
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* msg_size */
};
send(s, v2msg, sizeof(v2msg), 0);

跟踪 whoami 在 POC 中的传递。

漏洞分析 CVE-2019-6250

大致了解了POC的流程后我们根据POC作者的指引找到 /root/libzmq/src/v2_deocder.cpp 文件查看源码,从而找到了其溢出的关键代码。

漏洞分析 CVE-2019-6250

也可以在 gdb 中动态调试一下,可以看到 msg_size_ = 0xffffffffffffffff。

break main
r
break zmq::v2_decoder_t::size_ready
c
[ trace ]──────────────────────────────────────────────────────
[#0] RetAddr: 0x7ffff7baa3c0, Name: zmq::v2_decoder_t::size_ready(this=0x7fffe800b6b0, msg_size_=0xffffffffffffffff, read_pos_=0x7fffe800b781 "")
[#1] RetAddr: 0x7ffff7baa808, Name: zmq::decoder_base_t<zmq::v2_decoder_t, zmq::shared_message_memory_allocator>::decode(this=0x7fffe800b6b0, data_=0x7fffe800b778 "02377377377377377377377377", size_=0x2000, bytes_used_=@0x7ffff5b34fd8)
[#2] RetAddr: 0x7ffff7b9ac07, Name: zmq::stream_engine_t::in_event(this=0x7fffe80008e0)
[#3] RetAddr: 0x7ffff7b9e231, Name: zmq::stream_engine_t::plug(this=0x7fffe80008e0, io_thread_=<optimized out>, session_=<optimized out>)
[#4] RetAddr: 0x7ffff7b8a60c, Name: zmq::session_base_t::process_attach(this=0x7fffe8000e30, engine_=0x7fffe80008f0)
[#5] RetAddr: 0x7ffff7b7939a, Name: zmq::object_t::process_command(this=0x7fffe8000e30, cmd_=<optimized out>)
[#6] RetAddr: 0x7ffff7b6e234, Name: zmq::io_thread_t::in_event(this=0x7ffff0004800)
[#7] RetAddr: 0x7ffff7b6c9ee, Name: zmq::epoll_t::loop(this=0x7ffff0004db0)
[#8] RetAddr: 0x7ffff7ba359d, Name: thread_routine(arg_=0x7ffff0004e08)
[#9] RetAddr: 0x7ffff6e47184, Name: start_thread(arg=0x7ffff5b36700)



漏洞分析 CVE-2019-6250


看雪ID:简单的简单

https://bbs.kanxue.com/user-home-950902.htm

*本文由看雪论坛 简单的简单 原创,转载请注明来自看雪社区

漏洞分析 CVE-2019-6250

# 往期推荐

1、2023 SDC 议题回顾 | USB FUZZ 工具前沿探索

2、AFLNET源码分析

3、聊聊大厂设备指纹获取和对抗

4、漏洞分析 CVE-2010-0249

5、OWASP 实战分析 level 2

6、DAS PWN出题思路&CVE-2023-40930的介绍


漏洞分析 CVE-2019-6250


漏洞分析 CVE-2019-6250

球分享

漏洞分析 CVE-2019-6250

球点赞

漏洞分析 CVE-2019-6250

球在看

原文始发于微信公众号(看雪学苑):漏洞分析 CVE-2019-6250

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年11月29日20:07:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   漏洞分析 CVE-2019-6250https://cn-sec.com/archives/2252856.html

发表评论

匿名网友 填写信息