Injeção de Comandos
O que é Injeção de Comandos?
Injeção de ComandosAtaque em que a entrada do utilizador é passada sem sanitização a um shell do sistema, levando a aplicação a executar comandos fornecidos pelo atacante.
A injeção de comandos (OS command injection) ocorre quando uma aplicação constrói um comando de sistema concatenando entradas não confiáveis e entrega o resultado a um shell. Metacaracteres como ;, &, |, $() ou crases permitem ao atacante encadear comandos adicionais que correm com os privilégios do processo da aplicação. As consequências vão da leitura e escrita arbitrária de ficheiros ao movimento lateral, passando por shells inversas e o controlo total do servidor. Consta do OWASP Top 10 na categoria "Injeção" (A03:2021) e está catalogada como CWE-78.
A causa de raiz é o interpretador de metacaracteres do shell, e não a entrada em si, pelo que a distinção decisiva está entre invocar um shell (system(), os.system, Runtime.exec("sh -c ..."), crases) e invocar o binário-alvo diretamente com um vetor de argumentos (execve, subprocess.run([...], shell=False), ProcessBuilder). As APIs baseadas em arrays de argumentos passam cada token como literal, de modo que os metacaracteres nunca chegam a um analisador. Uma variante relacionada, a injeção de argumentos, abusa das próprias opções de um programa (por exemplo, contrabandeando --output ou -o ProxyCommand para o git, curl ou ssh), mesmo quando nenhum shell é invocado.
O impacto real é severo nos dispositivos de perímetro de rede. CVE-2024-3400 (CVSS 10.0) foi uma injeção de comandos do SO não autenticada na funcionalidade GlobalProtect do PAN-OS da Palo Alto Networks, explorada como zero-day a partir de abril de 2024 pelo ator que a Volexity rastreia como UTA0218 para implantar shells inversas e exfiltrar configurações de firewall. CVE-2024-21887 no Ivanti Connect Secure, encadeada com o bypass de autenticação CVE-2023-46805, permitiu execução de comandos sem autenticação e foi explorada em massa no início de 2024. A falha Shellshock de 2014 (CVE-2014-6271) permitia aos atacantes injetar comandos através de variáveis de ambiente manipuladas analisadas pelo Bash, alcançáveis via CGI, DHCP e SSH.
Defesas: evitar o shell por completo através de APIs de arrays de argumentos; aplicar listas estritas de valores permitidos; descartar opções e metacaracteres perigosos; executar os serviços como utilizadores de privilégios mínimos dentro de sandboxes/contentores; e aplicar filtragem de saída para que um ponto de apoio não consiga comunicar com o exterior.
flowchart TD
A[Entrada do utilizador: hostname] --> B{Inserido no comando}
B -->|"os.system('ping ' + host)"| C[O shell interpreta os metacaracteres]
C --> D["host = 127.0.0.1; cat /etc/shadow"]
D --> E[O comando do atacante corre como utilizador da app]
E --> F[Shell inversa / exfiltração de dados / tomada de controlo]
B -->|"subprocess.run(['ping', host], shell=False)"| G[Argumento passado como token literal]
G --> H[Sem análise pelo shell - injeção neutralizada]
style F fill:#c0392b,color:#fff
style H fill:#27ae60,color:#fff● Exemplos
- 01
Um utilitário de ping que concatena um parâmetro de host permite que 127.0.0.1; cat /etc/shadow exponha hashes de palavras-passe.
- 02
Um endpoint de processamento de imagens que invoca o ImageMagick executa um comando do atacante através de um nome de ficheiro manipulado.
● Perguntas frequentes
O que é Injeção de Comandos?
Ataque em que a entrada do utilizador é passada sem sanitização a um shell do sistema, levando a aplicação a executar comandos fornecidos pelo atacante. Pertence à categoria Ataques e ameaças da cibersegurança.
O que significa Injeção de Comandos?
Ataque em que a entrada do utilizador é passada sem sanitização a um shell do sistema, levando a aplicação a executar comandos fornecidos pelo atacante.
Como se defender contra Injeção de Comandos?
As defesas contra Injeção de Comandos costumam combinar controles técnicos e práticas operacionais, conforme detalhado na definição acima.
Quais são outros nomes para Injeção de Comandos?
Nomes alternativos comuns: Injeção de comandos do SO, Shell injection.