-[ 0x08 ]-------------------------------------------------------------------
-[ Camino al mercado ]-------------------------------------------------------
-[ by Paseante ]-----------------------------------------------------SET-25--
The future of digital systems is complexity,
and complexity is the worst enemy of security.
Bruce Schneier
-'_'- En garde -'_'-
------------------
Fue a finales del siglo XX cuando la humanidad se embarco en una velocisima
carrera para 'situarse' en el ciberespacio, las exigencias de las empresas,
las promesas de los departamentos de marketing, la enormidad de los mercados
a ganar y el hecho de que todo estaba por hacer y todo parecia posible nos
condujo inexorablemente a la situacion del "mas dificil todavia".
Donde habia un servidor web, novisima tecnologia apenas un lustro antes,
aparecio un servidor de aplicaciones y un gestor de contenidos y un software
para medir el rendimiento de ambos en tiempo real y otro para comprobar la
correcion del sacrosanto proceso de compra en los sitios web y la fiabilidad
de la plataforma de comercio electronico y mas software para que todos ellos
se comunicasen y asi hasta el infinito.
Comenzamos a escuchar nombres como RelyENT, Tonic, Vignette, OpenMarket,
Fernway...
Se podia esperar que productos basados en estandares incompletos, a veces
incluso en drafts, con continuas presiones para adelantar su lanzamiento al
mercado, con relativamente pocos clientes y con todo el equipo de desarrollo
intentando que el producto SIMPLEMENTE FUNCIONASE (al menos en un par o tres
de "configuraciones testeadas") fuesen seguros?. No.
Para gran parte, sino toda, de la comunidad de seguridad ha sido un axioma
que la "seguridad a traves de la oscuridad (security through obscurity)"
no funciona. No obstante durante un tiempo nadie busco vulnerabilidades
en estos productos por la unica razon de que 'your_average_hacker' no tenia
acceso a ellos.
Ese tiempo se acabo.
-'_'- El largo y tortuoso camino -'_'-
------------------------------------
En la epoca anterior a que el comercio electronico empezase a controlar la
red, el esquema de navegacion era generalmente muy sencillo.
________ _____________ | | | |
_________ Peticion | | | NES |
| | ==============> |WEB? OK |===> | Apache |
| | | | | IIS |
|_______| <-------------- |Resto? |<--- |____________|
/________/ Respuesta | |
|________|
Cliente Firewall Web Server/Farm
Pero un dia llego en que no reconociamos las URL, los .htm y .html habian
desaparecido y no porque el sitio web usase otras conocidas extensiones
[.shtml, .php, .asp, .nsf...], se trataba de un autentico cambio en la manera
de gestionar y entregar la informacion al cliente.
Nuestro dibujo (perdon por llamar a "esto" dibujo) habia cambiado:
Web Cluster/Farm App. Server
________ _____________ | | | |
_________ Peticion | | | | |--------|
| | ==============> |WEB? OK |===> | Iplanet WS |===>| IAS |
| | | | | Apache |<---| Tomcat |
|_______| <-------------- |Resto? |<--- |____________| | WLogic |
/________/ Respuesta | | |--------|
|________| / \ ||
Cliente Firewall | ||
| ||
| \/
..........
( )
( Oracle ) ( )
( Sybase )
( DB2 )
(..........)
RDBMS Server
Cuando la URL inicial de una pagina web tiene mas de 50 o 60 caracteres ya
puedes comenzar a sospechar que estan utilizando alguno de esos cripticos
productos que incluyen recurrentemente en su literatura promocional a
topicos como "escalable, J2EE compatible, logica de negocio, mision critica"
Como afecta a la seguridad este nuevo escenario?.
Supongamos que seguimos teniendo permitido solo el trafico web, que casos se
han dado de poder acceder directamente a la base de datos Oracle, podria
parecer que no cambia gran cosa puesto que el resto de conexiones son
"internas".
Sin embargo si antes contabamos con fallos de seguridad que afectasen al
servidor web (IIS abstenerse) ahora ademas podemos contar con fallos
especificos del servidor de aplicaciones, con fallos en el driver que usan
para comunicarse con la base de datos, con fallos en el propio acceso y
recogida de los datos.... Y con fallos en la(s) aplicacion(es) que se han
desarrollado sobre ese servidor de aplicaciones. En una palabra, pavoroso.
Y eso siendo generosos y admitiendo un cortafuegos bien configurado.
-'_'- Objetivo a la vista -'_'-
----------------------------
Hace algun tiempo yo me encontre en esa situacion, de sorpresa o curiosidad
por saber que ***** podia haber en un servidor web para generar URL tan
extra~as, con la ayuda de Google u otros buscadores suele ser factible
determinar el nombre del producto en cuestion y tras ello buscar informacion
en la web del fabricante.
El producto en cuestion habia llamado a pasarse OpenMarket (anteriormente
IPS) y como viene siendo habitual para acceder a la documentacion habia que
ser usuario registrado. Bueno, ya veremos.
Unos cuantos garbeos por su web mas tarde y con una pila de MB de .pdf en
mi disco duro solo sabia que el tal OpenMarket (OPMK) era un "gestor de
contenidos". No tenia muy claro que hacia pero parecia que con ese producto
se gestionaba completamente el contenido de la web, se definia quien podia
cambiar que cosas (al detalle de una simple imagen), a quien habia que avisar
si alguien enviaba material nuevo y un monton de virguerias mas, todo eso
con maravillosa administracion web basado en Java2EE y XML. La panacea.
Entre sus usuarios ninguna PYME solo grandes grupos multimedia, bancos,
telecos, etc.
La documentacion era larga y compleja y mis luces escasas, solo me quedo una
cosa clara.
Habia paginas para hacer login
Con eso y mi innata e inmerecida habilidad para saltarme un sorprendente
numero de paginas que piden usuario y password (algo que ha traido a este
ezine mas de un par de articulos) parecia que podiamos hacer algo.
Segun la guia de instalacion el servidor web tenia mapeado dos directorios
/futuretense_cs --> Correspondiente a Content Server
/Xcelerate --> Correspondiente a Content Centre
Tenemos al menos dos paginas de login
/futuretense_cs/AdminForms.html
/futuretense_cs/Xcelerate/LoginPage.html
Si cargamos esas paginas veremos en el fuente, si somos 'rapidos', como
no son mas que una manera "amigable" de acceder a la administracion.
Esta es la linea con "fundamento" de LoginPage.html.
Como veis esta URL es enorme y a eso me referia cuando hablaba de la
proliferacion de sitios web en los que nada mas entrar te encontrabas con
URLs a primera vista incomprensibles.
Troceemos la URL y acomodemosla al diagrama anterior.
www.algo.com --> Hasta aqui llega el servidor web
/servlet/ --> Le indica que esto vaya al servidor de aplicaciones
ContentServer --> La aplicacion Content Server se hace cargo del resto
?pagename.... --> Parametros para la aplicacion anterior
Y como sabemos que OpenMarket guarda todos su contenido en una base de datos
nos podemos imaginar que desde ahi se genera lo que los gurus de SQL llaman
"una consulta". ;-)
Como en otras muchas ocasiones una buena configuracion ayuda a mantener los
intrusos fuera, descubri que era posible "capar" los accesos a las paginas
administrativas mediante ACL (listas de control de acceso), algunos sitios
las tenian y otros no.
Una vez presente en la pagina de administracion tenias por defecto acceso
de lectura a la mayor parte del site. Tecnicamente hablando a falta de
validacion OpenMarket te convertia en "DefaultReader" con la ACL de "Browser"
lo cual te mostraba mas de lo necesario pero te impedia hacer cambios.
Pero volvamos a lo nuestro, tenemos una pagina de login y necesitamos un
usuario y una password. Uso mi tecnica ultra-secreta y pruebo las que sugiere
la guia de instalacion.
User: ContentServer
Pass: FutureTense
En un sorprendente numero de casos funciona y me evita tener que buscar
ningun fallo de seguridad en el producto.
Para muchos valdria pero como en SET somos pesados decidi continuar, mi idea
era comprobar el nivel de seguridad del sistema de autenticacion en la
creencia de que esta gente no podian haber dise~ado algo lo suficientemente
seguro porque dudo que tengan experiencia en el area.
Probe las mas habituales y manidas tecnicas de "SQL injection" ya que a fin
de cuentas al final lo unico que tenemos es una consulta a una base de datos
para validar el usuario.
La tecnica de la comilla simple (') y del comentario (--) no da resultado,
el programa dobla cualquier comilla simple. Necesitamos una innovacion.
Y como soy asi de generoso y tuve exito os lo voy a poner facil mostrando
mi proceso deductivo (aporreo de teclas) y tomandome por vosotros la
molestia de recuperar el log de la maquina y emparejar cada peticion que
hice con la consulta SQL que se genero, todo ello para vuestra mayor
comodidad. De nada.
Si intentamos dejar la password en blanco salta un popup informando que la
password no puede estar vacia (comprobacion mediante Javascript).
Probamos con un usuario ContentServer del que no sabemos la clave:
FutureTense
ContentServer
An error occurred during processing. Check the info log.
Unknown username/password. ContentServer