Inyección de código y mitigación con ejemplo

La inyección de código es la inyección maliciosa o la introducción de código en una aplicación. El código introducido o inyectado es capaz de comprometer la integridad de la base de datos y/o comprometer las propiedades de privacidad, la seguridad e incluso la exactitud de los datos. También puede robar datos y/o eludir el control de acceso y autenticación. Los ataques de inyección de código pueden afectar a las aplicaciones que dependen de la entrada del usuario para su ejecución.

La inyección de código difiere de la inyección de comandos . Aquí, un atacante solo está limitado por la funcionalidad del propio lenguaje inyectado. Por ejemplo, si un atacante puede inyectar código PHP en una aplicación y ejecutarlo, solo está limitado por lo que PHP es capaz de hacer.

Las vulnerabilidades de inyección de código varían de fáciles a difíciles de encontrar. Se han desarrollado muchas soluciones para frustrar este tipo de ataques de inyección de código, tanto para el dominio de la aplicación como de la arquitectura. Algunos ejemplos incluyen validación de entrada, parametrización, configuración de privilegios para diferentes acciones, adición de una capa adicional de protección y otros.

Ejemplo:
cuando un desarrollador usa la función PHP eval() y le pasa datos no confiables que un atacante puede modificar, la inyección de código podría ser posible.

El siguiente ejemplo muestra una forma peligrosa de usar la función eval():

// A dangerous way to use the eval() function 
// in PHP
$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");

Como no hay validación de entrada, el código anterior es vulnerable a un ataque de inyección de código.

Por ejemplo:

/index.php?arg=1; phpinfo()

Arriba se mostrará toda la información de php.

Al explotar errores como estos, un atacante puede querer ejecutar comandos del sistema. En este caso, un error de inyección de código también se puede usar para la inyección de comandos, por ejemplo:

/index.php?arg=1; system('id')

Esto le dirá las identificaciones del proceso.
uid=33(www-datos) gid=33(www-datos) groups=33(www-datos)

Mitigación
Idealmente, un desarrollador debería usar la API existente para su idioma. Por ejemplo (Java): en lugar de usar Runtime.exec() para emitir un comando de ‘correo’, use la API de Java disponible ubicada en javax.mail.*
Si no existe tal API disponible, el desarrollador debe limpiar todas las entradas en busca de caracteres maliciosos . . La implementación de un modelo de seguridad positivo sería más eficiente. Por lo general, es mucho más fácil definir los caracteres legales que los ilegales.

Referencia
https://en.wikipedia.org/wiki/Code_injection
https://www.cse.unr.edu/~mgunes/cpe401/cpe401sp11/student/CodeInjection.pptx

Este artículo es una contribución de Akash Sharan . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *