lunes, 12 de diciembre de 2016

Desencriptador Genexus client.cfg server.cfg


  1 Introducción

No se si llamarla una vulnerabilidad, es mas bien un aprovechamiento de una configuración por default. Este artículo nació luego de probar configuraciones de software desarrollado en Genexus con conexión a bases de datos Tomcat - PostgreSQL y en entornos Tomcat - AS/400 DB2.
Las pruebas que se realizaron fueron llevadas a cabo como si fuera una caja negra analizando archivos temporales que generan las aplicaciones Genexus.
Otro factor fundamental, en muchos entornos AS/400, las configuraciones se encuentran por default, lo que da pie a que si se puede lograr un acceso a la base de datos, también puede ser posible acceder a FTP y en casos particulares el mismo sirve para TELNET (buen acceso, no siempre).
En bases de datos PostgreSQL y como en cualquier otra base de datos, encontrar una tabla a veces ayuda a escalar en| privilegios, y tal vez escalar privilegios desde procedimientos almacenados.
Genexus ofrece una herramienta (o al menos la ofrecía) denominada PasswordChanger para poder editar los archivos client.cfg y server.cfg.
Se utilizó el código fuente de PasswordChanger para entender la encriptación utilizada y por ende aprovechar para desencriptar las credenciales.
El código fuente del desencriptador y las bibliotecas estándares se encuentra en Github.
Si esto se llegó a corregir, disculpen, si sigue vigente espero que les de ideas para solucionar, por las dudas se aclara también que este post es con fines educativos, hasta Genexus 9 funcionaba.


2 Descripción técnica

Los programas desarrollados con la herramienta Genexus crean archivos de configuración local en las estaciones de trabajo y guardan datos para conexiones a bases de datos en directorios ocultos, entre los datos importantes están las credenciales de acceso.
El archivo client.cfg dentro del directorio “GeneXus Web Start”, contiene los datos de credenciales necesarios para el ingreso a la base de datos. El archivo mencionado se encuentra en implementaciones tanto a nivel Java Swing como en entornos web y es de conocimiento casi general que cuando las cosas fallan.
¿Cuál es la vulnerabilidad, el riesgo y su mitigación?
  • Vulnerabilidad: Contraseñas encriptadas almacenadas en archivo client.cfg que pueden ser desencriptadas.
  • Riesgo: Se puede conocer el usuario y contraseña de conexión a la base de datos que utilizan los programas creados con la herramienta Genexus. Esto permitiría el ingreso a bases de datos y el aprovechamiento de acceso a información restringida en tablas.
  • Mitigación: Se debe cambiar la forma de almacenar las contraseñas para los programas del tipo Win o Java Swing.


2.1 Ejecución de las pruebas

Se exponen los pasos que se siguieron para el análisis de la vulnerabilidad y aprovechamiento.
  • Recolección de muestras.
  • Búsqueda de información sobre el tipo de algoritmo que se utiliza para la encriptación.
  • Implementación software del algoritmo de desencriptación.

2.2 Recolección de muestras

En un entorno con una estación de trabajo Windows XP y la posibilidad de conexión a dos servidores de aplicación Apache Tomcat, se realizaron copias de la carpeta “GeneXus Web Start”, generadas por la aplicación programada en Genexus. Para tomar cada muestra, se borró previamente la carpeta GeneXus Web Start dentro de “Archivos de Programas” en la estación de trabajo.
Se analizaron los archivos client.cfg de cada servidor y se pudo verificar que las cadenas encriptadas no presentaron variaciones. Esto dió la pauta que ambos servidores utilizaban el mismo usuario y contraseña para acceder a una base de datos principal.
En el sitio oficial de Genexus se pudo verificar que el algoritmo de encriptación utilizado en estas rutinas es Twofish.
El algoritmo en particular permite una desencriptación de la clave encriptada, pero se requiere que ambas partes (emisor-receptor) conozcan la clave de encriptación.

2.3 Implementación software para desencriptar el archivo client.cfg

Se procedió a buscar y analizar soluciones implementando el lenguaje de programación Java. Se verificó en las páginas de programación relacionadas a la herramienta Genexus y se encontró la herramienta PasswordChanger que permite la generación de contraseñas encriptadas. Luego se utilizó el código fuente con el fin de entender las bibliotecas utilizadas para encriptar/desencriptar las cadenas, el IDE utilizado para el proyecto fue Netbeans 7.1.2 y Netbeans 8.1.
PasswordChanger es ofrecida entre las clases estándares, su función es permitir el cambio de la contraseñas en archivos client.cfg y server.cfg.
El código fuente del desencriptador y las bibliotecas estándares se encuentra en Github.


3 Recomendación

Es recomendable utilizar un sistema de encriptación de un solo sentido, por ejemplo MD5, SHA-2, de manera que se dificulte la desencriptación a partir de una cadena encriptada. Aunque no es imposible, cuesta mucho más intentar romper la encriptación de un sentido como MD5, SHA-2 o lo que quieran colocar.
Mitigar esto, es una tarea para desarrolladores de Genexus.

4 Utilización del desencriptador

Se ofrece un ejemplo de archivos para conexión a una base de datos PostgreSQL. Se puede utilizar el desencriptador llamando a la siguiente linea.



java -jar “directorio del archivo client.cfg”








Conexión FTP a un AS/400 con el usuario desencriptado






No hay comentarios:

Publicar un comentario