Injeção de Código
O que é Injeção de Código?
Injeção de CódigoClasse de vulnerabilidades em que dados fornecidos pelo atacante são interpretados e executados como código pela aplicação, levando a execução arbitrária no seu contexto.
A injeção de código (CWE-94) é a família ampla de falhas em que entrada não confiável é incorporada a algo que a aplicação trata posteriormente como código, fazendo com que o runtime a execute. Ao contrário da injeção de comandos (que atinge a shell do SO), a injeção de código executa dentro do próprio interpretador da aplicação. Exemplos concretos incluem injeções baseadas em eval em JavaScript e Python, injeção de templates do lado do servidor, injeção de linguagens de expressão (OGNL, SpEL), desserialização insegura que dispara cadeias de gadgets e carregamento dinâmico de classes a partir de dados do utilizador. A exploração bem-sucedida geralmente concede execução remota de código com a identidade da aplicação, frequentemente o trampolim para comprometer o host ou cluster.
Três casos emblemáticos mostram o impacto. Apache Struts CVE-2017-5638 permitia executar expressões OGNL num cabeçalho Content-Type malformado; uma instância sem patch causou a falha da Equifax em 2017, expondo ~147 milhões de registos. Log4Shell (CVE-2021-44228), CVSS 10.0, transformava qualquer string registada com um lookup JNDI num carregamento remoto de classe Java. Spring4Shell (CVE-2022-22965) abusava do data-binding do Spring para manipular o ClassLoader e largar uma web shell.
flowchart TD
A[Entrada não confiável] --> B{Alcança um sink que avalia código?}
B -->|eval / template / OGNL / deserialize| C[O interpretador executa o código do atacante]
B -->|Validada / parametrizada| D[Tratada como dado inerte]
C --> E[RCE com a identidade da app]
E --> F[Comprometimento do host / cluster]
D --> G[Seguro]Defesas: nunca construir código, templates ou expressões a partir da entrada; usar APIs parametrizadas e com listas de permissão; desativar ou isolar a avaliação dinâmica e a desserialização; aplicar patches aos frameworks rapidamente; e executar com privilégio mínimo para que um RCE tenha o menor alcance possível.
● Exemplos
- 01
eval(request.body.expr) executando JavaScript controlado pelo atacante num serviço Node.
- 02
Aplicação Java a chamar ScriptEngine.eval sobre um script fornecido pelo utilizador.
● Perguntas frequentes
O que é Injeção de Código?
Classe de vulnerabilidades em que dados fornecidos pelo atacante são interpretados e executados como código pela aplicação, levando a execução arbitrária no seu contexto. Pertence à categoria Ataques e ameaças da cibersegurança.
O que significa Injeção de Código?
Classe de vulnerabilidades em que dados fornecidos pelo atacante são interpretados e executados como código pela aplicação, levando a execução arbitrária no seu contexto.
Como se defender contra Injeção de Código?
As defesas contra Injeção de Código costumam combinar controles técnicos e práticas operacionais, conforme detalhado na definição acima.
Quais são outros nomes para Injeção de Código?
Nomes alternativos comuns: Execução remota de código, Execução arbitrária de código.