Se descubrió una vulnerabilidad de denegación de servicio (DoS) simple pero grave para la popular plataforma de blogging WordPress que podría permitir que cualquiera ponga fuera de servicio la mayoría de los sitios web con WordPress incluso con una sola máquina, sin necesidad de usar un gran cantidad de ancho de banda, como usualmente se requiere en la red para ataques DDoS que producen un resultado similar.
Dado que la compañía se ha negado solucionar el problema, la vulnerabilidad (CVE-2018-6389) permanece sin parches y afecta a casi todas las versiones de WordPress publicadas en los últimos nueve años, incluida la última versión estable de WordPress (Versión 4.9.2).
Descubierta por el investigador de seguridad israelí Barak Tawily, la vulnerabilidad reside en la forma en que “load-scripts.php“, que es un script que forma parte de WordPress, procesa las solicitudes definidas por el usuario.
Para aquellos que no lo saben, el archivo load-scripts.php solo se diseñó para que los usuarios administradores ayuden a un sitio web a mejorar el rendimiento y cargar la página más rápido al combinar (en el lado del servidor) varios archivos JavaScript en una única solicitud HTTP.
Sin embargo, para hacer que “load-scripts.php” funcione en la página de inicio de sesión del administrador (wp-login.php) antes de iniciar sesión, los autores de WordPress no establecieron ninguna autenticación, lo que eventualmente hizo que la función esté accesible para cualquiera, y por lo tanto explotable remotamente.
Dependiendo de los plugins y módulos que se hayan instalado, el archivo load-scripts.php llama selectivamente a los archivos JavaScript necesarios y pasa sus nombres en los parámetros de “load“, separados por una coma, como se muestra en la siguiente URL:
https://your-wordpress-site.com/wp-admin/load-scripts.php?c=1&load=editor,common,user-profile,media-widgets,media-gallery
Al cargar el sitio web, el ‘load-scripts.php’ intenta encontrar cada uno de los nombres de los archivos JavaScript mencionados en la URL, anexar su contenido en un solo archivo y luego enviarlo al navegador del usuario, de esta forma optimiza el tiempo de carga.
Pero, ¿Cómo funciona el ataque DoS a WordPress?
Según el investigador israelí, uno puede simplemente forzar load-scripts.php para llamar todos los archivos JavaScript posibles (es decir, 181 scripts) de una sola vez pasando sus nombres a la URL anterior, haciendo que el sitio web objetivo sea levemente lento al consumir una gran cantidad de CPU y memoria del servidor.
En su blog Tawily dice:
Hay una lista bien definida de scripts ($ wp_scripts), que los usuarios pueden solicitar como parte del parámetro load[]. Si el valor solicitado existe, el servidor realizará una acción de lectura de E/S para una ruta bien definida asociada con el valor proporcionado por el usuario.
Aunque una sola solicitud no sería suficiente para crear la denegación de servicio del sitio web para sus visitantes, Tawily utilizó una secuencia de comandos python de prueba de concepto (PoC), doser.py, que hace un gran número de solicitudes concurrentes a la misma URL en un intento de utilizar la mayor cantidad de recursos posibles de CPU y memoria de los servidores que son el objetivo de este ataque.
No hay parche disponible.
Junto con la divulgación completa de la vulnerabilidad, Tawily también ha proporcionado una demostración de video para el ataque de denegación de servicio de WordPress. Puedes mirar el video para ver el ataque en acción a continuación:
Sabiendo que las vulnerabilidades de DoS están fuera del alcance del programa de recompensas de errores de WordPress, Tawily reportó responsablemente esta vulnerabilidad de DoS al equipo de WordPress a través de la plataforma HackerOne.
Sin embargo, la compañía se negó a reconocer el problema y dijo que este tipo de error “debería mitigarse realmente en el servidor o a nivel de la red en lugar de a nivel de la aplicación“, por lo que alegan que esto está fuera del control de WordPress.
La vulnerabilidad parece ser realmente grave porque WordPress es el CMS usado por casi el 29% de los websites, lo que coloca a millones de sitios web vulnerables a los piratas informáticos y los hace no disponibles para sus usuarios legítimos.
Para los sitios web que no pueden pagar los servicios que ofrecen protección DDoS contra los ataques de la capa de aplicación, el investigador ha proporcionado un fork de WordPress, que incluye la mitigación contra esta vulnerabilidad.
Sin embargo, personalmente no recomendaría a los usuarios que instalen un WordPress modificado, incluso si proviene de una fuente confiable que no sea el autor original. Ya que esto los dejaría fuera de la comunidad y no recibirían actualizaciones futuras.
Además de esto, el investigador también ha lanzado un sencillo script bash que soluciona el problema, en caso de que no se desee usar su versión modificada de WordPress.
Otra forma de mitigar el problema es limitar el acceso al directorio “/wp-admin/” sólo a IPs específicas, con lo cuál los hackers no podrían explotar esta vulnerabilidad. Esto se puede hacer editando un archivo .htaccess el directorio /wp-admin/ si nuestro hosting usa Apache de la siguiente manera:
order deny,allow
deny from all
allow from 1.2.3.4
Dónde el IP que tiene autorización para entrar al directorio “/wp-admin/” es “1.2.3.4”, replace esta IP por la que te haya asignado tu proveedor de Internet.
Espero que esta información les haya sido de ayuda si es que usan WordPress, pueden dejar cualquier duda o comentario a continuación.