CVE-2018-7584: PHP Stackoverflow en la función file_get_contents()

Se ha descubierto una vulnerabilidad del tipo Stack Overflow que afecta a diversas versiones de PHP. La vulnerabilidad ha sido confirmada por el equipo de PHP y ya existe una solución al respecto.

La vulnerabilidad afecta a la función file_get_contents() y permite que un atacante pueda desbordar el stack.

De acuerdo a la información publicada, el CVE-2018-7584 afecta a las versiones 5.6.33, 7.0.x antes de 7.0.28, de 7.1.x a 7.1.14 y de 7.2.x a 7.2.2, es decir, las versiones que no son vulnerables son las 7.2.3 y 5.6.34.

La vulnerabilidad se produce debido a un problema de validación del contenido que se obtiene mediante la función afectada. Esta función permite leer contenido desde un archivo local o bien desde una URI, dejando abierta la posibilidad de realizar un ataque remoto.

El desbordamiento se produce al momento leer el contenido al cual se hace referencia al momento de llamar a la función, específicamente el problema se encuentra en el archivo ext/standard/http_fopen_wrapper.c.

¿Cómo podría afectarnos esta vulnerabilidad?

La función file_get_contents() se utiliza generalmente para realizar llamadas a URL externas, las cuales deben ser debidamente protegidas y validadas. Para que un atacante pueda aprovecharse de esta vulnerabilidad, es necesario que pueda modificar el contenido que estamos intentando leer, por este motivo, se debe tener especial cuidado cuando se utiliza esta función utilizando argumentos que pueden ser modificados por un usuario. Por ejemplo:

En este caso, un atacante podría modificar el valor de “url” y forzar a que el sistema llame a una URL especialmente preparada y provocar del desbordamiento de la pila.

En este otro ejemplo, se está llamando a una fuente que no es de confianza, la cual podría ser modificada por un atacante para incrustar el contenido malicioso y así provocar el desbordamiento de la pila.

Los dos ejemplos descritos anteriormente, permiten a un atacante explotar la vulnerabilidad de forma remota.

¿Cómo debemos protegernos?

En un principio, siempre se recomienda actualizar y aplicar los parches de seguridad, sin embargo, los que llevamos mucho tiempo trabajando en estos temas, sabemos que existen muchos casos donde simplemente no se puede actualizar. Para esto, se recomienda lo siguiente:

  • Validar que los recursos utilizados por file_get_contents() sean de confianza.
  • En los casos en que se permita modificar los argumentos por el lado del usuario, se debe validar correctamente los parametros con el fin de evitar que un usuario mal malicioso pueda realizar llamadas a una URL especialmente preparada para explotar la vulnerabilidad.
  • Revisar todas las llamadas a file_get_contents().

 

Link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-7584

Link: https://bugs.php.net/bug.php?id=75981