Introdução
As falhas de injeção estão entre os problemas de segurança de software mais perigosos e de longa data. Ocorrem quando entradas não confiáveis são passadas diretamente para consultas, comandos ou interpretadores de código sem a devida validação ou escape. Isso pode levar a acesso não autorizado, corrupção de dados ou comprometimento completo do sistema.
Enquanto as ferramentas SAST tradicionais se concentram em linguagens comuns como JavaScript, Python ou Java, o motor de qualidade de código alimentado por IA do Aikido detecta agora vulnerabilidades de injeção em linguagens que as ferramentas SAST normalmente não detectam, como Perl, Haskell, Groovy, Erlang, Zig, Delphi, PowerShell, COBOL, ABAP, Visual Basic, Pascal e ColdFusion.
Esta regra garante que, independentemente da linguagem utilizada pela sua equipa, a construção de consultas ou comandos inseguros é detectada antes de chegar à produção.
Porque é importante
As falhas de injeção continuam a ser uma das OWASP Top 10 riscos de segurança.
São fáceis de introduzir, mas muitas vezes difíceis de detetar através de revisão manual, especialmente em linguagens antigas ou menos comuns.
Sem salvaguardas:
- Os atacantes podem injetar comandos SQL ou OS em cadeias de caracteres criadas dinamicamente.
- Os dados sensíveis podem ser exfiltrados ou destruídos.
- Sistemas inteiros podem ser controlados se for possível a execução de código.
Ao aplicar esta regra, cada parte do código que cria consultas ou comandos deve usar APIs parametrizadas, bibliotecas seguras ou funções de escape, reduzindo drasticamente a superfície de ataque.
Exemplo de não-conformidade
Abaixo está um exemplo no PowerShell, mas o mesmo problema aparece em muitos idiomas.
# Não seguro: entrada do utilizador diretamente concatenada num comando do sistema
$userInput = Ler-hospedar "Introduzir nome de utilizador"
Expressão de invocação ("utilizador net " + $userInput)Porque é que isto não é seguro: Invoke-Expression executa um comando construído dinamicamente.
Um atacante pode introduzir john && del C:\* /Q e causar um comportamento destrutivo.
Exemplo de conformidade
# 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"
}Porque é que isto é seguro:
- Os argumentos do comando são passados como uma lista, não como uma cadeia de caracteres concatenada.
- A entrada é validada utilizando um regex de lista branca.
- Nenhum dado não confiável chega ao shell sem ser escapado.
Experimente na Segurança do Aikido
Pode ativar esta regra diretamente na ferramenta Qualidade do código do Aikido.
Uma vez ativo, procura automaticamente padrões de injeção em todos os idiomas suportados, incluindo aqueles sem cobertura SAST nativa.
Sempre que um programador abre um pull request:
- O sistema analisa códigos novos e alterados.
- Assinala qualquer utilização de concatenação ou interpolação de cadeias de caracteres em chamadas de comandos, consultas ou intérpretes.
- O relatório destaca a linha exacta e fornece uma breve sugestão de correção (por exemplo, "Utilizar APIs parametrizadas ou entradas validadas").
Esta regra é executada em cada PR, assegurando uma proteção consistente mesmo em repositórios de idiomas mistos.
Conclusão
A construção dinâmica de cadeias de caracteres é um dos erros mais simples que pode levar a violações de segurança críticas.
Ao detetar a concatenação insegura e impor práticas seguras de construção de consultas, esta regra impede classes inteiras de ataques de injeção antes de chegarem à produção.
Independentemente do idioma, a análise inteligente do Aikido reúne proteção estática e assistida por IA para cobrir mais áreas do que as ferramentas tradicionais alguma vez conseguiram.
.avif)
