
Смягчение атак CVE-2018-6389 на WordPress load-scripts / load-styles
Смягчение атак на WordPress load-scripts / load-styles (CVE-2018-6389).
Запретить все запросы к wp-admin/load-scripts.php и wp-admin/load-styles.php через Nginx.
Кратко
он [WordPress] использует load-scripts.php (для JS) или load-styles.php (для CSS-файлов), и браузер получает несколько JS/CSS-файлов через один запрос — с точки зрения производительности это лучше, и страница загружается быстрее. Эта функция была разработана только для страниц администратора, но также используется на странице wp-login.php, поэтому для этих файлов не требуется аутентификация.
-- How to DoS 29% of the World Wide Websites - CVE-2018-6389
# например
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
# то же самое для https://example.com/wp/wp-admin/load-styles.php
Один запрос (без аутентификации) может заставить сервер выполнить >180 операций чтения и объединить все файлы в ответ размером >4 МБ. Для небольших серверов без надлежащих брандмауэров и ограничения скорости этого достаточно для проведения DoS-атак.
- Вам обязательно нужно использовать HTTPS. Если нет, вам вообще не следует иметь веб-сайт.
- Если вы используете HTTPS, нет причин не использовать HTTP/2.
- С HTTP/2 нет необходимости объединять файлы. Это антипаттерн.
-- How to mitigate CVE-2018-6389 – the load-scripts.php DoS "attack" in WordPress
load-scripts.php и load-styles.php.Добавьте эту роль в requirements.yml:
# requirements.yml
- src: https://github.com/ItinerisLtd/trellis-cve-2018-6389
version: 0.1.0 # Check for latest version!
Выполните команду:
➜ ansible-galaxy install -r requirements.yml --force
Добавьте роль в dev.yml и server.yml, сразу после 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 ...
Затем выполните повторное развертывание как обычно:
# 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>
Отключите конкатенацию:
# 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);
Затем выполните развертывание как обычно:
# https://roots.io/trellis/docs/deploys/
➜ ./bin/deploy.sh <environment> <domain>
# or alternatively
➜ ansible-playbook deploy.yml -e "site=<domain> env=<environment>"
Нет, вы не можете использовать это на управляемом хостинге, таком как Kinsta или WP Engine.
Это работа хостинговой компании — смягчать подобные атаки.
Спасибо! Рады, что вам нравится. Для нас важно, чтобы мой начальник знал, что кто-то использует этот проект. Вместо отзывов на wp.org рассмотрите:
➜ ansible-playbook -i 'localhost,' --syntax-check tests/test.yml
trellis-cve-2018-6389 — проект компании Itineris Limited, созданный Tang Rufus.
Особая благодарность команде Roots, чей Trellis делает этот проект возможным.
Полный список участников можно найти здесь.
Пожалуйста, оставляйте отзывы! Мы хотим сделать эту библиотеку полезной как можно для большего числа проектов. Пожалуйста, отправьте issue и укажите, что вам нравится, а что нет, или сделайте форк проекта и предложите изменения. Не бывает слишком мелких вопросов.
Подробнее об изменениях см. в CHANGELOG.
trellis-cve-2018-6389 выпущен под лицензией MIT.