retornar retornar
Descodificação de ameaças cibernéticas  para 2023

POR:
Miguel Mendez
(Researcher & Pestester - Professional Services)

COMPARTILHAR

Twitter Facebook Linkedin

Laboratório: injecção de comando no router

Introdução

Recentemente surgiu uma nova vulnerabilidade que afectava os Roteadores NR1800X (CVE-2022-41525). Em particular, afecta a versão V9.1.0u.6279_B20210910. Procurando compreender o contexto desta vulnerabilidade, podemos proceder a alguns testes, tais como emular o firmware e executar alguns scripts em Ghidra para identificar outras funções potencialmente perigosas que permitem a execução de código ou o excesso de buffer overflows. Como resultado, obtemos uma grande lista de funções que podemos identificar como promissoras (tais como strcpy, system, sprintf, e outras).


Neste caso, vamos focar especificamente a função cujo estado é realçado a vermelho (ver imagem) com o endereço 0x0041a68c, o que aponta para a função que contém a vulnerabilidade.




Depois de termos feito uma pré-análise com guiões (Ghidra) continuamos a analisar o binário cstecgi.cgi no IDA. Deve-se notar que a utilização de múltiplas ferramentas é apenas por conveniência. Começamos então com a análise estática na função 0x0041a68c, onde podemos ver rapidamente a vulnerabilidade no buffer v17 sendo formatada na linha 26 e depois enviada como parâmetro para a função system() que executa a string. Isto pode ser visto abaixo:




Análise dinâmica


A fim de avançar no processo e entrar em mais detalhes, veremos como os parâmetros são passados para a memória, depurando o firmware em modo de sistema e com uma análise dinâmica. Como primeiro passo, colocamos um ponto de ruptura na função websGetVar(), que é responsável pela obtenção dos valores enviados no corpo do pedido. Neste caso, valida que o valor enviado é ussd.




A cadeia é então formatada com snprintf() e armazenada em buffer 0x7fff5230.




Aqui podemos ver como é que a corda formatada se parece finalmente no buffer.




Finalmente, a chamada à função sistema() é feita com o buffer como parâmetro.




Comprovante de Conceito


Para que a execução do comando seja possível, é necessário identificar o nome setUssd que desencadeia a acção, com isto podemos recriar uma carga útil para iniciar o serviço telnetd no router.




Considerando tudo isto, é possível desenvolver uma exploração ao concatenar duas vulnerabilidades. O primeiro corresponde a um pedido para contornar a autenticação, o que faz com que a sessão seja enviada para o segundo pedido, que é o que explora a execução do próprio código. A exploração final pode ser vista na imagem seguinte.




Para o ver em acção em tempo real, convidamo-lo a ver o seguinte vídeo, onde é feito em apenas alguns segundos.




Conclusão


Como vemos frequentemente, é sempre possível encontrar novas vulnerabilidades em sistemas que já tenham sido analisados. Embora todos os fabricantes e equipamentos possam ser vulneráveis em algum momento, em alguns casos, como este em que a marca afirma ter "Os Dispositivos de Rede mais inteligentes", podemos referir-nos à "Lei de Hypponen", que vale sempre a pena recordar: "Se é anunciada como inteligente, é vulnerável".