Skip to content
KitploitKITPLOIT
HerramientasBlog
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
dnsmasq-cve-2026 — Herramienta automatizada de verificación de defectos para 6 CVEs de dnsmasq (CVE-2026-2291, 4890, 4891, 4892, 4893, 5172) | Kitploit
Herramientas/GitHubGitHub/jianrongxiao-linksys/dnsmasq-cve-2026
Análisis de VulnerabilidadesExplotaciónFuzzingSeguridad de RedesPruebas de PenetraciónAnálisis de BinariosAnálisis de DNS
GitHubjianrongxiao-linksys/dnsmasq-cve-2026

dnsmasq-cve-2026

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

Herramienta automatizada de verificación de defectos para 6 CVEs de dnsmasq (CVE-2026-2291, 4890, 4891, 4892, 4893, 5172)

Ver Repositorio
hace 2 mesesAún no revisado

Herramienta de Verificación QA para dnsmasq CVE-2026

Herramienta automatizada de caja negra para verificar 6 vulnerabilidades de dnsmasq (mayo de 2026). Envía paquetes de ataque a un DUT en vivo e informa PASS/FAIL — sin necesidad de acceso al código fuente.

Inicio rápido

root@kitploit:~
# Configure el DNS del DUT con la IP WAN de su portátil a través de la GUI primero, luego:
sudo python3 dnsmasq_cve_verify.py --laptop <SU_IP_WAN> --dut <IP_LAN_DUT> --dut-pass <CONTRASEÑA_SSH>

# Ejemplo:
sudo python3 dnsmasq_cve_verify.py --laptop 10.0.0.211 --dut 192.168.1.1 --dut-pass '12345Asdf@'

CVEs probados

CVECVSSTipoVector de ataqueFunción afectada
CVE-2026-22919.2Desbordamiento de búfer en el heapRemotoextract_name() — siempre activo
CVE-2026-51727.5Lectura fuera de límites / caídaRemotoextract_addresses() — siempre activo
CVE-2026-48907.5Bucle infinito DoSRemotoAnálisis de mapa de bits NSEC (--dnssec)
CVE-2026-48915.3Lectura OOB en heapRemotoValidación RRSIG (--dnssec)
CVE-2026-48928.4Desbordamiento de heap → raízLocal/AdyacenteCLID DHCPv6 (--dhcp-script + DHCPv6)
CVE-2026-48935.3Omisión de validaciónRemotoVerificación de fuente ECS (--add-subnet)

Cómo funciona cada prueba

CVE-2026-2291 (Crítico — Desbordamiento de heap en extract_name)

Causa raíz: union bigname declara char name[MAXDNAME] pero los caracteres escapados pueden expandir un nombre a 2*MAXDNAME+1 bytes, causando desbordamiento de heap.

Método de prueba: Envía consultas DNS que contienen nombres de dominio con caracteres de bit alto (0x80+) que se escapan internamente como \DDD (4 bytes por byte de entrada). Si dnsmasq se cuelga o deja de responder, es vulnerable.

Comportamiento corregido: Rechaza nombres sobredimensionados correctamente (FORMERR/REFUSED) o usa un búfer ampliado.

CVE-2026-5172 (Alto — Lectura OOB en extract_addresses)

Causa raíz: Un campo rdlen falsificado permite que extract_name() avance el puntero más allá del final del registro. El desbordamiento negativo de los bytes restantes produce un valor enorme → lectura OOB masiva → caída.

Método de prueba: Envía respuestas DNS con registros CNAME donde rdlen es menor que el nombre codificado real. Si dnsmasq se cuelga, es vulnerable.

Comportamiento corregido: Valida que el puntero se mantenga dentro del límite declarado de rdlen después de extract_name().

CVE-2026-4890 (Alto — Bucle infinito NSEC DNSSEC)

Causa raíz: El análisis del mapa de bits NSEC avanza según p[1] en lugar de p[1]+2 (falta el tamaño del encabezado de ventana). Con bitmap_length=0, el puntero nunca avanza → bucle infinito.

