La inyección de código puede ser utilizada por un atacante para introducir código malicioso en un programa informático vulnerable y cambiar el curso de ejecución.
Todo el software toma algún tipo de entrada: un programa seguro debe tratar toda la entrada de una fuente externa como «no confiable» hasta que se demuestre lo contrario. Las vulnerabilidades de inyección de código existen cuando un atacante puede enviar una entrada ejecutable a un programa y engañar al software para que ejecute esa entrada. Esto le da al atacante un canal por el que puede eludir cualquier restricción de seguridad establecida por el autor del programa.
Algunos tipos comunes de inyección de código son:
-
Inyección SQL. El tratamiento inseguro de los parámetros HTTP al construir consultas en un sitio web puede permitir que un atacante ejecute estados SQL arbitrarios en una aplicación vulnerable.
-
Scripting entre sitios. El tratamiento inseguro de los parámetros HTTP puede permitir la inyección de JavaScript malicioso en una aplicación web.
-
Ejecución de órdenes. El tratamiento inseguro de parámetros HTTP puede permitir un ataque para ejecutar comandos de shell arbitrarios en el servidor web.
Las consecuencias de una inyección de código exitosa son generalmente desastrosas para el autor de la aplicación. Los riesgos se pueden mitigar garantizando un tratamiento seguro de entradas no confiables y practicando la defensa en profundidad para limitar los privilegios de la aplicación en ejecución.