
Mitigar ataques do WordPress relacionados ao CVE-2018-6389 em load-scripts / load-styles
Mitiga ataques WordPress load-scripts / load-styles da CVE-2018-6389.
Negar todas as requisições a wp-admin/load-scripts.php e wp-admin/load-styles.php pelo Nginx.
TL;DR
ele [WordPress] usará load-scripts.php (para JS) ou load-styles.php (para arquivos CSS) e o navegador obterá vários arquivos JS/CSS por meio de uma única requisição — portanto, em termos de desempenho, é melhor fazer isso e a página carregará mais rápido. Esse recurso foi projetado apenas para as páginas administrativas, mas também é usado na página wp-login.php, portanto nenhuma autenticação é aplicada a esses arquivos.
# for example
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
# same goes to https://example.com/wp/wp-admin/load-styles.php
Uma única requisição (sem exigir autenticação) pode fazer o servidor executar >180 leituras de E/S e concatenar todos os arquivos em uma resposta de >4MB. Para servidores pequenos sem firewalls adequados e limitação de taxa, isso é suficiente para realizar ataques de DoS.
- Você realmente deveria usar HTTPS. Se não usa, não deveria ter um site em primeiro lugar.
- Quando você usa HTTPS, não há razão para não usar HTTP/2.
- Com HTTP/2, não há necessidade de concatenar seus arquivos. Na verdade, é um anti-padrão.
-- Como mitigar a CVE-2018-6389 – o "ataque" DoS load-scripts.php no WordPress
load-scripts.php e load-styles.phpAdicione esta role ao requirements.yml:
# requirements.yml
- src: https://github.com/ItinerisLtd/trellis-cve-2018-6389
version: 0.1.0 # Check for latest version!
Execute o comando:
➜ ansible-galaxy install -r requirements.yml --force
Adicione a role em dev.yml e server.yml, imediatamente após 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 ...
Em seguida, faça o re-provisionamento como de costume:
# 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>
Desative a concatenação:
# 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);
Em seguida, faça o deploy como de costume:
# https://roots.io/trellis/docs/deploys/
➜ ./bin/deploy.sh <environment> <domain>
# or alternatively
➜ ansible-playbook deploy.yml -e "site=<domain> env=<environment>"
Não, você não pode usar isto em hospedagem gerenciada, como Kinsta ou WP Engine.
É função da empresa de hospedagem mitigar esse tipo de ataque.
Obrigado! Que bom que você gostou. É importante fazer meu chefe saber que alguém está usando este projeto. Em vez de dar avaliações no wp.org, considere:
➜ ansible-playbook -i 'localhost,' --syntax-check tests/test.yml
trellis-cve-2018-6389 é um projeto da Itineris Limited criado por Tang Rufus.
Agradecimentos especiais à equipe Roots, cujo Trellis torna este projeto possível.
A lista completa de contribuidores pode ser encontrada aqui.
Por favor, envie seu feedback! Queremos tornar esta biblioteca útil em tantos projetos quanto possível.
Envie uma issue e aponte o que você gosta e o que não gosta, ou faça um fork do projeto e dê sugestões. Nenhuma issue é pequena demais.
Consulte o CHANGELOG para obter mais informações sobre o que mudou recentemente.
trellis-cve-2018-6389 é distribuído sob a Licença MIT.