O pesquisador de segurança do Google, Matthew Garrett, descobriu uma vulnerabilidade de dia zero nos roteadores Smart Home TP-Link SR20. Depois que a empresa não conseguiu responder à divulgação privada, o pesquisador decidiu fazer o público falha.
Visão geral técnica da vulnerabilidade TP-Link SR20
A vulnerabilidade é um bug de execução de código arbitrário de dia zero. Os roteadores TP-Link SR20 são de banda dupla 2.4 GHz / 5 Produtos GHz adequados para controlar dispositivos domésticos inteligentes e IoT. Eles também suportam dispositivos que executam os protocolos ZigBee e Z-Wave.
Pelo visto, o pesquisador relatou a falha de segurança ao TP-Link em particular mais do que 90 dias atrás, mas ele não recebeu resposta. As tentativas de entrar em contato com a empresa de outras maneiras também foram consideradas malsucedidas:
Eu relatei isso ao TP-Link em dezembro por meio do formulário de divulgação de segurança, um processo que foi dificultado pelo “Descrição detalhada” campo sendo limitado a 500 personagens. A página me informou que eu teria uma resposta dentro de três dias úteis – algumas semanas depois, sem resposta, Eu twitei para eles pedindo um contato e não ouvi nada de volta. A tentativa de outra pessoa de relatar vulnerabilidades tddp teve um resultado semelhante, então aqui estamos nós.
Quanto à vulnerabilidade em si, o problema decorre de um processo que esses roteadores executam com frequência. O processo é conhecido como “tddp”, ou o protocolo de depuração de dispositivo TP-Link. O processo é executado no nível raiz e pode iniciar dois tipos de comandos. O primeiro não requer autenticação, e o segundo requer isso.
relacionado: CVE-2018-15702: TP-LINK TL-WR841N Router Achado vulnerabilidade
A vulnerabilidade expõe alguns comandos do tipo um. Um deles, comando 0x1f, pedido 0x01, serve para validação de configuração, como explicado por Gareth.
Despejar tddp no Ghidra torna muito fácil encontrar uma função que chame recvfrom(), a chamada que copia informações de um soquete de rede. Ele olha o primeiro byte do pacote e o usa para determinar qual protocolo está em uso, e passa o pacote para um despachante diferente, dependendo da versão do protocolo. Para a versão 1, o despachante apenas olha para o segundo byte do pacote e chama uma função diferente dependendo de seu valor. 0x31 é CMD_FTEST_CONFIG, e é aqui que as coisas ficam super divertidas, o pesquisador escreveu.
O que acontece a seguir é que esta função analisa o pacote para uma carga útil que contém duas strings separadas por um ponto e vírgula. A primeira string é um nome de arquivo, e o segundo é um arquivo de configuração. Em seguida, chama tddp_execCmd(“cd / tmp; tftp -gr% s% s &”,luaFile,remote_address) que executa o comando tftp em segundo plano.
Isso se conecta de volta à máquina que enviou o comando e tenta baixar um arquivo via tftp correspondente ao nome do arquivo enviado. O processo tddp principal espera até 4 segundos para o arquivo aparecer – uma vez que faz, ele carrega o arquivo em um interpretador Lua que ele inicializou anteriormente, e chama a função config_test() com o nome do arquivo de configuração e o endereço remoto como argumentos.
Desde config_test() é administrado pelo arquivo baixado da máquina remota, a execução arbitrária de código no intérprete é permitida, que inclui o método os.execute executando comandos no host. Uma vez que tddp está rodando como root, você obtém a execução arbitrária de comandos como root, Gareth concluiu.
Um código de prova de conceito também está disponível para a vulnerabilidade em roteadores domésticos inteligentes TP-Link SR20.