Método de prueba: Envía un registro NSEC manipulado con window=0, bitmap_length=0. Si dnsmasq deja de responder a TODAS las consultas (se cuelga, no se cuelga), es vulnerable. Explotable ANTES de la validación RRSIG.

Comportamiento corregido: Avanza según p[1]+2 y omite mapas de bits de longitud cero.

CVE-2026-4891 (Moderado — Lectura OOB en heap RRSIG)

Causa raíz: rdlen en RRSIG no se valida contra el tamaño mínimo (18 + nombre del firmante). La longitud de firma calculada se desborda negativamente → se trata como enorme → lectura OOB.

Método de prueba: Envía registros RRSIG con rdlen=10 (muy por debajo del mínimo de 31+ bytes). Caída = vulnerable.

Comportamiento corregido: Valida que rdlen >= campos_fijos + longitud_nombre_firmante antes de calcular la longitud de la firma.

CVE-2026-4892 (Alto — Root local por CLID DHCPv6)

Causa raíz: Los CLID DHCPv6 (hasta 65535 bytes) se codifican en hexadecimal mediante sprintf("%.2x") en daemon->packet (5131 bytes). CLID de 3000 bytes → cadena hexadecimal de 6000 bytes → desbordamiento. El proceso auxiliar se ejecuta como root.

Método de prueba: Envía SOLICIT DHCPv6 con un identificador de cliente de 3000 bytes. Requiere adyacencia IPv6 y --dhcp-script configurado. Caída del auxiliar = vulnerable.

Comportamiento corregido: Trunca o valida la longitud del CLID antes de la codificación hexadecimal.

Nota: Algunas compilaciones se compilan con -DNO_DHCP6 y NO se ven afectadas por esta CVE.

CVE-2026-4893 (Moderado — Omisión de validación de fuente ECS)

Causa raíz: process_reply() pasa la longitud del registro OPT (~23 bytes) en lugar de la longitud completa del paquete a check_source(). Todas las comprobaciones de límites fallan → la función siempre devuelve 1 (válido).

Método de prueba: Envía consultas DNS con la opción EDNS Client Subnet que contiene prefijos de origen falsificados. Si dnsmasq devuelve ECS sin validación, es vulnerable.

Comportamiento corregido: Pasa la longitud completa del paquete a check_source(), lo que permite comprobaciones de límites adecuadas según RFC 7871 Sección 9.2.

Corrección

Actualice a dnsmasq 2.92rel2 (recomendado)

  • Fuente: https://thekelleys.org.uk/dnsmasq/dnsmasq-2.92rel2.tar.xz
  • Parches oficiales: https://thekelleys.org.uk/dnsmasq/CVE/

Herramienta automatizada de verificación de defectos (dnsmasq_cve_verify.py)

La herramienta QA principal. Se ejecuta en la computadora de pruebas, envía paquetes de ataque al DUT, e informa PASS/FAIL claro para cada CVE. No se necesita modificación del DUT más allá del acceso SSH de solo lectura para la inspección del estado.

Topología de red

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────┐
│                   Computadora de pruebas                             │
│                                                                      │
│   Interfaz LAN                   Interfaz WAN                        │
│   <IP_LAN_PORTATIL>              <IP_WAN_PORTATIL>                  │
│        │                               │                            │
│        │                          ┌────┴──────────────┐             │
│        │                          │ Servidor DNS      │             │
│        │                          │ malicioso (puerto │             │
│        │                          │ 53)               │             │
│        │                          └────┬──────────────┘             │
│        │                               │                            │
└────────┼───────────────────────────────┼────────────────────────────┘
         │ Subred LAN                    │ Subred WAN
         │                               │
┌────────┼───────────────────────────────┼────────────────────────────┐
│        │                               │                            │
│   LAN: <IP_LAN_DUT>              WAN: <IP_WAN_DUT>                  │
│   (puerta de enlace LAN)         (enlace WAN)                      │
│                                                                      │
│              DUT (Router Linksys)                                    │
│              dnsmasq (cualquier versión < 2.92rel2)                 │
│                                                                      │
│   resolv-file=/etc/resolv.conf                                      │
│   → nameserver <IP_WAN_PORTATIL>  ← establecido mediante GUI, nos reenvía │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

