lunes, noviembre 10, 2014

Fuga de información en Symfony al chequear requisitos

La semana pasada, mientras jugaba con los Huevos de Pascua en PHP para localizar las versiones del framework instaladas en los servidores web, me topé con una web de control en otro framework  en este caso Symfony, que resolvía toda la problemática del fingerprinting. Solo con llegar a ella ya era posible acceder a la información del framework PHP y mucho más que eso, por lo que solicité a mis compañeros que la metieran en el motor de Faast para reconocer estos leaks en nuestro motor de Pentesting Persistente. Días después he podido jugar mucho más con ello así que aquí va el resultado.

Figura 1: Un "leak" de información en Symfony al chequear los requisitos

Symfony es un framework server-side para aplicaciones PHP que viene con una buena cantidad de controles para desarrollar aplicaciones web. Es un entorno que proporciona capacidades similares a las de Laravel PHP, pero que ha crecido exponencialmente en los últimos tiempos. En las estadísticas de Symfony en Buildwith se puede ver como ya sitios entre el TOP 10.000 mundial comienzan a usarlo, y muchos más en el Top 1.000.000, lo que deja clara la popularidad de esta tecnología.

Figura 2: Estadísticas de uso de Symfony

El asunto es que cuando se instala en un servido web, viene acompañado de un fichero de comprobación de requisitos llamado check.php que se localiza habitualmente en el directorio raíz del sitio web. Esta aplicación no es más que una batería de comprobaciones que revisan si todos los requisitos necesarios se cumplen para que funcione Symfony.

Figura 3: Sección inicial de check.php de Symfony Requirements Check

Lo cierto es, que en la lista de comprobaciones se muestran las versiones del framework PHP así como rutas locales de instalación de los archivos de configuración, lo que es un leak de información que debería ser cortado.

Figura 4: Otra versión más antigua de Symfony Requirementes Check

Este fichero debería eliminarse de la instalación de cualquier sitio web con Symfony una vez terminado para evitar que cualquier atacante acceda a dicha información. Sin embargo, es fácil localizarlos en un montón de servidores.

Figura 5: Symphony Server Check v1.01

Como se puede ver, ha habido diferentes versiones de esta aplicación de comprobación de requisitos en Symfony, y algunos como el siguiente, además llevan incorporado un enlace al PHP info, con lo que la fuga de información es aún mayor.

Figura 6: PHP Info generado desde Symfony Server Check

Todos estos datos deberían ser eliminados del servidor para evitar las fugas de información con el objeto de tener el servidor mucho más fortificado.

Figura 7: LatchBundle para Symfony2

Además, hace ya muchos meses que para la versión Symfony2 se hizo un plugin para Latch por lo que si quieres puedes, además de eliminar el leak de información que se genera con check.php, añadir una capa de seguridad para las identidades con LatchBundle.

Saludos Malignos!

1 comentario:

  1. Según creo, esta fuga de información parece que ocurre en Symfony1. Pero el framework que más se usa es Symfony2, que es al que corresponde el gráfico. En Symfony 2 el archivo check.php está en un directorio protegido. De todas formas, también existen fugas de información por una mala configuración, he escrito un post en mi blog: http://project-longinus.es/fuga-de-informacion-en-symfony2/

    ResponderEliminar