Introdução
Falhas de injeção estão entre os problemas de segurança de software mais perigosos e antigos. Elas ocorrem quando uma entrada não confiável é passada diretamente para consultas, comandos ou interpretadores de código sem validação ou escape adequados. Isso pode levar a acesso não autorizado, corrupção de dados ou comprometimento completo do sistema.
Enquanto ferramentas SAST tradicionais focam em linguagens comuns como JavaScript, Python ou Java, o motor de qualidade de código impulsionado por IA da Aikido agora detecta vulnerabilidades de injeção em linguagens que as ferramentas SAST geralmente ignoram, como Perl, Haskell, Groovy, Erlang, Zig, Delphi, PowerShell, COBOL, ABAP, Visual Basic, Pascal e ColdFusion.
Esta regra garante que, independentemente da linguagem que sua equipe utilize, a construção insegura de consultas ou comandos seja detectada antes de chegar à produção.
Por que isso importa
Falhas de injeção permanecem um dos Top 10 OWASP riscos de segurança.
Eles são fáceis de introduzir, mas muitas vezes difíceis de detectar por meio de revisão manual, especialmente em linguagens legadas ou menos comuns.
Sem salvaguardas:
- Invasores podem injetar comandos SQL ou de sistema operacional em strings construídas dinamicamente.
- Dados sensíveis podem ser exfiltrados ou destruídos.
- Sistemas inteiros podem ser comprometidos se a execução de código for possível.
Ao aplicar esta regra, cada trecho de código que constrói consultas ou comandos deve usar APIs parametrizadas, bibliotecas seguras, ou funções de escape, reduzindo drasticamente a superfície de ataque.
❌ Exemplo Não Conforme
Abaixo está um exemplo em PowerShell, mas o mesmo problema aparece em muitas linguagens.
# Inseguro: entrada do usuário concatenada diretamente em um comando do sistema
$userInput = Read-Host "Digite o nome de usuário"
Invoke-Expression ("net user " + $userInput)Por que isso é inseguro: Invoke-Expression executa um comando construído dinamicamente.
Um invasor poderia inserir john && del C:\* /Q e causar comportamento destrutivo.
✅ Exemplo Compatível
# Safe: use parameterized or validated command execution
$userInput = Read-Host "Enter username"
if ($userInput -match '^[a-zA-Z0-9_-]+$') {
Start-Process "net" -ArgumentList "user", $userInput
} else {
Write-Host "Invalid input"
}Por que isso é seguro:
- Argumentos de comando são passados como uma lista, não como uma string concatenada.
- A entrada é validada usando uma regex de whitelist.
- Nenhum dado não confiável jamais atinge o shell sem escape.
Experimente no Aikido Security
Você pode habilitar esta regra diretamente na ferramenta de Qualidade de Código da Aikido.
Uma vez ativa, ela escaneia automaticamente por padrões de injeção em todas as linguagens suportadas, incluindo aquelas sem cobertura SAST nativa.
Cada vez que um desenvolvedor abre um pull request:
- O sistema revisa códigos novos e alterados.
- Ele sinaliza qualquer uso de concatenação ou interpolação de strings dentro de chamadas de comando, query ou interpretador.
- O relatório destaca a linha exata e fornece uma sugestão de correção curta (por exemplo, "Use APIs parametrizadas ou entradas validadas").
Esta regra é executada em cada PR, garantindo proteção consistente mesmo em repositórios com múltiplas linguagens.
Conclusão
A construção dinâmica de strings é um dos erros mais simples que podem levar a violações críticas de segurança.
Ao detectar concatenação insegura e aplicar práticas seguras de construção de consultas, esta regra previne classes inteiras de ataques de injeção antes que cheguem à produção.
Independentemente da linguagem, a análise inteligente da Aikido une proteção estática e assistida por IA para cobrir mais terreno do que as ferramentas tradicionais jamais poderiam.
.avif)
