jueves, noviembre 06, 2014

Saber la versión PHP de un servidor web por los huevos de pascua

Los Huevos de Pascua son comunes entre los ingenieros tecnológicos. Famosos son los que los equipos de Apple han puesto a lo largo de la historia, que van desde mostrar fotos - que a veces se encuentran de la forma más inesperada - hasta vídeos, el discurso de Stanford de Steve Jobs o grabaciones de audio. En el caso de Microsoft, en sus productos han llegado hasta a meter juegos que puedes disfrutar desde el propio Excel 2010, donde está incluido el Missile Command y el Tower Defense. Los ingenieros de Google también son proclives, son famosos los Huevos de Pascua en Youtube donde se puede jugar también a juegos como Missile Command. En el nuevo Google Chrome Canary se ha metido en la página de error que muestra problemas de conexión de red el juego del T-Rex Runner, así que en lugar de tener una aburrida página que te frustra, podrás jugar con el dinosaurio.

Figura 1: Cómo saber la versión de PHP de un servidor web por los huevos de pascua

Los Huevos de Pascua molan, pero a veces pueden ser peligrosos, especialmente si se pueden convertir en algún problema de seguridad. Lo cierto es que, debido a que los ingenieros ponen los Huevos de Pascua en versiones concretas de software, el descubrimiento de ellos deja claro cuál es la versión que está instalada, y éste es el caso que puede utilizarse en PHP para hacer fingerprinting y conocer si un servidor web tiene desactualizado el framework.

Las imágenes del framework PHP cargadas vía parámetros

Si alguna vez has visto un fichero PHP Info, sabrás que salen unas imágenes en el mismo. Estas imágenes son de PHP y el de Zend Engine. Si miras el código fuente podrás ver que se pintan llamando a los parámetros siguientes:

Figura 2: Logo de PHP que sale en info.php
- Logo de PHP: ?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
- Logo de Zend Engine: ?=PHPE9568F35-D428-11d2-A769-00AA001ACF42
Figura 3: Logo de Zend Engine


Para sacar estas imágenes se puede utilizar ese parámetro en cualquier fichero PHP de cualquier sitio web que no los haya capado,

El fichero de créditos del framework PHP

Al igual que se obtiene un fichero PHP Info, y las imágenes de los logos, se puede obtener un fichero de respuesta con la lista de los autores de todas las versiones de ese software que vienen con ese framework

Figura 4: Fichero de créditos en una versión de PHP 5.1.3 a 5.2.13

Para ello hay que cambiar el parámetro que hay que enviar al fichero PHP.
- ?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

Figura 5: Fichero PHP Credits de una versión actualizada

Por supuesto, los créditos de PHP cambian dependiendo de la versión, así que es un buen elemento para poder hacer un fingerprinting a la versión exacta del framework que está corriendo en un determinado sitio web.

El Huevo de Pascua del framework PHP

La última de las características es la más peligrosa desde el punto de vista de seguridad, ya que dependiendo de la versión exacta se puede obtener un logo que cambia y afina bastante.

Figura 6: Logo de Elefante en un framework PHP en la web

Para ello se debe utilizar el parámetro siguiente:
- ?=PHPE9568F36-D428-11d2-A769-00AA001ACF42

Figura 7: Diferentes imágenes que se obtienen en los huevos de pascua de PHP

Y se obtendrán las siguientes imágenes dependiendo de la versión:
- PHP Versión 5.3 a actual: Logo de PHP con un elefante
- PHP Versión 5.1.3 a 5.2.13: Logo de PHP movido
- PHP Versión 5.0.4 a 5.1.2: Foto de Perro Terrier Escocés Negro.
- PHP Versión 5.0.0. a 5.0.3: Foto de un conejo.
- PHP Versión 4.3.11 a 4.4.6: Foto de Perro Terrier Escocés Negro.
- PHP Versión 4.3.0 a 4.3.10: Foto de Perro color canela sobre césped.
- PHP Versión 4.0.0 a 4.2.3: Foto de programador divertida.
Todas estas fotos son personales de los desarrolladores y el equipo que está detrás del proyecto, pero este Huevo de Pascua en concreto, que no está documentado, puede informar a un atacante - si no sale el logo del elefante, que tu sistema está sin actualizar con un buen número de bugs.

Figura 8: Sitio web con versión antigua de framework PHP

Cómo quitar estas macros

Estos parámetros funcionan porque en el fichero de cabecera "php-source/ext/standard/info.h", en las líneas 53 a 56 puede leerse la definición de estos códigos. Así que basta con que comentes estas líneas de tu instalación y desaparecerán:
#define PHP_LOGO_GUID "PHPE9568F34-D428-11d2-A769-00AA001ACF42"
#define PHP_EGG_LOGO_GUID "PHPE9568F36-D428-11d2-A769-00AA001ACF42"
#define ZEND_LOGO_GUID "PHPE9568F35-D428-11d2-A769-00AA001ACF42"
#define PHP_CREDITS_GUID "PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000"
Por supuesto, mi recomendación es que lo quites. Cuanta menos información des de tu infraestructura, mejor que mejor, así que en las recomendaciones de nuestro sistema de pentesting persistente Faast se avisa a los clientes de este hecho.

Saludos Malignos!

2 comentarios:

  1. Esto es una tonteria, porque si deshabilitas expose_php dehabilita los huevos de pascua, sino lo haces añade un header con la versión exacta por lo que no necesitas un metodo indirecto

    ResponderEliminar
  2. Buenas tardes,

    He revisado las lineas en el php-source/ext/standard/info.h y todas ellas estaban comentadas, y seguía apareciendo el logo. La única manera de quitar el logo ha sigo en el php.ini poniendo expose_php = Off y reiniciando apache.

    Un abrazo y gran .. ... ... blog!

    ResponderEliminar