Aikido

Detetar potenciais vulnerabilidades de injeção

Segurança

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.

FAQs

Tem perguntas?

Que tipos de injecções são detectados por esta regra?

Detecta padrões de injeção de SQL, comandos, LDAP e código, em qualquer local onde os dados controlados pelo utilizador sejam fundidos em cadeias executáveis.

Só funciona para as línguas SAST suportadas?

Não. Esta regra estende a cobertura a linguagens em que o SAST não existe ou não tem profundidade, por exemplo, PowerShell, COBOL ou Haskell.

Quão rigorosa é a deteção?

Assinala construções de alto risco, como a concatenação de cadeias de caracteres ou a interpolação em chamadas de bases de dados, shell ou intérprete. Os falsos positivos são raros porque a regra é sensível à linguagem.

Como é que o Aikido lida com a correção?

Quando uma violação é encontrada, a ferramenta sugere alternativas mais seguras, como o uso de instruções preparadas, APIs parametrizadas ou validação baseada em lista branca.

Por que não confiar apenas na validação de entrada?

A validação por si só não pode garantir a segurança. A parametrização adequada garante que a entrada não confiável nunca altere a estrutura de consultas ou comandos.

Obter segurança gratuitamente

Proteja seu código, nuvem e tempo de execução em um sistema central.
Encontre e corrija vulnerabilidades rapidamente de forma automática.

Não é necessário cartão de crédito | Resultados do scan em 32secs.