Vulnerabilidad en WordPress permite la explotación de miles de webs

V

Un investigador de “Secarma: Expert Cybersecurity Company”, Sam Thomas, ha averiguado la forma de realizar una explotación de vulnerabilidades de deserialización en PHP mediante la utilización de funciones valoradas como de bajo riesgo.

¿Qué es PHP y cuál es el problema de la deserialización?

PHP (acrónimo recursivo de PHP: Hypertext Preprocessor) es un lenguaje de código abierto muy popular especialmente adecuado para el desarrollo web y que puede ser incrustado en HTML. Este lenguaje se ejecuta en servidor. La información que llega al cliente es el resultado de la codificación y no el código subyaciente. Infinidad de sitios webs hacen uso de esta tecnología. Entre ellos los CMS (en español: “Sistemas de Gestión de Contenidos”), entre los que se encuentra WordPress.

La deserialización en PHP permite llevar a cabo diferentes tipos de ataques mediante la inyección de entradas maliciosas a la función unserialize().

Sam Thomas reveló que un atacante puede usar funciones de poco riesgo contra archivos Phar. Phar es un formato de fichero en PHP que almacena los metadatos. Estos se almacenan en un formato seriado. Posteriormente se deserializa cuando una función de operación de ficheros accede a él. Por lo tanto una atacante puede cargar un archivo en miniatura creado para activar una operación de archivo a través del contenedor de flujo Phar.

¿Cómo se lleva a cabo este ataque?

El atacante solo tiene que subir al servidor objetivo un fichero que contenga una carga maliciosa. Este fichero irá en forma de objeto para su conversión a un Phar. Después la función que opera con el archivo tiene que acceder utilizando el wrapper de transmisión “phar://”. Así podrá ejecutar el código arbitrario cuando el programa deserializa los metadatos.

El investigador consiguió explotarlo con una imagen JPEG. La transformó de un fichero Phar a una imagen JPEG válida al modificar sus 100 primeros bytes. Esto lo pudo hacer a través de la funcionalidad de miniaturas de WordPress, que capacita a un atacante con privilegios para cargar y modificar elementos multimedia y obtener el control suficiente del parámetro utilizado en una llamada ‘file_exists’ para causar una deserialización.

¿Cómo puede evitarse?

Thomas recomienda que los desarrolladores eviten los patrones de diseño que puedan dar lugar a fallos relacionados a la deserialización. También recomienda que los sistemas IDS e IPS comiencen a instituir firmas que detecten archivos maliciosos de Phar.

He resaltado que la deserialización está expuesta a muchas vulnerabilidades que anteriormente se consideraban de bajo riesgo.

Los problemas que podrían haber pensado que se solucionaban con un cambio de configuración o que se habían considerado poco importantes anteriormente, podrían necesitar ser revaluados con los ataques que demostré.

La investigación continúa como una tendencia reciente, al demostrar que la serialización de objetos es una parte integral de varios lenguajes modernos.

Debemos estar constantemente al tanto del impacto de la seguridad de que dichos mecanismos estén expuestos a que los datos sean controlados por atacantes.

La vulnerabilidad se informó mediante el programa de recompensas de errores “HackerOne” de WordPress en 2017. Tras la confirmación del fallo se acreditó a Thomas por su descubrimiento. A día de hoy no existe ningún parche que solucione esta vulnerabilidad al 100%. A pesar de ello, no se han recibido informes del uso de este exploit activamente por parte de atacantes.

Sobre el autor

Luis Diago de Aguilar

Añadir comentario