
CVE-2018-6389 WordPress load-scripts / load-styles 공격 완화
CVE-2018-6389 WordPress load-scripts / load-styles 공격 완화
Nginx로 wp-admin/load-scripts.php 및 wp-admin/load-styles.php에 대한 모든 요청을 차단합니다.
TL;DR
WordPress는 load-scripts.php(JS용) 또는 load-styles.php(CSS 파일용)를 사용하며, 브라우저는 단일 요청을 통해 여러 JS/CSS 파일을 받게 됩니다. 따라서 성능 측면에서 이렇게 하는 것이 더 좋고 페이지 로딩 속도가 빨라집니다. 이 기능은 관리자 페이지용으로만 설계되었지만 wp-login.php 페이지에서도 사용되므로, 이 파일들에는 인증이 적용되지 않습니다.
# 예시
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회 이상의 IO 읽기를 수행하고 모든 파일을 연결하여 4MB가 넘는 응답을 보낼 수 있습니다. 적절한 방화벽과 속도 제한이 없는 소규모 서버에서는 DoS 공격을 수행하기에 충분합니다.
- HTTPS를 반드시 사용해야 합니다. 그렇지 않다면 애초에 웹사이트를 운영해서는 안 됩니다.
- HTTPS를 사용한다면 HTTP/2를 사용하지 않을 이유가 없습니다.
- HTTP/2에서는 파일을 연결할 필요가 없습니다. 오히려 안티 패턴입니다.
-- CVE-2018-6389 완화 방법 – WordPress에서 load-scripts.php DoS "공격"
load-scripts.php 및 load-styles.php에 대한 모든 요청 차단이 역할을 requirements.yml에 추가하세요:
# requirements.yml
- src: https://github.com/ItinerisLtd/trellis-cve-2018-6389
version: 0.1.0 # 최신 버전 확인!
명령어 실행:
➜ ansible-galaxy install -r requirements.yml --force
dev.yml 및 server.yml의 role: wordpress-setup 바로 뒤에 역할을 추가하세요:
roles:
# 기타 Trellis 역할들 ...
- { role: wordpress-setup, tags: [wordpress, wordpress-setup, letsencrypt] }
- { role: trellis-cve-2018-6389, tags: [nginx, wordpress, wordpress-setup] }
# 기타 Trellis 역할들 ...
그런 다음 평소처럼 다시 프로비저닝하세요:
# 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>
연결(concatenation) 비활성화:
# config/application.php 또는 wp-config.php 또는 동등한 파일
# 일반 또는 오래된 Bedrock:
define('CONCATENATE_SCRIPTS', false);
# roots/wp-config를 사용하는 Bedrock:
Config::define('CONCATENATE_SCRIPTS', false);
그런 다음 평소처럼 배포하세요:
# https://roots.io/trellis/docs/deploys/
➜ ./bin/deploy.sh <environment> <domain>
# 또는
➜ 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가 만들었습니다.
이 프로젝트를 가능하게 해준 Trellis의 Roots 팀에게 특별히 감사드립니다.
전체 기여자 목록은 여기에서 확인할 수 있습니다.
피드백을 보내주세요! 이 라이브러리를 최대한 많은 프로젝트에서 유용하게 사용할 수 있도록 만들고 싶습니다. 이슈를 제출하여 마음에 드는 점과 그렇지 않은 점을 알려주시거나, 프로젝트를 포크하여 제안해 주세요. 작은 이슈라도 괜찮습니다.
최근 변경 사항에 대한 자세한 내용은 CHANGELOG를 참조하세요.
trellis-cve-2018-6389는 MIT 라이선스 하에 배포됩니다.