Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
FEP3370-advanced-ethical-hacking — Explotación de DHCP con DynoRoot (CVE-2018-1111) | Kitploit
Herramientas/GitHubGitHub/baldassarrefe/fep3370-advanced-ethical-hacking
Análisis de VulnerabilidadesExplotaciónSeguridad de RedesPruebas de PenetraciónAprendizaje y EducaciónLabs y Práctica
GitHubbaldassarrefe/fep3370-advanced-ethical-hacking

FEP3370-advanced-ethical-hacking

Explotación de DHCP con DynoRoot (CVE-2018-1111)

Ver RepositorioSitio web
8hace 5 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

DynoRoot CVE-2018-1111

Proyecto final para el curso Advanced Ethical Hacking en KTH, Estocolmo

Este proyecto demuestra una vulnerabilidad conocida de máquinas Fedora y RedHat relacionada con una implementación insegura del lado del cliente del Protocolo de Configuración Dinámica de Host (DHCP). Un servidor DHCP malicioso puede crear ofertas DHCP con una carga maliciosa que se ejecuta en una shell root en la máquina víctima.

La vulnerabilidad es atribuida a Felix Wilhelm y se conoce como CVE-2018-1111 o "DynoRoot".

Tabla de contenidos:

  • Introducción
    • Antecedentes
    • Vulnerabilidad
    • Fuentes
  • Configuración
    • Requisitos previos
    • Máquina puerta de enlace
    • Atacante
    • Víctima Fedora
  • Realizando el ataque
    • Puerta de enlace
    • Atacante
    • Víctima
    • Análisis
  • Trabajo futuro
  • Créditos

Introducción

Antecedentes

El Protocolo de Configuración Dinámica de Host (DHCP) es un componente a menudo pasado por alto en sistemas en red. Su función es permitir la configuración dinámica de las máquinas host que se conectan a una red existente. El caso de uso más común es asignar una dirección IP a los hosts recién conectados e informarles de las rutas existentes para acceder a otras redes. Se pueden especificar opciones adicionales, por ejemplo, la dirección de un servidor DNS local y la zona que sirve, o la ubicación de un archivo de arranque.

Analicemos el protocolo de 4 vías que se sigue cuando un nuevo host quiere unirse a una red después de conectarse físicamente a ella mediante una conexión ethernet o inalámbrica.

  1. El cliente, al carecer de una dirección IP, transmite un mensaje DISCOVER a la red.
  2. Un servidor DHCP a cargo de esa red responde con una OFFER, que contiene: dirección IP, máscara de subred, dirección del router y otras opciones.
  3. El cliente responde con un REQUEST, solicitando oficialmente tomar en arriendo la dirección IP que se ofreció.
  4. El servidor concluye el intercambio con un ACK, indicando que el cliente tiene permitido usar la dirección IP durante un período de tiempo específico.

Después del intercambio inicial, el cliente puede renovar el arrendamiento simplemente enviando otro mensaje REQUEST. El servidor verificará la existencia de un arrendamiento con la dirección IP y MAC del cliente y responderá con un ACK.

Sesión DHCP (figura de Wikimedia Commons, bajo licencia CC BY-SA 4.0).

Algunos aspectos a tener en cuenta:

  • Un cliente también puede saltarse la fase DISCOVER y solicitar inmediatamente una dirección con REQUEST. Esto es común en escenarios en los que el cliente ya se conectó a la red anteriormente y recuerda la dirección anterior. En este caso, el servidor verifica la disponibilidad de la dirección y responde con un ACK, o, en caso de que el arrendamiento no esté disponible, envía un NACK.
  • Al desconectarse, los clientes pueden enviar un mensaje RELEASE para informar al servidor que la dirección ahora está disponible. Sin embargo, esto no es obligatorio según el protocolo y el servidor recolectará periódicamente los arrendamientos vencidos.
  • Cada servidor DHCP gestiona un conjunto limitado de direcciones IP; una vez que todas están asignadas, el servidor no podrá ofrecer arrendamientos a nuevos clientes.
  • Pueden existir múltiples servidores DHCP en la misma red; si un cliente recibe múltiples ofertas, solo aceptará una; los otros servidores observarán la solicitud transmitida y invalidarán la oferta.

Vulnerabilidad

La vulnerabilidad se encuentra en /etc/NetworkManager/dispatcher.d/11-dhclient, que es ejecutado por el cliente para analizar y establecer las opciones recibidas mediante DHCP.

  • declare es un comando interno de bash que, cuando se usa sin argumentos, lista todas las variables declaradas.
  • grep filtra todas las variables relacionadas con DHCP.
  • while read opt itera sobre las variables DHCP una por una, realiza algún análisis e imprime una línea como export new_optionname=value para cada opción.
  • Las sentencias export son luego evaluadas por la shell mediante eval.```bash eval "$( declare | LC_ALL=C grep '^DHCP4_[A-Z_]=' | while read opt; do optname=${opt%%=} optname=${optname,,} optname=new_${optname#dhcp4_} optvalue=${opt#*=} echo "export $optname=$optvalue" done )"
<!-- omit in toc -->
#### Operación normal
En situaciones normales, el código funcionaría perfectamente y analizaría las nuevas opciones DHCP.
Como ejemplo, el siguiente código:```bash
DHCP4_OPTION_ONE=42
DHCP4_OPTION_TWO="bla bla"

declare | LC_ALL=C grep '^DHCP4_[A-Z_]*=' | while read opt; do
  optname=${opt%%=*}
  optname=${optname,,}
  optname=new_${optname#dhcp4_}
  optvalue=${opt#*=}
  echo "export $optname=$optvalue"
done

Imprimirá estas dos sentencias export para ser evaluadas por eval:```bash export new_option_one=42 export new_option_two='bla bla'

<!-- omit in toc -->
#### Inyección de código
Sin embargo, debido al inseguro `eval`, es posible inyectar comandos de bash:```bash
DHCP4_OPTION_ONE="x'& echo Hacked! #"
DHCP4_OPTION_TWO='bla bla'

eval "$(                             
  declare | LC_ALL=C grep '^DHCP4_[A-Z_]*=' | while read opt; do
    optname=${opt%%=*}
    optname=${optname,,}
    optname=new_${optname#dhcp4_}
    optvalue=${opt#*=}
    echo "export $optname=$optvalue"
  done
)"

Resultará en la evaluación de echo Hacked!:```text [1] 1541 Hacked!

### Fuentes
- [Entrada de la base de exploit](https://www.exploit-db.com/exploits/44890)
- [Anuncio de RedHat](https://access.redhat.com/security/vulnerabilities/3442151)
- [Publicación en el blog de Tenable](https://www.tenable.com/blog/advisory-red-hat-dhcp-client-command-injection-trouble)
- [Repositorio de GitHub](https://github.com/kkirsche/CVE-2018-1111)
- [Anuncio en Twitter](https://twitter.com/_fel1x/status/996388421273882626?lang=en)

## Configuración
La configuración mínima para demostrar el exploit consiste en solo dos máquinas: la máquina `victim` ejecutando Fedora 28, y una máquina `attacker`. En esta configuración, el atacante simplemente necesita ofrecer un servicio DHCP y esperar la conexión de la víctima.

<figure style="text-align:center">
  <img src="https://raw.githubusercontent.com/baldassarrefe/fep3370-advanced-ethical-hacking/HEAD/media/network_simple.svg" style="max-width:400px;" width="90%"/>
  <figcaption>Configuración mínima del exploit.</figcaption>
</figure>

Una configuración más realista colocaría las máquinas en una red privada, donde una tercera máquina, la `gateway`, está configurada como el servidor DHCP benigno y como la puerta de enlace a Internet exterior. En esta configuración, el atacante debe evitar que la víctima se conecte al servidor DHCP legítimo antes de poder realizar el ataque.
Descargar herramienta