miércoles, 29 de octubre de 2008

Java (por fin) eliminará las versiones antiguas al actualizar

Sun Microsystem, creador del Java Runtime Environment (JRE) ha prometido que por fin eliminará las versiones antiguas del JRE que quedan en el sistema cuando se actualiza. Esta incomprensible forma de dejar al usuario la responsabilidad de desinstalar las antiguas versiones ha sido siempre duramente criticada. Hasta ahora, cuando Java se actualiza en un sistema, mantiene la versión anterior (insegura) en él. Por fin parece que este comportamiento va a cambiar.

JRE permite que se ejecuten programas Java (especialmente applets si se tratan de utilidades web) en general en el sistema. Muchos usuarios tienen el JRE instalado en sus sistemas, es un software muy popular. El problema es que puede que mantengan sin saberlo más de una JRE en su ordenador. Cuando se instala por ejemplo una versión JRE6 Update 3, queda la JRE6 Update 2 en el sistema si es que se tenía instalada. Cada una con aproximadamente 120 megas de espacio consumido en el disco, y así sucesivamente. Aunque esto no es solo una incomodidad. Aproximadamente cada dos o tres meses, Sun saca un nuevo “Update” para su JRE que soluciona un buen número de problemas de seguridad que pueden ser aprovechados por atacantes. Y de hecho lo son. JRE es un vector de ataque usado, aunque no el más popular.

Si añadimos que JRE ha sufrido habitualmente grandes problemas de seguridad, y que de hecho es casi siempre el motivo de las actualizaciones, nos encontramos con que el usuario queda en una situación insegura: conserva versiones antiguas y con fallos de seguridad en su ordenador aun habiendo instalado a la última versión no vulnerable. Sun, consciente de que esto podría suponer un vector de ataque, bloquea explícitamente la capacidad de los applets de elegir con qué versión se ejecutan. Pero se ha demostrado que es posible saltarse esta restricción. Un atacante podría preparar un applet que accede a una versión antigua vulnerable y aprovechar un fallo para acceder al sistema.

Pero parece que esto ya no será así. Hasta ahora era responsabilidad del usuario desinstalar las versiones antiguas (si no las necesita, que suele ser lo más habitual) cada vez que actualiza su JRE. En la nueva JRE6 Update 10 se incluirá una funcionalidad (patch-in-place) que hará que se elimine a sí misma (pero no al resto anterior versiones de JRE que puedan estar instaladas en el sistema) cuando en el futuro, aparezca el Update 11. Algo es algo. Este patch-in-place puede ser deshabilitado para quien necesite versiones muy específicas, pero vendrá activo por defecto.

Hace varios años, Microsoft creó su propia máquina virtual Java para competir contra el JRE de Sun. También sufrió graves problemas de seguridad y supuso un recurrido vector de ataque. Pero la compañía tiró la toalla pronto. La máquina virtual de Java de Microsoft dejaría de ser actualizada o incluida en sus productos en 2004 y abandonó definitivamente su soporte en 2008. En aquellos momentos, la redundancia de dos sistemas de interpretación de Java (distintos, pero con un mismo fin) añadido a la conservación de versiones anteriores del JRE (como ha venido ocurriendo hasta ahora), abría un amplio vector de ataque en los Windows. Afortunadamente, poco a poco este vector se va reduciendo.


Sergio de los Santos
ssantos@hispasec.com


Más información:

Patch-in-place
http://java.sun.com/javase/6/docs/technotes/guides/jweb/otherFeatures/jre_install.html#patchInPlace

No hay comentarios:

Publicar un comentario en la entrada