miércoles, 22 de noviembre de 2000

Ejecución de código arbitrario a través de "tmpwatch"

El programa "tmpwatch" permite que un usuario local ejecute código
arbitrario en el servidor, con los privilegios del usuario que lanza
"tmpwatch", típicamente "root".
"tmpwatch" es un programa que se encarga de eliminar ficheros
temporales que no han sido modificados o a los que no se haya accedido
en un determinado espacio de tiempo. Suele ser un comando utilizado en
directorios compartidos por varios usuarios (típicamente, "/tmp") y
liberar espacio en disco. Se trata, adicionalmente, de una herramienta
ejecutada típicamente por "root".

La versiones de "tmpwatch" anteriores a la 2.6.2 invocan el comando
"fuser" para identificar ficheros abiertos por otros procesos, pero
dicha invocación, a través de la función "system()", se realiza de
forma insegura: un usuario puede crear un fichero cuyo nombre contenga
metacaracteres shell y forzar la ejecución de comandos arbitrarios si
se lanza "tmpwatch" con la opción "-s" o "-fuser".

La vulnerabilidad afecta a las versiones 6.2 y 7.0 de Red Hat Linux, y
6.0, 6.1, 7.0 y 7.1 de Linux-Mandrake.

Adicionalmente, las versiones de "tmpwatch" en Red Hat Linux 6.1, 6.2
y 7.0, y 6.0, 6.1, 7.0 y 7.1 de Linux-mandrake, procesan los
directorios haciendo un "fork()" en cada uno de ellos, lo que puede
producir un ataque de denegación de servicio (por desbordamiento de la
tabla de procesos) si un usuario crea una jerarquía de directorios muy
profunda.

La recomendación es actualizar a la versión 2.6.2 de "tmpwatch".



Jesús Cea Avión
jcea@hispasec.com


Más información:

Insecure call of external programs in Red Hat Linux tmpwatch
http://xforce.iss.net/alerts/advise64.php

tmpwatch has a local denial of service and root exploit
http://www.redhat.com/support/errata/RHSA-2000-080-01.html

Linux-Mandrake Update and Security Advisories
http://www.linux-mandrake.com/en/security/