Flujo de datos:
  1. La herramienta envía una consulta DNS a la IP LAN del DUT (puerto 53)
  2. El dnsmasq del DUT no puede resolver localmente → reenvía a IP_WAN_PORTATIL
  3. Nuestro servidor malicioso en la interfaz WAN responde con el payload de exploit
  4. El dnsmasq del DUT procesa la respuesta maliciosa → caída/cierre/supervivencia
  5. La herramienta verifica el estado del DUT mediante SSH (solo lectura)

Ejemplo de configuración (sus IPs serán diferentes):

RolIP (ejemplo)
LAN del portátil192.168.1.254
WAN del portátil10.0.0.211
LAN del DUT192.168.1.1
WAN del DUT10.0.0.214

El requisito clave: La IP WAN del portátil y la IP WAN del DUT deben estar en la misma subred, para que el DUT pueda alcanzar el portátil como servidor DNS ascendente.

Cómo funciona

root@kitploit:~
┌──────────┐     ┌───────────┐     ┌──────────────────┐     ┌──────────┐
│ CONFIG.  │ ──► │  DISPARO  │ ──► │  INSPECCIÓN DE   │ ──► │ VEREDICTO│
│          │     │           │     │  ESTADO          │     │          │
│ Iniciar  │     │ Enviar    │     │ SSH al DUT:      │     │ PASS:    │
│ servidor │     │ consulta  │     │ - pidof dnsmasq  │     │ sobrevivió│
│ DNS      │     │ DNS al    │     │ - ¿PID cambió?   │     │          │
│ malicioso│     │ DUT→DUT   │     │ - dmesg crash?   │     │ FAIL:    │
│ en WAN   │     │ reenvía   │     │ - /var/log/msg   │     │ se colgó/ │
│ (10.0.0. │     │ a nosotros │     │                  │     │ colgó    │
│  211:53) │     │ → resp.   │     │ Consulta de      │     │          │
│          │     │ con       │     │ vitalidad        │     │          │
│          │     │ payload   │     │ (version.bind)   │     │          │
│          │     │ exploit   │     │                  │     │          │
└──────────┘     └───────────┘     └──────────────────┘     └──────────┘

NOTA: La herramienta NO modifica la configuración del DUT. El usuario debe establecer el DNS en 10.0.0.211 mediante la GUI.

Procedimiento de prueba QA

Requisitos previos

  • Computadora de pruebas con dos interfaces de red (LAN + WAN)
  • Python 3.6+ con paramiko instalado (pip install paramiko)
  • Acceso SSH al DUT (credenciales de root)
  • GUI de administración del DUT accesible

Paso 1: Conexión física

Conecte la computadora de pruebas al DUT con dos cables:

Puerto del portátilSe conecta aPropósito
Puerto LANPuerto LAN del DUTAcceso SSH + envío de consultas DNS al DUT
Puerto WANSubred WAN del DUT (ej., puerto del switch/módem ascendente)Actuar como servidor DNS ascendente

Después de la conexión, anote las IPs de su portátil:

root@kitploit:~
# Encuentre sus IPs
ip addr show | grep "inet "
# Ejemplo de salida:
#   inet 192.168.1.254/24 ...  ← esta es su IP LAN
#   inet 10.0.0.211/24 ...     ← esta es su IP WAN (úsela para --laptop)

Paso 2: Establecer DNS del DUT al portátil mediante GUI

  1. Abra un navegador y vaya a la página de administración del DUT:
    • ej., http://192.168.1.1 o http://miRouter.local
  2. Inicie sesión con credenciales de administrador
  3. Navegue a: Conectividad → Configuración de Internet → Editar (junto a IPv4)
  4. En DNS: seleccione DNS estático
  5. Establezca DNS 1 a la IP WAN de su portátil (ej., 10.0.0.211)
  6. Haga clic en Aplicar
  7. Espere de 5 a 10 segundos para que los ajustes surtan efecto

Paso 3: Ejecutar la herramienta

root@kitploit:~
cd /ruta/a/dnsmasq-cve-2026/

# Ejecutar las 6 pruebas CVE:
sudo python3 dnsmasq_cve_verify.py --laptop <SU_IP_WAN> --dut <IP_LAN_DUT> --dut-pass <CONTRASEÑA_SSH>

# Ejemplo:
sudo python3 dnsmasq_cve_verify.py --laptop 10.0.0.211 --dut 192.168.1.1 --dut-pass '12345Asdf@'

La herramienta hará lo siguiente:

  1. Conectarse al DUT mediante SSH (solo lectura)
  2. Iniciar un servidor DNS malicioso en la IP WAN de su portátil
  3. Verificar que el DUT está reenviando consultas DNS hacia él
  4. Enviar payloads de exploit para cada CVE
  5. Comprobar si dnsmasq se colgó o se colgó
  6. Informar PASS/FAIL por CVE

Paso 4: Leer los resultados

  • PASS = El DUT está seguro (función no activa, o sobrevivió al ataque)
  • FAIL = dnsmasq se colgó o se colgó (¡vulnerable!)
  • ERROR = No se pudo conectar o el DUT no reenvía

Paso 5: Restaurar DNS del DUT

  1. Vuelva a la GUI de administración del DUT
  2. Conectividad → Configuración de Internet → Editar
  3. En DNS: seleccione Automático (del ISP) o elimine la entrada estática
  4. Haga clic en Aplicar

Solución de problemas


Resultados de pruebas (2026-05-31)

Plataforma dnsmasq 2.78 (GENERAL: PASS)

Plataforma dnsmasq 2.90 (GENERAL: PASS)

Conclusión

Todos los routers Linksys probados no son explotables en la práctica para ninguna de las 6 CVE en sus configuraciones de compilación de producción. Las funciones peligrosas (DNSSEC, DHCPv6 vía dnsmasq) no están compiladas o no están configuradas. Aún así, se recomiendan los parches como defensa en profundidad.

Resultados esperados

Antes de la corrección (dnsmasq 2.78, compilación sin DNSSEC):

Antes de la corrección (dnsmasq 2.90 con DNSSEC habilitado):

Después de la corrección (dnsmasq 2.92rel2 o parches retroportados aplicados): Todas las 6 CVE → PASS

Requisitos

  • Python 3.6+ con paramiko (pip install paramiko)
  • Root/sudo en el portátil (para vincular DNS en el puerto 53)
  • Acceso SSH al DUT (solo lectura — usado para comprobaciones de estado del proceso)
  • Portátil conectado a la LAN del DUT (red 192.168.1.x)

Referencia de opciones


Otras herramientas

Probador remoto de caja negra (test_dnsmasq_cve_remote.py)

Solo verificación de versión ligera — consulta version.bind para determinar si la versión de dnsmasq está por debajo de la corrección. Sin SSH, sin configuración, sin payloads de exploit.

root@kitploit:~
python3 test_dnsmasq_cve_remote.py 192.168.1.1

Script en dispositivo (test_dnsmasq_cve_on_device.sh)

Se ejecuta directamente en el DUT mediante SSH/serie. Comprueba la versión binaria y las opciones de compilación.

root@kitploit:~
scp test_dnsmasq_cve_on_device.sh [email protected]:/tmp/
ssh [email protected] "sh /tmp/test_dnsmasq_cve_on_device.sh"

Servidor DNS malicioso (malicious_dns_server.py)

Servidor de exploit independiente para pruebas manuales. Ejecútelo, apunte el DNS ascendente del DUT hacia él, luego active consultas a crash-5172.evil.test, crash-2291.evil.test, etc.

root@kitploit:~
sudo python3 malicious_dns_server.py --port 53
# Luego en el DUT: configure ascendente → este host
# Luego active: dig @192.168.1.1 crash-5172.evil.test

Verificación después de la corrección

Después de aplicar parches y actualizar el firmware, vuelva a ejecutar:

