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.
.avif)
