Pautas sobre la inyección de comandos

LIBP-0114 (Libro de pautas)

El propósito del ataque de inyección de comandos es inyectar y ejecutar comandos especificados por el atacante en una aplicación vulnerable. En situaciones como ésta, la solicitud que ejecuta los comandos no deseados del sistema, es como un shell del sistema, y el atacante puede hacerse pasar por cualquier usuario del sistema autorizado. Sin embargo, los comandos se ejecutan con los mismos privilegios y en el mismo entorno de la aplicacion. Los ataques de inyección de comandos son posibles en la mayoría de los casos debido a la falta de la correcta validación de datos entrada , que pueden ser manipulados por el atacante (formularios, cookies, encabezados HTTP, etc.)

Existe una variante del ataque basada en la inyección de código. Las diferencias con la inyección de comandos es que el atacante añade su código al código existente. De esta manera, el atacante extiende la funcionalidad por defecto de la aplicación sin la necesidad de ejecutar comandos del sistema. El código inyectado se ejecuta con los mismos privilegios y en el mismo entorno de la aplicación

Un ataque de inyección de comando del sistema operativo se produce cuando un atacante intenta ejecutar comandos del sistema a través de un nivel de aplicación vulnerable. Las solicitudes se consideran vulnerables a los ataques de inyección de comandos OS si utilizan la entrada del usuario en un nivel del sistema de comandos

Las vulnerabilidades por inyección de comandos normalmente se producen cuando:

  • Los datos introducidos en una aplicación proceden de una fuente no confiable.
  • Los datos son parte de una cadena que se ejecuta como un comando por la aplicación.
  • Al ejecutar el comando, la solicitud ofrece a un usuario malintencionado un privilegio o capacidad que el atacante de otro modo no obtendría.

Pautas

TítuloCarácter
Hacer uso de las funciones para filtrar las entradasObligatoria

Hacer uso de las funciones para filtrar las entradas

Se deben filtrar todas las entradas haciendo uso de las funciones especificas para mitigar las inyecciones de código

Ya se ha comentado que uno de los mayores problemas que provocan esta vulnerabilidad es la falta de filtrado de las entradas de los usuarios. Es recomendable, filtrar las mismas para asegurar que no se introduce código malicioso. Utilice las funciones:

  • escapeshellarg() que filtra los argumentos
  • escapeshellcmd() que filtra los comandos no estáticos

Un ejemplo sería el siguiente:

<?php

 $clean = array();
 $shell = array();

/* Filter Input ($command, $argument) */

 $shell['command'] = escapeshellcmd($clean['command']);
 $shell['argument'] = escapeshellarg($clean['argument']);
 $last = exec("{$shell['command']} {$shell['argument']}", $output, $return);

?>