root@kitploit:~
sudo python3 dnsmasq_cve_verify.py --laptop <SU_IP_WAN> --dut <IP_LAN_DUT> --dut-pass <CONTRASEÑA_SSH>
# Esperado: todas las 6 PASS

Resumen de requisitos

Referencias

  • ISPreview: https://www.ispreview.co.uk/index.php/2026/05/string-of-dnsmasq-vulnerabilities-threatens-uk-broadband-routers.html
  • Help Net Security: https://www.helpnetsecurity.com/2026/05/12/dnsmasq-vulnerabilities-cve/
  • Parches oficiales: https://thekelleys.org.uk/dnsmasq/CVE/
  • Changelog de dnsmasq: https://thekelleys.org.uk/dnsmasq/CHANGELOG
Descargar herramienta
ProblemaSolución
"El DUT no nos reenvía consultas"Verifique que el Paso 2 se realizó correctamente. Compruebe que la IP WAN del portátil coincide con la ingresada en la GUI.
"No se puede conectar al DUT"Verifique las credenciales SSH. Intente manualmente: ssh [email protected].
"No se puede vincular el puerto 53"Ejecute con sudo. O use --dns-port 5353 (requiere configuración manual del DUT).
"Versión: desconocida"Es posible que el DUT no tenga dnsmasq en la ruta estándar. La herramienta aún realiza las pruebas correctamente.
CVEResultadoRazón
CVE-2026-2291PASSDNSSEC no compilado
CVE-2026-4890PASSDNSSEC no compilado
CVE-2026-4891PASSDNSSEC no compilado
CVE-2026-4892PASSdnsmasq no sirve DHCPv6 (se usa un servidor DHCPv6 separado)
CVE-2026-4893PASSSolo error lógico — sin caída
CVE-2026-5172PASSSobrevivió al exploit (ruta de código vulnerable no presente en 2.78)
CVEResultadoRazón
CVE-2026-2291PASSDNSSEC no compilado
CVE-2026-4890PASSDNSSEC no compilado
CVE-2026-4891PASSDNSSEC no compilado
CVE-2026-4892PASSDHCPv6 no compilado
CVE-2026-4893PASSSolo error lógico — sin caída
CVE-2026-5172PASSSobrevivió a variantes de exploit
CVEResultadoRazón
CVE-2026-2291PASSDNSSEC no compilado — no explotable
CVE-2026-4890PASSDNSSEC no compilado — no explotable
CVE-2026-4891PASSDNSSEC no compilado — no explotable
CVE-2026-4892PASS/FAILDHCPv6 compilado + dhcp-script activo
CVE-2026-4893PASSError lógico — sin caída (solo basado en versión)
CVE-2026-5172PASSRuta blockdata_expand no presente en 2.78
CVEResultadoRazón
CVE-2026-2291FAILDesbordamiento de heap mediante nombres escapados
CVE-2026-4890FAILBucle infinito (se cuelga)
CVE-2026-4891FAILCaída por lectura OOB en RRSIG
CVE-2026-4892PASS/FAILDepende de DHCPv6 + configuración de script
CVE-2026-4893PASSError lógico — sin caída
CVE-2026-5172FAILLectura OOB mediante rdlen falsificado
BanderasPredeterminadoDescripción
--laptop(obligatorio)IP WAN del portátil (vincula el servidor DNS malicioso aquí)
--dut192.168.1.1IP LAN del DUT (las consultas SSH y DNS se envían aquí)
--dut-userrootUsuario SSH del DUT
--dut-pass(solicitado)Contraseña SSH del DUT
--dns-port53Puerto para el servidor DNS malicioso
--cvelas 6CVE(s) específicos a probar (repetible)
HerramientaPythonRootSSHRed
dnsmasq_cve_verify.py3.6+ paramikoSí (puerto 53)Sí (solo lectura)LAN + WAN al DUT
test_dnsmasq_cve_remote.py3.6+ stdlibNoNoUDP 53 al DUT
test_dnsmasq_cve_on_device.shN/A (shell)NoSe ejecuta en el DUTN/A
malicious_dns_server.py3.6+ stdlibSí (puerto 53)NoDUT reenvía hacia nosotros