
CVE-2018-6389 WordPress load-scripts / load-styles Angriffe abschwächen
Entschärfen Sie CVE-2018-6389 WordPress load-scripts / load-styles Angriffe.
Alle Anfragen an wp-admin/load-scripts.php und wp-admin/load-styles.php durch Nginx verweigern.
TL;DR
WordPress wird load-scripts.php (für JS) oder load-styles.php (für CSS-Dateien) verwenden und der Browser erhält mehrere JS/CSS-Dateien über eine einzelne Anfrage – aus Performance-Gründen ist dies besser und die Seite lädt schneller. Diese Funktion wurde nur für die Admin-Seiten entwickelt, wird aber auch auf der wp-login.php-Seite verwendet, sodass für diese Dateien keine Authentifizierung erforderlich ist.
-- How to DoS 29% of the World Wide Websites - CVE-2018-6389
# zum Beispiel
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
# gleiches gilt für https://example.com/wp/wp-admin/load-styles.php
Eine einzelne Anfrage (ohne erforderliche Authentifizierung) könnte den Server dazu veranlassen, >180 IO-Lesevorgänge durchzuführen und alle Dateien zu einer >4MB-Antwort zu concatenieren. Für kleine Server ohne ordnungsgemäße Firewalls und Ratenbegrenzung reicht dies aus, um DoS-Angriffe durchzuführen.
- Sie sollten wirklich HTTPS verwenden. Wenn Sie es nicht tun, sollten Sie überhaupt keine Website haben.
- Wenn Sie HTTPS verwenden, gibt es keinen Grund, HTTP/2 nicht zu verwenden.
- Mit HTTP/2 besteht keine Notwendigkeit, Ihre Dateien zu concatenieren. Es ist eigentlich ein Anti-Pattern.
-- How to mitigate CVE-2018-6389 – the load-scripts.php DoS "attack" in WordPress
load-scripts.php und load-styles.php verweigern.Fügen Sie diese Rolle zu requirements.yml hinzu:
# requirements.yml
- src: https://github.com/ItinerisLtd/trellis-cve-2018-6389
version: 0.1.0 # Check for latest version!
Führen Sie den Befehl aus:
➜ ansible-galaxy install -r requirements.yml --force
Fügen Sie die Rolle in dev.yml und server.yml ein, direkt nach 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 ...
Dann wie gewohnt neu provisionieren:
# 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>
Konkatenierung deaktivieren:
# config/application.php ODER wp-config.php ODER entsprechend
# normal ODER veraltetes Bedrock:
define('CONCATENATE_SCRIPTS', false);
# Bedrock mit roots/wp-config:
Config::define('CONCATENATE_SCRIPTS', false);
Dann wie gewohnt deployen:
# https://roots.io/trellis/docs/deploys/
➜ ./bin/deploy.sh <environment> <domain>
# oder alternativ
➜ ansible-playbook deploy.yml -e "site=<domain> env=<environment>"
Nein, Sie können dies nicht auf managed Hosting wie Kinsta oder WP Engine verwenden. Es ist die Aufgabe des Hosting-Unternehmens, diese Art von Angriffen zu entschärfen.
Danke! Freut mich, dass es Ihnen gefällt. Es ist wichtig, dass mein Chef weiß, dass jemand dieses Projekt verwendet. Anstatt Bewertungen auf wp.org abzugeben, erwägen Sie:
➜ ansible-playbook -i 'localhost,' --syntax-check tests/test.yml
trellis-cve-2018-6389 ist ein Projekt von Itineris Limited, erstellt von Tang Rufus.
Besonderer Dank gilt dem Roots-Team, dessen Trellis dieses Projekt ermöglicht.
Die vollständige Liste der Mitwirkenden finden Sie hier.