Llamadas a programas externos en PHP

RECU-0613 (Recurso Ejemplo)

Descripción

La ejecución de programas externos con nombres o argumentos específicos pasados por el usuario, es uno de los ejemplos más claros de vulnerabilidad si no se validan los datos de entrada.

Una llamada como system($userinput) es insegura porque permite al usuario ejecutar arbitrariamente comandos en el host. De la misma manera, una llamada como exec("someprog", $userargs) es también insegura porque el usuario puede sustituir caracteres que tengan especial significado para el compilador. La aparición de las comillas en los argumentos para la instancia puede significar el final del primer comando y el comienzo del siguiente. Como PHP siempre pasa estas cadenas al compilador, es siempre peligroso. Esto incluye a las llamadas a system(), exec(), popen(), backticks, etc.

Ejemplos

function Send($sendmail = "/usr/sbin/sendmail") {
  if ($this->form == "") {
   $fp = popen ($sendmail."-i".$this->to, "w");
  }
  else {
   $fp = popen ($sendmail."-i -f".
          $this->from." ".$this->to, "w");
  }
 }

La variable $this->from viene directamente desde el campo del formulario, donde se está enviando el tipo de mensajes con su dirección de correo. Como la entrada no es validada, el usuario puede modificar este dato introduciendo cualquier otra información.

Contenidos relacionados