Red Hat DHCP客户端命令执行漏洞(CVE-2018-1111)复现与简析

漏洞简介

2018年5月15日,Red Hat官方发布通告称修复了一个DHCP Client相关的漏洞(CVE-2018-1111)。当系统使用NetworkManager并配置了DHCP协议时,攻击者可以利用一个恶意的DHCP服务器或者本地网络构造的DHCP响应,在该系统上以root权限执行任意命令。

漏洞影响

  • Red Hat Enterprise Linux Server 6
  • Red Hat Enterprise Linux Server 7
  • CentOS 6
  • CentOS 7
  • Fedora

漏洞复现

环境

  • Red Hat Enterprise Linux Server 6.0
  • Kali 2.0 dnsmasq

步骤

  1. 关闭DHCP

    攻击机器和目标机器须在同一个局域网内,为了不受其他DHCP服务器影响,VMware的网卡需要关闭DHCP功能。让攻击机器充当恶意服务器来给目标机器分配IP,下发配置。

  2. 设置攻击机器IP

    攻击机器充当恶意DHCP服务器,需要设置一个静态IP。

  3. 启动恶意DHCP服务器

    在攻击机器上使用 dnsmasq 启动一个DHCP服务,分配IP从 192.168.177.100~192.168.177.200,时效一个小时,将 payload 放置了dhcp_option 中,分配IP给客户端同时把 payload 的也发送过去,客户端在接收到的时候并没有进行过滤,从而触发漏洞。(我这使用的是--dhcp-option="67,并没有使用作者给出的252,我本地的 dnsmasq 并没有 252选项,可使用dnsmasq --help dhcp 查看,所以使用的选项67 – bootfile-name)

    1
    dnsmasq --interface=eth0 --bind-interfaces  --except-interface=lo --dhcp-range=192.168.177.100,192.168.177.200,1h --conf-file=/dev/null --dhcp-option=6,192.168.177.2 --dhcp-option=3,192.168.177.2 --dhcp-option="67,x'&touch /tmp/pwn #"
  4. 启动Red Hat Server

    启动目标机器后,会自动响应DHCP服务器的广播,从而分配 IP。这里的局域网内只有我们设置的一个恶意 DHCP 服务器,所以会由恶意 DHCP 服务器分配IP,并执行配置中携带的 payload。(如果之前有分配的IP,重启网卡重新分配,/etc/init.d/network restart)

    从上图看到,目标机器成功的分配到了我们设置的IP,并且执行了命令 touch /tmp/pwn

漏洞详情

DHCP 是一个局域网的网络协议,主要用于内部网络动态IP地址分配。

Red Hat提供的DHCP客户端软件包 dhclient 的脚本为/etc/NetworkManager/dispatcher.d/11-dhclient(Red Hat Enterprise Linux 7)和/etc/NetworkManager/dispatcher.d/10-dhclient(Red Hat Enterprise Linux 6);当 NetworkManager 组件从DHCP服务器收到DHCP响应时执行该脚本。

使用单引号使参数值逃逸成功,导致了命令执行

1
--dhcp-option="67,x'&touch /tmp/pwn #"