miércoles, 14 de febrero de 2007

Sun Solaris vuelve a sorprender resucitando una vulnerabilidad "histórica"

El día 12 de febrero se dio a conocer una vulnerabilidad en Sun Solaris 10 tan simple como sorprendente. El fallo permitía el acceso trivial como cualquier usuario (incluido root) a través de telnet en Sun Solaris 10. Sin necesidad de conocimientos especiales, sin shellcode ni exploits, el fallo llega a ser vergonzosamente simple. Para colmo, el error fue ya descubierto y corregido en sistemas UNIX hace 13 años.

SANS fue de los primeros en alertar sobre el problema. A través de un simple parámetro del cliente telnet ("-f", utilizado para traspasar las credenciales locales), se podía acceder a un servidor telnet en Sun Solaris 10 sin necesidad de autenticación. Sólo conociendo el nombre de usuario. El comando concreto es:

telnet -l "-froot" [direccion_del_host]

Aunque bien podría tratarse de cualquier otro usuario, en vez de root. El efecto sería el mismo: acceso como ese usuario al servidor sin necesidad de conocer su contraseña. Aunque telnet no sea un método de acceso especialmente utilizado por los que buscan seguridad, es mucho más usado de lo que en principio pueda parecer. Se añade además el peligro de que dispositivos de terceros implementen Solaris en su interior y puedan tener el servidor telnet activo. El único "alivio" es que en Solaris por defecto, al usuario root sólo se le permite acceso por consola.

El incidente parece tan simple y absurdo, que algunos quisieron ver en este error una puerta trasera creada a propósito. Como ya insinuara Steve Gibson en enero de 2006, tras estudiar la vulnerabilidad WMF que azotaba por aquellos tiempos a usuarios de Windows. Se quiso atribuir malicia a un grave error imperdonable.

Al poco de darse a conocer, los más experimentados recordaron el mismo error ya estudiado, documentado y resuelto. Efectivamente, existía la posibilidad de explotar este fallo en 1994. Ocurrió primero en sistemas AIX y luego el código fue portado a otros sistemas UNIX. La vulnerabilidad fue corregida y olvidada hasta que 13 años después resucita en un sistema operativo moderno. Como se apuntaba en alguna lista, "se trata de una desafortunada reimplementación del mismo fallo". El código del demonio telnet en Solaris 10 es "open source".

¿Cuánto tiempo estuvo ahí? La opción "-f" (y con ella este tremendo error) fue introducida por Sun en noviembre de 2002, cuando se añadió funcionalidad de autenticación Kerberos al demonio telnetd en Solaris 10. Al menos en poco tiempo, una 48 horas, Sun tenía disponibles parches oficiales para este problema.

Cuando surgió este problema inmediatamente vino a la cabeza un error distinto en su forma pero muy similar en el fondo. El 30 de enero de 2007 Sun alertaba sobre la posibilidad de provocar una denegación de servicio de forma remota a través de tráfico ICMP. En otras palabras, resucitaba el "ping de la muerte" que atacó a muchos sistemas hace aproximadamente 10 años. A diferencia de este problema con telnet, no se dieron detalles técnicos sobre esta vulnerabilidad y se anunció con los parches ya disponibles.

Sun Solaris es una plataforma muy segura, pero tropezones como estos hacen pensar sobre qué nuevos (o peor, "viejos") y triviales problemas pueden surgir en el futuro, cuánto código se reutiliza desde hace años y qué pesadillas quedarán por resucitar... pero sobre todo, queda la extraña sensación de que en todos lados cuecen habas.


Sergio de los Santos
ssantos@hispasec.com


Más información:

Another good reason to stop using telnet
http://isc.sans.org/diary.php?storyid=2220

Multiple Unix Vendor rlogin -froot Remote Authentication Bypass
http://osvdb.org/displayvuln.php?osvdb_id=1007

A Security Vulnerability in Solaris 10 ICMP Handling May Allow a
SystemPanic and Result in Denial of Service (DoS)
http://sunsolve.sun.com/search/document.do?assetkey=1-26-102697-1

Security Vulnerability in the in.telnetd(1M) Daemon May Allow
Unauthorized Remote Users to Gain Access to a Solaris Host
http://sunsolve9.sun.com/search/document.do?assetkey=1-26-102802-1&searchclause=

The in.telnetd vulnerability exploit
http://blogs.sun.com/tpenta/entry/the_in_telnetd_vulnerability_exploit

How OpenSolaris dit its job
http://blogs.sun.com/danmcd/entry/how_opensolaris_did_its_job