Lotus Notes Client R5, la herramienta de mensajería y colaboración,
cuenta con su propio navegador web y una máquina virtual Java para
poder visualizar los applets. Existe una vulnerabilidad en la
característica ECL (Execution Control List), propietaria de la máquina
virtual Java de Lotus, que permite chequear mediante un applet, de
forma remota, la existencia o no de ficheros en una trayectoria
determinada.
La vulnerabilidad, descubierta por Hiromitsu Takagi, fue reportada por
él mismo a Lotus el 3 de Mayo del presente año. Cuando ya transcurren
más de 6 meses, y después de continuos contactos por correo
electrónico y teléfono, Lotus no ha facilitado solución alguna al
respecto. Takagi, ante la falta de una respuesta satisfactoria, ha
optado por hacer pública la vulnerabilidad en busca de una reacción
acorde con el problema.
Un punto más a favor de la necesidad de las políticas «full
disclosure» que practican foros como «una-al-día», donde los detalles
de las vulnerabilidades se facilitan de forma pública. Si bien algunos
consideran que esta práctica es contraproducente, ya que la
información llega al mismo tiempo a los que intentarán defenderse
cómo a los atacantes potenciales, las ventajas son obvias: los
lectores pueden comprobar las vulnerabilidades en sus sistemas y
adoptar medidas preventivas, conocer los detalles permite estudiar
y detectar problemas similares y, por razones obvias, los
distribuidores se apresuran en corregir las vulnerabilidades y
facilitar parches a los usuarios.
La vulnerabilidad
El modelo de seguridad del estándar Java hasta JDK 1.1 prohibe
cualquier tipo de acceso a los ficheros locales del sistema. La
característica ECL introducida por Lotus en su máquina virtual es
más flexible al respecto, ofreciendo la posibilidad al usuario final
de aceptar o cancelar una acción cuando intenta acceder a un fichero
local, mediante la aparición de un cuadro de diálogo donde se puede
elegir «Execute» o «Cancel».
Cuando se invoca al método getSystemResource(String) de la clase
java.lang.ClassLoader, el cuadro de diálogo aparece *sólo* si existe
el fichero que se pasa como argumento. Si bien el método siempre
devuelve el valor «null» se haya elegido cualquier opción del cuadro
de díalogo o si este ni siquiera se ha visualizado, la diferencia de
tiempo que transcurre es distinta. Es decir, cuando el fichero no
existe el cuadro de diálogo no aparece, el valor «null» es devuelto
de forma instantánea y la aplicación sigue su curso. Sin embargo,
cuando el fichero existe aparece el cuadro de diálogo y el tiempo de
proceso es mayor, por lo que midiendo el tiempo que transcurre antes
y después de invocar al método se puede establecer si el fichero
existe o no.
Código:
long start = System.currentTimeMillis();
URL resource = ClassLoader.getSystemResource(filePathname);
long diff = System.currentTimeMillis() – start;
if (diff > 400) { [existe]
…
Implicaciones
A continuación algunos ejemplos de las posibilidades que ofrece la
explotación de esta vulnerabilidad:
-Conocer si el usuario ha visitado sitios web específicos, chequeando
la existencia de sus respectivas cookies.
-Saber si una dirección web se encuentra en la clasificación de
«favoritos» de Internet Explorer, chequeando la existencia del
correspondiente archivo en \WINDOWS\Favorites\.
-Descubrir si un fichero determinado ha sido utilizado recientemente,
chequeando la existencia de un acceso directo con el mismo nombre en
la carpeta \WINDOWS\Recent\.
-Conocer si hay determinadas aplicaciones instaladas o configuraciones
específicas del sistema, cuyo conocmiento puede ser aprovechado para
llevar a cabo otros ataques.
Demostración
Takagi ha creado un applet que demuestra, y permite a los usuarios
verificar, la existencia del agujero. El ejemplo, que funcionará de
forma correcta en Lotus Notes Client R5, comprueba si tenemos
instaladas determinadas aplicaciones chequeando la existencia de sus
trayectorias y ejecutables por defecto, así como informa si hemos
visitado el sitio web de PlayBoy tras examinar algunas cookies.
bernardo@hispasec.com
Más información:
Lotus Notes R5 Client
http://www.lotus.com/home.nsf/welcome/notes
Lotus Notes Client R5 File Existence Verification Vulnerability
http://www.securityfocus.com/bid/1994
Security Hole in ECL Feature of Java VM Embedded in Lotus Notes Client R5
http://java-house.etl.go.jp/ml/archive/j-h-b/038904.html
Demostración
http://java-house.etl.go.jp/~takagi/java/security/lotus-notes-existence-attack/Test.html
Deja una respuesta