Aikido

Detectar posibles vulnerabilidades de inyección

Seguridad

Introducción

Los fallos de inyección se encuentran entre los problemas de seguridad de software más peligrosos y antiguos. Se producen cuando se introducen datos no fiables directamente en consultas, comandos o intérpretes de código sin la validación o el escape adecuados. Esto puede dar lugar a accesos no autorizados, corrupción de datos o compromiso total del sistema.

Mientras que las herramientas SAST tradicionales se centran en lenguajes comunes como JavaScript, Python o Java, el motor de calidad del código basado en IA de Aikido detecta ahora vulnerabilidades de inyección en lenguajes que las herramientas SAST suelen pasar por alto, como Perl, Haskell, Groovy, Erlang, Zig, Delphi, PowerShell, COBOL, ABAP, Visual Basic, Pascal y ColdFusion.

Esta regla garantiza que, independientemente del lenguaje que utilice su equipo, las consultas o comandos no seguros se detecten antes de que lleguen a producción.

Por qué es importante

Los fallos de inyección siguen siendo uno de los 10 principales riesgos de seguridad.

Son fáciles de introducir, pero a menudo difíciles de detectar mediante revisión manual, sobre todo en lenguajes heredados o menos comunes.

Sin salvaguardias:

  • Los atacantes pueden inyectar comandos SQL o del sistema operativo en cadenas construidas dinámicamente.
  • Los datos sensibles pueden ser exfiltrados o destruidos.
  • Sistemas enteros pueden ser tomados si la ejecución de código es posible.

Al aplicar esta regla, cada fragmento de código que construye consultas o comandos debe utilizar API parametrizadas, bibliotecas seguras o funciones de escape, lo que reduce drásticamente la superficie de ataque.

❌ Ejemplo de no conformidad

A continuación se muestra un ejemplo en PowerShell, pero el mismo problema aparece en muchos idiomas.

# Inseguro: entrada de usuario directamente concatenada en un comando del sistema
$entradaUsuario = Leer-Host "Introducir nombre de usuario"
Invoke-Expression ("net usuario " + $entradausuario)

Por qué no es seguro: Invoke-Expression ejecuta un comando construido dinámicamente.

Un atacante podría introducir john && del C:\* /Q y provocar un comportamiento destructivo.

✅ Ejemplo de conformidad

# 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 qué es seguro:

  • Los argumentos de los comandos se pasan como una lista, no como una cadena concatenada.
  • La entrada se valida utilizando una lista blanca regex.
  • Ningún dato que no sea de confianza llega nunca al shell sin escapar.

Pruébelo en Seguridad Aikido

Puede activar esta regla directamente en la herramienta de Calidad de Código de Aikido.

Una vez activado, busca automáticamente patrones de inyección en todos los idiomas compatibles, incluidos aquellos sin cobertura SAST nativa.

Cada vez que un desarrollador abre un pull request:

  • El sistema revisa el código nuevo y modificado.
  • Señala cualquier uso de la concatenación o interpolación de cadenas dentro de las llamadas a comandos, consultas o intérpretes.
  • El informe destaca la línea exacta y ofrece una breve sugerencia de solución (por ejemplo, "Utilice API parametrizadas o entradas validadas").

Esta regla se ejecuta en cada RP, lo que garantiza una protección coherente incluso en repositorios multilingües.

Conclusión

La construcción de cadenas dinámicas es uno de los errores más simples que pueden conducir a brechas de seguridad críticas.

Al detectar la concatenación insegura e imponer prácticas seguras de construcción de consultas, esta regla evita clases enteras de ataques de inyección antes de que lleguen a la producción.

Sea cual sea el idioma, el análisis inteligente de Aikido aúna la protección estática y la asistida por IA para cubrir más terreno del que podrían cubrir las herramientas tradicionales.

Preguntas frecuentes

¿Tiene alguna pregunta?

¿Qué tipos de inyecciones detecta esta norma?

Detecta patrones de inyección SQL, de comandos, LDAP y de código, cualquier lugar donde los datos controlados por el usuario se funden en cadenas ejecutables.

¿Sólo funciona para los idiomas SAST compatibles?

No. Esta regla amplía la cobertura a lenguajes en los que SAST no existe o carece de profundidad, por ejemplo, PowerShell, COBOL o Haskell.

¿Hasta qué punto es estricta la detección?

Señala construcciones de alto riesgo como la concatenación de cadenas o la interpolación en llamadas a bases de datos, shell o intérpretes. Los falsos positivos son raros porque la regla tiene en cuenta el idioma.

¿Cómo gestiona el Aikido la remediación?

Cuando se detecta una infracción, la herramienta sugiere alternativas más seguras, como el uso de sentencias preparadas, API parametrizadas o validación basada en listas blancas.

¿Por qué no confiar sólo en la validación de las entradas?

La validación por sí sola no puede garantizar la seguridad. Una parametrización adecuada garantiza que las entradas no fiables nunca cambien la estructura de las consultas o comandos.

Asegúrese gratis

Proteja el código, la nube y el tiempo de ejecución en un sistema central.
Encuentre y corrija vulnerabilidades de forma rápida y automática.

No requiere tarjeta de crédito | Escanea resultados en 32segs.