Hoje vamos discutir as vulnerabilidades do Comando Operating System Injection. Quanta ameaça elas representam? Como você pode prevenir essas vulnerabilidades? Como NexDAST ajuda a remediá-las? Vamos responder todas estas perguntas em detalhes abaixo!
O que são Injeções de comandos do Sistema Operacional?
Não confunda injeção de comandos com injeção de código. Um código malicioso sendo injetado em uma linguagem de programação é uma vulnerabilidade de injeção de código. Injeções de comando do SO são um tipo de carga útil que o hacker injeta. O payload então é executado como um comando do sistema operacional.
Um hacker executa um comando de sistema operacional temporário no servidor das aplicações, resultando no risco da aplicação e dos dados serem comprometidos. Vulnerabilidades do comando OS injection são frequentemente usadas como um banco de passos por hackers. Este é o pior cenário com injeções de comandos de sistema operacional, pois começa com injeções de comandos de sistema operacional e leva à exploração de outras partes da infra-estrutura de hospedagem, resultando na exposição de todo um conjunto de outros sistemas.
Python, Ruby, Perl, Java, C, PHP. Todas estas linguagens de programação permitem aos utilizadores chamar um comando shell ao sistema. Isto torna-os vulneráveis às injecções de comandos de SO. No entanto, a execução temporária do comando injetado depende dos privilégios do servidor web. É por isso que as vulnerabilidades de injecção de comandos não são tão perigosas por si só. Mas um hacker pode explorar a escalada de privilégios e acessar mais informações. Com essa informação, mais vulnerabilidades podem ser encontradas e exploradas.
Exemplos de vulnerabilidades do comando OS Command Injection
Vamos dizer que você quer comprar um teclado de um website. A aplicação tem primeiro de lhe permitir ver se o teclado que pretende está em stock. Os utilizadores obtêm esta informação através de URLs como esta:
https://Keyboard-website.com/StockStatus?ProductID=111&StoreID=22
A aplicação pede aos sistemas legados que forneçam ao utilizador informação de stock. A chamada para um comando shell representa esta funcionalidade. IDs de produtos e de lojas são argumentos, então o comando shell se parece com isto:
Keyboards.py 111 22
Os usuários agora vêem se seu teclado preferido está em estoque. No entanto, há um problema aqui. A aplicação não está protegida contra injecções de comandos de SO. Os hackers podem agora submeter uma entrada que executa um comando temporário. Parece algo como “& echo randomstring &” no parâmetro storeID. A aplicação então executa este comando:
Keyboards.py & echo randomstring & 22
O que faz este comando? Ele faz a string fornecida ecoar na saída. Uma maneira eficiente de testar os tipos de injeções de comando do SO. O separador de comandos da shell ( & ) transforma um comando em três. Os utilizadores vêem então três resultados:
Error - productID was not provided
Randomstring
22: command not found
O comando Keyboard.py original executado, mas faltam os argumentos esperados. É por isso que recebemos uma mensagem de erro. A string fornecida (Randomstring) ecoou na saída. Esse é o objetivo do comando injetado de eco. Mas, 22: o comando não encontrado está aparecendo. Porquê? Porque o 22 argumento original executado como um comando, causando um erro.
Agora, vamos cobrir as vulnerabilidades do comando de injeção do SO cego. Isto ocorre quando uma aplicação não retorna a saída de um comando em sua resposta. Apesar disso, hackers ainda têm várias técnicas para explorar essas vulnerabilidades:
- atrasos de tempo
- saída de entrada
Usar um comando injetado para acionar um atraso de tempo permite que um hacker confirme se o comando foi executado. O tempo que uma aplicação leva para responder é o que lhe diz se o comando foi executado ou não. Um dos comandos mais eficazes para explorar esta vulnerabilidade cega é um ping. Este comando permite que você escolha um número exato de pacotes ICMP para enviar. Esse número será o tempo necessário para este comando ser executado.
Redirecionando a saída é outro exploit de injeção de comando do SO. Você redireciona a saída do comando injetado diretamente para um arquivo. Esse arquivo é encontrado dentro do webroot que é recuperado via seu navegador.
Preventing Operating System Command Injections
How can you prevent OS Command Injections? A maneira mais simples e eficaz é nunca usar o shell_exec ou chamadas similares para comandos do sistema operacional hospedeiro. Aplique os mesmos comandos na linguagem de programação que você está usando em seu lugar. Um problema aparece se a sua linguagem de programação não tiver um comando correspondente àquele que você precisa. Nesses casos você deve usar sanitização de entrada. Isso ajudará se você fizer isso antes de atribuir o valor ao comando shell. O uso da lista branca é sempre a opção mais segura quando se trata de injeções.
Outras opções de validação de entrada poderosa incluem:
- Validação de caracteres alfanuméricos (Confirme a inclusão de apenas caracteres alfanuméricos sem espaço em branco ou sintaxe no input)
- Validação de números (Confirme que o input é um número)
- Lista branca de valores permitidos (Confirme contra listas brancas de valores permitidos)
Você nunca deve evitar metacaracteres da shell e tentar sanitizar o input dessa forma. Como isso torna o input vulnerável a hackers inteligentes, que podem contornar facilmente.
Como o NexDAST pode ajudar a prevenir injeções de comando do sistema operacional
A maneira mais simples e eficaz de prevenir injeções de comando do sistema operacional é utilizar o NexDAST. A nossa solução de teste de segurança de caixa negra examina automaticamente a sua aplicação. Quando um OS Command Injection é detectado, diretrizes de remediação são enviadas para o desenvolvedor ou para a equipe SecOps. Não há necessidade de longos e lentos testes manuais com o NexDAST.
Exemplo de NexDAST identificando uma injeção de comando de SO:
vulnerable.com/site/ping?ip=8.8.8.8%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd
A parte %3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd
é a vulnerabilidade. NexDAST também fornece diretrizes de remediação que o ajudam a remediar essa vulnerabilidade da forma mais eficiente possível.
Deseja saber mais sobre NexDAST? Já o abordamos em profundidade em um de nossos blogs antes, e se você tiver um problema com o qual o NexDAST possa ajudar, solicite uma demonstração aqui!