Command injection (ou injeção de comandos do sistema operacional) é uma vulnerabilidade crítica de segurança web que permite a um cibercriminoso executar comandos arbitrários no sistema operacional do servidor host por meio de uma aplicação vulnerável. Ele é considerado extremamente perigoso porque burla as defesas da aplicação e concede ao atacante o controle total sobre a infraestrutura comprometida, permitindo o roubo de dados sensíveis, a instalação de malwares e a movimentação lateral dentro da rede corporativa.
Principais Aprendizados
- Ocorre quando entradas de usuários não são sanitizadas e são passadas diretamente para o shell do sistema.
- Diferente de outras injeções, o Command Injection ataca o sistema operacional subjacente, não apenas o banco de dados.
- A prevenção exige o uso de APIs seguras e a rejeição absoluta de invocações diretas de shell (como system ou exec).
A Mecânica do Ataque: Como Funciona o Command Injection
Muitas aplicações web precisam interagir com o sistema operacional para realizar tarefas cotidianas, como enviar e-mails, converter imagens ou verificar a conectividade de rede usando comandos como o ping. O problema surge quando a aplicação pega dados inseridos pelo usuário (como um formulário ou parâmetro de URL) e os concatena diretamente em um comando de terminal sem a devida validação.
Um atacante pode usar metacaracteres do shell, como ponto e vírgula (;), e comercial (&) ou pipes (|), para encerrar o comando original e iniciar um novo. Por exemplo, se o servidor espera um endereço IP para pingar, o atacante pode enviar 127.0.0.1; cat /etc/passwd. O servidor executará o ping e, em seguida, revelará o arquivo de senhas do sistema. Identificar esse tipo de brecha é um dos principais objetivos durante um teste de invasão em aplicações web.

Por Que Essa Falha é Tão Devastadora?
O nível de perigo de uma injeção de comando é máximo porque ele frequentemente leva a um cenário de RCE (Remote Code Execution - Execução Remota de Código). De acordo com a documentação oficial do MITRE (CWE-78), a falha de neutralização inadequada de elementos especiais usados em comandos de SO pode resultar no comprometimento completo do servidor host.
Uma vez que o atacante consegue injetar comandos, o próximo passo na fase de exploração geralmente é estabelecer uma "shell reversa". Isso conecta o servidor da vítima diretamente à máquina do hacker, permitindo que ele navegue pelos diretórios, altere permissões e crie backdoors persistentes como se estivesse fisicamente na frente do servidor.
Command Injection vs. SQL Injection: Qual a Diferença?
Embora compartilhem a mesma raiz conceitual (a falha em separar dados de código executável), os alvos são diferentes. Entender como blindar seu site contra o SQL Injection é crucial para proteger seu banco de dados, pois o SQLi manipula consultas feitas ao SGBD (como MySQL ou PostgreSQL).
Já o Command Injection ignora o banco de dados e mira no interpretador de linha de comando (como o Bash no Linux ou o CMD/PowerShell no Windows). O impacto do Command Injection costuma ser mais amplo, pois quem controla o SO também pode, invariavelmente, acessar o banco de dados local, mas o inverso nem sempre é verdadeiro.
Dados Reais e a Classificação na OWASP
Historicamente, as falhas de injeção sempre dominaram as listas de maiores riscos globais. Segundo a fundação OWASP, as injeções continuam sendo uma das categorias mais exploradas por cibercriminosos em todo o mundo. Compreender o OWASP Top 10 é obrigatório para qualquer equipe de desenvolvimento que deseje criar softwares resilientes, visto que a injeção (A03:2021-Injection) agrupa tanto SQLi quanto Command Injection sob o mesmo guarda-chuva de criticidade.
Como Prevenir e Reduzir sua Superfície de Ataque
A única forma eficaz de mitigar o risco de injeção de comandos é adotar uma postura de defesa em profundidade. Diminuir a superfície de ataque significa remover funções perigosas e limitar os privilégios da aplicação. Aqui estão as melhores práticas:
- Evite chamadas de sistema: Se possível, não use funções como
system(),exec(),popen()ouRuntime.exec(). Use APIs nativas da linguagem de programação. - Validação de entrada rigorosa: Implemente "Allow-lists" (listas de permissão). Aceite apenas caracteres alfanuméricos estritos e rejeite qualquer input que contenha metacaracteres de shell.
- Princípio do Menor Privilégio: O usuário do sistema operacional que executa o servidor web (como
www-data) não deve ter permissões de root ou administrador. - Parametrização: Se a chamada ao shell for absolutamente inevitável, passe os argumentos de forma parametrizada, isolando os dados do comando principal.

Perguntas Frequentes
O que é OS Command Injection?
É uma vulnerabilidade de segurança na qual um invasor consegue executar comandos de sistema operacional no servidor que hospeda a aplicação, explorando entradas de dados mal validadas.
Como identificar uma vulnerabilidade de injeção de comando?
Pode ser identificada injetando metacaracteres de shell (como ;, |, &) seguidos de comandos simples (como whoami ou sleep) em campos de entrada da aplicação. Se o servidor responder com o resultado do comando ou atrasar a resposta, ele está vulnerável.
Qual a diferença entre RCE e Command Injection?
Command Injection é a técnica ou vulnerabilidade específica de injetar comandos no shell do SO. RCE (Remote Code Execution) é o resultado final ou o impacto dessa vulnerabilidade, onde o atacante consegue executar códigos remotamente na máquina alvo.
0 Comentários