
Exploração de prova de conceito para injeção de comando do sistema operacional (CVE-2023-33381) em roteadores MitraStar GPT-2741GNAC. Demonstra bypass do shell restrito via funcionalidade de ping/traceroute de diagnóstico, com análise de engenharia reversa de binários CGI vulneráveis.
Ao fazer login via SSH, notei imediatamente o conjunto limitado de comandos e opções disponíveis. Tornou-se evidente que eu estava confinado a um ambiente de shell restrito.

Após explorar várias vulnerabilidades conhecidas, decidi aprofundar-me na busca por novas. Para começar, fiz login no portal administrativo e comecei a testar várias funcionalidades que poderiam resultar em injeção de comando do sistema operacional. No menu Diagnostic, encontrei um recurso específico que me permitiu testar a conectividade usando os comandos ping e traceroute.


Então, decidi tentar algo sorrateiro adicionando um caractere ";" ao meu comando. Executei "cat /etc/passwd" e adivinhe? O comando foi executado com sucesso.

Fui além e executei o comando "sed" para substituir a entrada do shell restrito no arquivo "/etc/passwd" por um shell interativo completo.

Como claramente ilustrado na imagem abaixo, as modificações que fiz me permitiram fazer login e executar livremente comandos como "uname" e "cat"

Como eu tinha privilégios de administrador completos, não resisti a me aprofundar para descobrir o componente vulnerável. Ao inspecionar as requisições do navegador, notei algo interessante. Havia dois arquivos CGI, "ping.cgi" e "DiagGeneral.cgi", sendo alvos das requisições.

Depois de obter os arquivos, me diverti um pouco com engenharia reversa usando o Ghidra. Aqui está a parte interessante: no arquivo "ping.cgi", notei que o parâmetro PingIPAddr estava sendo obtido diretamente da entrada do usuário sem qualquer sanitização adequada. O parâmetro PingIPAddr capturado da entrada do usuário era armazenado para uso futuro utilizando a função tcapi_set.

Por último, no arquivo DiagGeneral.cgi, o parâmetro PingIPAddr era recuperado usando a função tcapi_get e então usado diretamente na função system sem qualquer sanitização. Essa falha cria uma vulnerabilidade de injeção de comando, permitindo a execução não autorizada de comandos arbitrários no sistema.
