La vulnerabilidad de retroceso en RouterOS compromete cientos de miles de dispositivos

La vulnerabilidad de retroceso en RouterOS compromete cientos de miles de dispositivos

La posibilidad de degradar remotamente dispositivos basados en RouterOS (Mikrotik) pone en riesgo cientos de miles de dispositivos de red. La vulnerabilidad está relacionada con el envenenamiento de la caché DNS del protocolo Winbox y permite cargar un firmware obsoleto (con la contraseña restablecida a 'por defecto') o modificado en el dispositivo.

La vulnerabilidad de retroceso en RouterOS compromete cientos de miles de dispositivos

Detalles de la vulnerabilidad

El terminal de RouterOS admite un comando de resolución para buscar DNS.

La vulnerabilidad de retroceso en RouterOS compromete cientos de miles de dispositivos

Esta solicitud es procesada por un archivo binario llamado resolver. Resolver es uno de los muchos archivos binarios que están conectados al protocolo Winbox de RouterOS. A un alto nivel, los 'mensajes' enviados al puerto de Winbox pueden ser enrutados a diferentes archivos binarios en RouterOS según un esquema de numeración basado en un array.

Por defecto, la función de servidor DNS está desactivada en RouterOS.

La vulnerabilidad de retroceso en RouterOS compromete cientos de miles de dispositivos

Sin embargo, incluso con la función del servidor desactivada, el enrutador mantiene su propia caché DNS.

La vulnerabilidad de retroceso en RouterOS compromete cientos de miles de dispositivos

Cuando hacemos una consulta utilizando winbox_dns_request, por ejemplo, example.com, el enrutador almacenará en caché el resultado.

La vulnerabilidad de retroceso en RouterOS compromete cientos de miles de dispositivos

Como podemos especificar el servidor DNS a través del cual debe pasar la consulta, ingresar direcciones incorrectas es trivial. Por ejemplo, se puede configurar la implementación del servidor DNS de Philipp Klaus, para responder siempre con un registro A que contenga la dirección IP 192.168.88.250.

def dns_response(data):
    request = DNSRecord.parse(data)
    reply = DNSRecord(DNSHeader(
        id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
    qname = request.q.qname
    qn = str(qname)
    reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
    print("---- Reply:n", reply)
    return reply.pack()

Ahora, si buscamos example.com con Winbox, podemos ver que la caché DNS del enrutador está envenenada.

La vulnerabilidad de retroceso en RouterOS compromete cientos de miles de dispositivos

Por supuesto, envenenar example.com no es muy útil, ya que el enrutador en realidad no lo utilizará. Sin embargo, el enrutador necesita hacer consultas a upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com y download.mikrotik.com. Y gracias a otro error, hay posibilidad de envenenarlos a todos a la vez.

def dns_response(data):
    request = DNSRecord.parse(data)
    reply = DNSRecord(DNSHeader(
        id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
    qname = request.q.qname
    qn = str(qname)
    reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
    reply.add_answer(RR("upgrade.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("cloud.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("cloud2.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("download.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    print("---- Reply:n", reply)
    return reply.pack()

El enrutador solicita un permiso y nosotros proporcionamos cinco a cambio. El enrutador almacena en caché incorrectamente todas estas respuestas.

La vulnerabilidad de retroceso en RouterOS compromete cientos de miles de dispositivos

Es evidente que este ataque también es útil si el enrutador actúa como servidor DNS, ya que permite atacar a los clientes del enrutador.

Este ataque también permite explotar una vulnerabilidad más grave: hacer un downgrade o backporting de la versión de RouterOS. El atacante recrea la lógica del servidor de actualizaciones, incluyendo el changelog, y engaña a RouterOS para que considere una versión obsoleta (vulnerable) como actual. El peligro aquí radica en que al "actualizar" la versión, la contraseña del administrador se restablece al valor "por defecto" — ¡un atacante puede iniciar sesión con una contraseña vacía!

Reproducir video

El ataque es completamente funcional, a pesar de que el autor implementa varios vectores adicionales relacionados, incluyendo la inserción de un backdoor en el firmware, pero esto ya es una técnica excesiva y su uso para fines ilegítimos es ilegal.

Protección

Deshabilitar simplemente Winbox permite protegerse de estos ataques. A pesar de la conveniencia de la administración a través de Winbox, es mejor utilizar el protocolo SSH.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster