
Mitiga los ataques CVE-2018-6389 de load-scripts / load-styles de WordPress.
Mitiga los ataques CVE-2018-6389 de WordPress load-scripts / load-styles.
Denegar todas las solicitudes a wp-admin/load-scripts.php y wp-admin/load-styles.php mediante Nginx.
TL;DR
[WordPress] usará load-scripts.php (para JS) o load-styles.php (para archivos CSS) y el navegador obtendrá múltiples archivos JS/CSS a través de una sola solicitud, por lo que, en términos de rendimiento, es mejor hacerlo así y la página cargará más rápido. Esta funcionalidad fue diseñada solo para las páginas de administración, pero también se usa en la página wp-login.php, por lo que no se exige autenticación para estos archivos.
-- How to DoS 29% of the World Wide Websites - CVE-2018-6389
# por ejemplo
https://example.com/wp/wp-admin/load-scripts.php?c=1&load[]=jquery-ui-core,iris,wp-color-picker,dashboard,list-revision,media-grid,media,image-edit,set-post-thumbnail,nav-menu,custom-header,custom-background,media-gallery,svg-painter,wp-fullscreen-stu,wp-ajax-response,wp-api-request,wp-pointer,autosave,heartbeat,wp-auth-check
# lo mismo aplica para https://example.com/wp/wp-admin/load-styles.php
Una sola solicitud (sin requerir autenticación) podría hacer que el servidor realice >180 lecturas de E/S y concatene todos los archivos en una respuesta de >4MB. Para servidores pequeños sin cortafuegos adecuados ni limitación de tasa, esto es suficiente para realizar ataques DoS.
- Deberías usar HTTPS de verdad. Si no lo haces, no deberías tener un sitio web en primer lugar.
- Cuando usas HTTPS, no hay razón para no usar HTTP/2.
- Con HTTP/2, no hay necesidad de concatenar tus archivos. De hecho, es un antipatrón.
-- How to mitigate CVE-2018-6389 – the load-scripts.php DoS "attack" in WordPress
load-scripts.php y load-styles.phpAñade este rol a requirements.yml:
# requirements.yml
- src: https://github.com/ItinerisLtd/trellis-cve-2018-6389
version: 0.1.0 # Check for latest version!
Ejecuta el comando:
➜ ansible-galaxy install -r requirements.yml --force
Añade el rol en dev.yml y server.yml, inmediatamente después de role: wordpress-setup:
roles:
# some other Trellis roles ...
- { role: wordpress-setup, tags: [wordpress, wordpress-setup, letsencrypt] }
- { role: trellis-cve-2018-6389, tags: [nginx, wordpress, wordpress-setup] }
# some other Trellis roles ...
Luego, vuelve a aprovisionar como de costumbre:
# https://roots.io/trellis/docs/local-development-setup/
➜ vagrant reload --provision
# https://roots.io/trellis/docs/remote-server-setup/
➜ ansible-playbook server.yml -e env=<environment>
Desactiva la concatenación:
# config/application.php OR wp-config.php OR equivalent
# normal OR outdated Bedrock:
define('CONCATENATE_SCRIPTS', false);
# Bedrock with roots/wp-config:
Config::define('CONCATENATE_SCRIPTS', false);
Luego, despliega como de costumbre:
# https://roots.io/trellis/docs/deploys/
➜ ./bin/deploy.sh <environment> <domain>
# or alternatively
➜ ansible-playbook deploy.yml -e "site=<domain> env=<environment>"
No, no puedes usar esto en hosting gestionado como Kinsta o WP Engine.
Es trabajo de la empresa de hosting mitigar este tipo de ataques.
¡Gracias! Me alegra que te guste. Es importante que mi jefe sepa que alguien está usando este proyecto. En lugar de dejar reseñas en wp.org, considera:
➜ ansible-playbook -i 'localhost,' --syntax-check tests/test.yml
trellis-cve-2018-6389 es un proyecto de Itineris Limited creado por Tang Rufus.
Agradecimientos especiales al equipo de Roots cuyo Trellis hace posible este proyecto.
La lista completa de contribuidores se puede encontrar aquí.
¡Por favor, envía tus comentarios! Queremos que esta librería sea útil en tantos proyectos como sea posible. Por favor, envía un issue e indica qué te gusta y qué no, o haz un fork del proyecto y sugiere cambios. Ningún issue es demasiado pequeño.
Consulta CHANGELOG para obtener más información sobre lo que ha cambiado recientemente.
trellis-cve-2018-6389 se publica bajo la Licencia MIT.