Apache ha corregido un fallo de seguridad que podría permitir a un atacante ejecutar comandos si los inyecta previamente en los logs (lo que se consigue simplemente realizando peticiones HTTP especialmente manipuladas).
El fallo se encuentra en el módulo mod_rewrite del servidor web Apache, que no filtra ciertos caracteres y por tanto podría permitir la ejecución de código arbitrario de forma remota si un atacante deja comandos en los logs y luego son interpretados en consola.
mod_rewrite es un módulo del servidor web Apache que permite reescribir las URL solicitadas sobre la marcha basándose en reglas. Dichas reglas de reescritura pueden ser invocadas desde los ficheros ‘httpd.conf‘ de forma global o ‘.htaccess‘ en cada directorio. mod_rewrite es ampliamente utilizado para crear direcciones URL alternativas para las páginas dinámicas de forma que resulten más legibles, fáciles de recordar por los usuarios, y también mejor indexadas por los motores de búsqueda o buscadores.
Joe Orton ha descubierto que la función ‘do_rewritelog‘, localizada en el fichero ‘modules/mappers/mod_rewrite.c‘, no filtra adecuadamente los caracteres no imprimibles cuando escribe los datos en el archivo de registro (logs). Si se usa la directiva RewriteLog, un atacante remoto podría aprovechar este fallo para ejecutar comandos arbitrarios a través de peticiones HTTP especialmente manipuladas. Por ejemplo, que contengan una secuencia de escape para un terminal si los archivos de logs son mostrados.
La vulnerabilidad, identificada como CVE-2013-1862, afecta a la versión del servidor Apache 2.2.24, aunque también podrían estar comprometidas versiones anteriores. En la versión 2.2.25 ha sido corregida.
Más información:
APACHE 2.2 STATUS
mod_rewrite-CVE-2013-1862.patch
Juan José Ruiz
Adrián Faúndez Saint-Jean dice
Estimados, hay algo que no entiendo en appserv en la version 2.5.10 y 2.6.0 contempla apache 2.2.28 por lo que no entiendo de la versión que hablan aquí.??
Anónimo dice
¿Que es eso de «una secuencia de escape para un terminal»?
Hablando para sistemas Unix, si muestras un archivo de log, que es texto, este simplemente se muestra, nada más. Como si quieres mostrar un script shell o un binario directamente, solo se muestra su contenido, pero no se ejecuta.
¿De que modo los datos de los logs pueden llegar a ejecutarse?
Mi no entender.
David García dice
Hola anónimo. Este problema no es nuevo. http://www.securityfocus.com/bid/6948/info, http://www.securityfocus.com/archive/1/508830/100/0/threaded, http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=510030 Básicamente existen determinadas secuencias de escape que debe ser filtradas ya que su interpretación por parte del terminal (o emulador de terminal) podría derivar en una ejecución de comandos. Piensa por ejemplo en «texto plano» que lleva determinadas secuencias de escape para que su representación salga a color o en texto subrayado. Una herramienta tipo 'cat' o 'grep' no interpreta estos caracteres y los ejecuta, simplemente lee el texto y se lo pasa al terminal asignado. Al final es el terminal el que implementa estos códigos de escape que derivan en la ejecución de comandos.