Principales leaks en las herramientas de control de código

martes, 4 de noviembre de 2014

Las herramientas de control de código son muy habituales durante el desarrollo de aplicaciones. Permiten una imprescindible gestión y control de versiones cuando se trabaja en un proceso de desarrollo de software de cierta envergadura. ¿Qué información pueden ofrecer a un atacante si se encuentran mal configuradas?

Herramientas como Git, Mercurial, Subversion y muchas otras resultan muy útiles pero también pueden comprometer la seguridad de la organización si quedan accesibles al exterior, no se configuran correctamente o se realizan malas prácticas durante el paso a producción. En esta entrada se recopilará brevemente la información más relevante que se puede extraer al encontrar un software de control de versiones desprotegido de alguna forma.

Git

Al crear un nuevo repositorio en local, el código usado por la aplicación se crea bajo la carpeta .Git, marcada como oculta. Puede que algún administrador copie esta carpeta a algún punto accesible por la red, y esto permitiría a un atacante obtener el código fuente de la aplicación con tan solo usar el comando

git clone [url del repositorio]. 

Dependiendo de la tecnología o el gestor de contenido que use, se podrán ubicar archivos de configuración con mayor facilidad. En el caso, por ejemplo, de un gestor de contenido Wordpress, se podría detectar fácilmente el fichero de configuración wp-config, donde se encuentran las cadenas de conexión a la base de datos.

Mercurial

Al igual que Git, Mercurial ubica todos los archivos en la carpeta .hg, donde en primera instancia se puede encontrar el archivo dirstate, que enumera los ficheros que han sido procesados por Mercurial. Este archivo es clave para recuperar los posibles ficheros que se ubiquen todavía en la aplicación web y que conserven la misma ruta de acceso y el mismo nombre. En caso de que no se encuentre el archivo dirstate, se puede consultar el archivo undo.dirstate, que contiene información similar. Se crea como copia del dirstate para permitir un rollback. Los archivos de código fuente se ubican en el directorio store/data, donde se guardarán codificados con un algoritmo usado por Mercurial. Para obtener el código fuente en plano, se pueden usar clientes como SourceTree para recuperar el repositorio de código y trabajar de forma local.

Bazaar

Aunque no tan popular como los anteriormente citados, el software de control de código Bazaar es una alternativa que nació en 2007. Como el resto, si no se configura correctamente, puede permitir a un atacante obtener mucha información sobre la aplicación web. Bazaar almacena toda la información en el directorio .bzr. La información más relevante estaría ubicada en branch y repository.

El directorio branch representa la rama en la que se está trabajando y por tanto en esta carpeta se ubican los archivos de configuración como branch.conf que muestran configuraciones para esa rama. Por otro lado, en la carpeta repository se ubican los archivos del repositorio, aunque para acceder a ellos se debe consultar primero el archivo pack-names y recuperar el nombre del archivo pack, que se encontrará a su vez en la carpeta packs. Aunque estos archivos son el "commit" completo, se deberá realizar una búsqueda a través de los índices ubicados en la carpeta "índices" para obtener el código fuente en texto plano.

De nuevo, utlilizando cualquier cliente de Bazaar como Bazaar explorer, se puede descargar el repositorio completo.

 Subversion

Finalmente y al igual que los demás programas de controles de código comentados previamente, la carpeta generada por Subversion es .svn, en la que se almacenará toda la información relativa al control de código. Dependiendo de la versión que se use, puede encontrarse el archivo entries, donde en texto plano se especificaran los archivos implicados, su tipo, permisos, la fecha de creación y el usuario.

Por otro lado, en versiones más recientes se implementa una base de datos SQLite para almacenar los datos: wc.db, ubicada en la carpeta .svn. La diferencia es que el archivo wc.db se usa de índice para acceder al código fuente almacenado en un directorio llamado pristine, donde se guarda una copia del código fuente totalmente en plano. Está organizado por carpetas con el primer octeto del inicio del hash y dentro de la carpeta el propio fichero con el nombre del hash.

Aplicaciones web que gestionan el código

De forma más visual y más intuitiva las aplicaciones web pueden ayudar mucho en el desarrollo de software, pero también hay que fortificarlas adecuadamente para que no accedan usuarios no autorizados. Un claro ejemplo es interfaz web del gestor de código ViewVC, que permite a los usuarios navegar a través de todo el árbol de archivos y recorrer las versiones realizadas sobre los archivos en un repositorio de código CVS o Subversion. Si el acceso a esta aplicación web no se restringe correctamente puede dar a un atacante una vía perfecta para obtener el código fuente de la aplicación de la organización.

Ejemplo de ViewVC


Al igual que existen aplicaciones web que permiten visualizar el código de la aplicación, también se deben controlar y proteger las aplicaciones web que permiten la ejecución del código como Buildbot o Jenkins que pueden ser de gran utilidad a los atacantes.

Este tipo de aplicaciones web, son detectadas por Faast y reportadas en forma de vulnerabilidad para alertar de la su existencia:


Evidencia de Faast

Faast y herramientas de control de código

En Faast se han implementado plugins que permiten la detección de repositorios de código abiertos y sin restricción. Permitiría identificar lo que un posible atacante sería capaz de obtener: desde el código fuente de la aplicación, hasta cadenas de conexión a máquinas, base de datos o servicios en general.


Potencial problema de seguridad reportada a través de la interfaz de Faast

Gracias a los plugins específicos, una vez detectado el repositorio de código, Faast analizará el resto de ficheros correspondientes a la tecnología concreta para aumentar la cantidad de activos disponibles. Así, reportaría archivos de configuración del propio repositorio de código y en caso de que estuviesen, los archivos del código fuente y su ruta accesible a través de la red.

Evidencia en el plugin de Faast sobre una debilidad en Mercurial



Óscar Sánchez
oscar.sanchez@11paths.com

No hay comentarios:

Publicar un comentario en la entrada