martes, 31 de enero de 2012

De fiesta con UniGUI Framework

Esta que vengo a contar, es una de esas historias que me llenan de ganas de publicar, junto al pequeño hilo que se escapa de felicidad, después de lograr algo que nos parece interesante, no cuanto menos de mostrar.

Para deleite de programadores en Delphi tirando a ser muy curiosos, va más bien encaminada la entrada. Esta vez tocaremos un poco de todo, seguridad web, desde Cross Site Scripting hasta Full Path Disclosure, pasando por edición de binarios en hexadecimal, acortadores URL y un par de softwares de regalo en mi querido Visual Basic 6 y ensamblador.

Hasta hace bien poco, un nuevo concepto de desarrollo web se cruzó por mi camino, gracias a un compañero de trabajo, era el llamado UniGUI Framework. Destinado en exclusiva, para dar opción a desarrolladores que trabajan con Delphi, de poder diseñar proyectos destinados a aplicaciones web. El Framework entre otras funciones de publicación, trae la de exportar el proyecto a librerías DLL para su integración en ISS o Apache mediante Mod ISAPI.

¿Y como no? ¡Tenía que reventarlo!

Así que cargando mis jeringuillas de sustancias psicotrópicas, me topé con un Cross Site Scripting, en el control de errores que trae de forma interna la aplicación y aunque no vean el típico mensaje de alert, observen bien la imagen, pues podemos llamarle Blind-XSS.


Cualquier URL agregada de forma externa por un atacante, o interna por el propio programador en el código de la librería, se adjunta a la ruta actual y prescinde del protocolo, en el cual se realizan las peticiones.

¿Por qué ocurre esto? ¡Muy simple! La librería se encarga de filtrar los slashes modificándolos por barras invertidas. Esto quiere decir que el Cross Site Scripting existe y es explotable, pero su margen de acción, se ve reducido para ataques externos, a no ser que logremos bypassearlo.

Detrás de “Access denied”, encontramos ese Full Path Disclosure tan llamativo, que muestra la letra de la unidad y el tipo de servidor que utilizo ¡Genial más datos para realizar un ataque!

Después de hacer pruebas con diferentes navegadores y ver su eficiencia ;) , lo que más asombro me causó, es lo que os muestro en la siguiente captura.


¡Google Chrome se lleva la palma! Así que él solito, fuerza la petición y muestra el enlace corregido. Por si alguno no se había dado cuenta, el servidor de Bit.ly trabaja con un certificado firmado por una autoridad certificadora, con lo que podremos explotar la vulnerabilidad mediante protocolo seguro, pudiendo así, visitar cualquier página sin restricciones.

Podremos incluir un IFRAME sin ningún tipo de problema, gracias al Bypass de Google Chrome y el certificado de Bit.ly, para no sé... ¿visitar enelpc?

O echarle imaginación, y tirar de onMouseOver para jugar en Firefox a ser hackers malos.


Pero nosotros somos buenos ¿verdad? Y queremos corregir vulnerabilidades a toda costa, así que como ya reporté con anterioridad el fallo al foro de UniGUI y no me hicieron ni p*** caso, decidí armarme de valor y buscar entre las strings en hexadecimal del binario, para ver de que forma podría contrarrestar el dichoso ataque.


El HTML que muestra la ruta y la unidad de disco, se muestra mediante una llamada a una variable de tipo string, la cual en caso de contener un valor añadido no alfabético, por ejemplo un número o símbolo en la URL, busca la nueva ruta y si no la encuentra, terminamos con el aviso de acceso denegado en pantalla.

La enfermedad debía de venir acompañada de la cura, y ya que encontré la variable, no me quedó otra que suprimirla de forma definitiva del control de errores, así que un par de Offsets en 00, corregían ambas vulnerabilidades y me daban pie a sacar un nuevo proyecto en VB6. El parche muestra en hexadecimal, la opción de seleccionar los caracteres y la localización en el binario a modificar, más de un avispado le habrá sacado similitud a un AVFucker, ya que si lo desean también puede hacerse con tal función.


Ya que dependiendo de la versión de UniGUI y del proyecto, la ubicación del valor vulnerable puede cambiar, me armé una opción más simple programada en ensamblador y compilada con MASM. Gracias a un código similar de diablo2oo2, que modifica ambos Offsets y corrige la vulnerabilidad para todas sus versiones, buscando una cadena exclusiva de este tipo de binarios, logré modificarlo.


El resultado a la inyección, sería el siguiente:


Ahora sí, reportaré al equipo de desarrollo, algo que posiblemente les haga ver lo que planteé anteriomente de forma más clara... ¿Qué loco iba a corregir un XSS con un editor hexadecimal?

Saludos 4n4les! ;)

14 comentarios:

  1. Solo aceptas comentarios de agradecimiento? no aceptas los errores de que haya errores ortográficos? porque borras los comentarios? viva la censura y la ignorancia ! :)

    ResponderEliminar
  2. Jajaja este anonimo es un ignorante no le hagas ni caso German que eres un grande!!

    ResponderEliminar
  3. En verdad eres grande tio!.
    En internet solemos ver muchos tutoriales de seguridad informatica que no nos enseñan absolutamente nada,a menos de que no sea un e-Book escaneado u obtenido en algun foro Warez. En verdad te felicito porque pocos como vos suelen tener esos conocimientos.. Vos pode hacer un pequeño aporte para sus lectores fieles de su blog y asi compartir algunos manuales de algunas de las Areas de Seguridad Informatica?

    PD: No te preocupes por lo de las correcciones ortograficas,se que son importantes pero,mas importante es el contenido y la comprension con la que entendamos tu post!.

    Saludos!

    ResponderEliminar
    Respuestas
    1. Muchas gracias! :)

      Lo siento, pero no tengo más manuales que los que escribo, lo demás es todo de internet...

      Realmente estoy encantado tanto de leer vuestras críticas, como vuestros elogios. Si hablamos de faltas ortográficas, puedo decir que de los pocos estudios que tengo, lenguaje sin duda era la materia que peor se me daba, pero el anterior comentario, todos sabemos que existen críticas constructivas siempre y cuando no existan mentiras de por medio.

      Saludos!

      Eliminar
  4. Hola Germán, muy interesante el punto que tratas, no debió ser demeritado por los desarrollador(es) de uniGUI, como bien explicas y cuando sabes lo que haces, encuentras pequeñas entradas que al final te hacen por controlar una aplicación a tu gusto.

    Gracias por la información.

    ResponderEliminar
  5. Si que le das al clavo, bien la explicación :D

    */ Lo del comentario que te hicieron arriba... es un puto GAY ese!!!

    No te dejes de esas personas que solo comentan pura basura, nada mas les falta
    que te digan que eres un dirigente de Anonymous .... o el mismo fundador..xD!!

    Me encanta tu blog, y un saludo desde México.!!!

    ResponderEliminar
    Respuestas
    1. jajaj esperemos que no me enchironen por ser un anonimo... si me culpan montamos una fiesta antes de que me encierren como al de Megaupload xD

      Eliminar
  6. Muy buena entrada Germancete, hace tiempo que no hablamos! Lo que más me ha gustado, ha sido la "ingeniosidad" de correjirlo a base de Hex :p

    PD: Mod_security, bién configurado, podría haber evitado los XSS ¿no? Aunque nunca me termina de convencer, siempre salta con lo que no debe :o

    Un saludo, y como te dije, muy buena entrada!

    ResponderEliminar
    Respuestas
    1. Sí! Mod_Security evita el fallo también sin problemas, pero la aplicación no dejaría de ser vulnerabley posiblemente se pudiese bypassear de algún modo jej

      Gracias! Un Saludo! :)

      Eliminar
  7. De verdad eres grande tio!, sigue así te felicito algún día reforzare mis conocimientos y podre aportar cosas útiles a tus post.
    mientras tanto seguiré siendo un humilde noob, dispuesto a aprender de los mas sabios. att: insider08 de Panamá

    ResponderEliminar