viernes, 3 de febrero de 2012

Grave vulnerabilidad en PHP










La nueva versión de PHP 5.3.10 resuelve una vulnerabilidad que permite
la ejecución de código remoto, y que fue introducida al intentar
arreglar la anterior actualización.

Si hace un par de semanas se publicaba la actualización 5.3.9 de PHP,
ahora se detecta una nueva vulnerabilidad provocada por los cambios
introducidos en el parche que solucionaban la anterior, relacionada con
las tablas hash (CVE-2011-4885).

Según el investigador Stefan Esser (i0n1c), esta nueva vulnerabilidad
(CVE-2012-0830) permitiría la ejecución remota de código o en su
defecto, una ataque de denegación de servicio .Existe una prueba de
concepto que la aprovecha.

La vulnerabilidad se presenta en la introducción de una nueva propiedad
dentro de php.ini, llamada "max_input_vars" que limita el número máximo
de parámetros que pueden ser usados en una petición (por ej:
http://www.sitio.com/peticion.php?a=1&b=2&c=3). Por defecto le es
asignado el valor 1000.

Esto, unido a los cambios introducidos en la función
'php_register_variable_ex' que no controlan correctamente cuándo se
supera el valor max_input_vars y se utiliza un array de variables,
permite que se pueda ejecutar código remotamente.

Si se observa el código cambiado en php_variables.c, se comprueba que
sólo se controlan los valores menores o iguales a "max_input_vars":

 if (zend_hash_num_elements(
symtable1) <= PG(max_input_vars)) {
   if (zend_hash_num_elements(symtable1) == PG(max_input_vars)) {
      php_error_docref(NULL TSRMLS_CC, E_WARNING, "Input variables
 exceeded %ld. To increase the limit change max_input_vars in php.ini.",
 PG(max_input_vars));
   }
 ...

Sin "else" que encamine por otras vías el código. Por tanto, si se
supera dicho valor el código seguiría ejecutándose hasta llegar a:

 symtable1 = Z_ARRVAL_PP(gpc_element_p);

una macro que devuelve referencias a la tabla hash actualizada. Es aquí
donde se podría ejecutar el código arbitrario o, provocar una denegación
de servicio.

==============================================
PHP ha publicado la actualización de PHP 5.3.10 que esta disponible en:
http://www.php.net/downloads.php 
===============================================

No hay comentarios: