Cómo corregir fácilmente la vulnerabilidad crítica de PHP 7 en servidores web; tutorial paso a paso

Hace un par de días, especialistas en análisis de vulnerabilidades reportaron la detección de CVE-2019-11043, una peligrosa vulnerabilidad de ejecución remota de código que puede afectar cualquier sitio web PHP 7 que use PHP-FPM. El uso de esta característica es muy común en los sitios web con NGINX, lo que los hace especialmente vulnerables a la explotación de esta falla.

Es importante destacar que la vulnerabilidad reside en PHP-FPM, no en NGINX, por lo que la única corrección permanente es actualizar a la versión actualizada de la implementación de PHP: PHP 7.1.33, PHP 7.2.24 o PHP 7.3.11.

De ser explotada, la vulnerabilidad CVE-2019-11043 podría dejar que los hackers fuercen la ejecución de su propio código arbitrario en un servidor remoto, usando sólo una URL especialmente diseñada y añadiendo algunos caracteres, además de la carga útil de los atacantes.

Por otra parte, reportes de expertos en análisis de vulnerabilidades menciona que esta falla es demasiado fácil de explotar, pues incluso los usuarios con limitados conceptos y sin conocimientos de hacking podrían tomar control de un sistema expuesto, pues sólo se requiere una configuración común de NGINX, mediante la cual NGINX usa una expresión regular en fastcgi_split_path_info para dividir una solicitud en dos partes.

Aunque lo más recomendable es actualizar su versión de PHP de inmediato, en caso de que esto no sea posible, a contiuación se muestra una forma de mitigar el riesgo de explotación de esta vulnerabilidad:

  • Puede agregar una directiva try_files a la configuración de NGINX para verificar que la variable $uri se resuelva en un archivo (el script PHP) y rechace la solicitud con el código 404 (Not Found), de lo contrario:
location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    fastcgi_param           PATH_INFO $fastcgi_path_info;
    try_files               $uri =404;
    #...
}

Es importante resaltar que esta mitigación sólo funciona si NGINX y PHP-FPM comparten el mismo docroot en el mismo host.

  • Utilice F5 BIG-IP ASM (Application Security Manager) para proteger su aplicación. Los conjuntos de firmas existentes “Ejecución de comandos” e “Inyección de código del lado del servidor” incluyen firmas de ataque que bloquearán la mayoría de los intentos de explotación.
  • Agregue una regla ModSecurity para bloquear las solicitudes que contienen el carácter sospechoso %0a o %0d:
SecRule REQUEST_URI "@rx %0(a|A|d|D)" "id:1,phase:1,t:lowercase,deny"

Este método de mitigación podría causar falsos positivos, por lo que un actor de amenazas aún podría encontrar una forma de explotar la vulnerabilidad, mencionan expertos en análisis de vulnerabilidades del Instituto Internacional de Seguridad Cibernética.