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



La capacidad de degradar dispositivos remotamente basados ​​en RouterOS (Mikrotik) pone en riesgo cientos de miles de dispositivos de red. La vulnerabilidad está asociada con el envenenamiento de la caché DNS del protocolo Winbox y permite la descarga de firmware obsoleto (con el restablecimiento de la contraseña de forma predeterminada) o modificado en el dispositivo.



Detalles de vulnerabilidad


El terminal RouterOS admite un comando de resolución para búsquedas de DNS.

imagen

Esta solicitud es procesada por un solucionador binario llamado. Resolver es uno de los muchos binarios que están conectados al protocolo RouterOS Winbox. A un alto nivel, los "mensajes" enviados al puerto de Winbox se pueden enrutar a varios binarios en RouterOS basados ​​en un esquema de numeración basado en una matriz.

Por defecto, RouterOS tiene la función del servidor DNS deshabilitada.

imagen

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

imagen

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

imagen

Como podemos especificar el servidor DNS a través del cual debe pasar la solicitud, ingresar las direcciones incorrectas es trivial. Por ejemplo, puede configurar la implementación del servidor DNS de Philip 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 busca example.com con Winbox, puede ver que la memoria caché DNS del enrutador ha sido envenenada.

imagen

Por supuesto, el envenenamiento example.com no es muy útil ya que el enrutador no lo usará realmente. Sin embargo, el enrutador necesita acceso a upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com y download.mikrotik.com. Y gracias a otro error, es posible 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 le proporcionamos cinco de vuelta. El enrutador almacena en caché todas estas respuestas de forma incorrecta.

imagen

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

Este ataque también permite explotar una vulnerabilidad más grave: degradar o respaldar la versión de RouterOS. El atacante recrea la lógica del servidor de actualización, incluido el registro de cambios, y obliga a RouterOS a aceptar la versión desactualizada (vulnerable) como actual. El peligro aquí radica en el hecho de que al "actualizar" la versión, la contraseña del administrador se restablece al valor predeterminado: ¡un atacante puede iniciar sesión en el sistema con una contraseña vacía!


El ataque funciona bastante, a pesar del hecho de que el autor implementa varios vectores más, incluidos los relacionados con la integración de una puerta trasera en el firmware , pero esta es una técnica redundante y es ilegal usarla para fines ilegítimos.

Protección


Simplemente deshabilitar Winbox protege contra estos ataques. A pesar de la conveniencia de administrar a través de Winbox, es mejor usar el protocolo SSH.

Source: https://habr.com/ru/post/473676/


All Articles