
이것은 Wordpress에서 cve-2019-9787의 재발과 해시 기반 방어에 대한 것입니다.
이 프로젝트는 Sijia Zhang(https://github.com/sijiahi)과 Bowen Zhou(https://github.com/KonjakZhou)이 개발했습니다.
- http://localhost/wp-admin/ 아래에 Wordpress5.0을 구성하고 설치합니다.
- Wordpress에 관리자로 로그인하고, 최소한 하나의 글을 게시합니다.
- mal.html을 엽니다(다른 도메인 이름으로 구성하거나 브라우저에서 직접 파일로 열 수 있음). 요청 제출(submit request)을 클릭합니다.
- 이것이 작동하면 "cilick me" 댓글이 있는 글 페이지로 리디렉션됩니다. 마우스를 그 위로 옮기면 성공적인 공격을 나타내는 프롬프트 창이 나타납니다.
- /wp-includes의 파일을 교체하고, /wp-includes/js에 JS 스크립트를 추가합니다.
- 모의 게시물 파일을 WP 영역(region)으로 이동하고, 모의 게시물 페이지를 열어 PINGBACK/TRACEBACK 기능을 테스트합니다.
- 이것이 작동하면 "legal anchor" 댓글이 있는 글 페이지로 리디렉션됩니다.
- 다른 도메인 이름에서 mal.com을 열어 CSRF 공격을 테스트합니다.
Wordpress를 CVE-2019-9787로부터 방어하기 위해 doggyNonce라는 새 필드가 도입되었습니다. 관리자가 PINGBACK 기능을 사용하려고 하고 _wp_unfiltered_html을 제공할 수 없는 경우, 관리자에게 업로드된 태그 속성(attributes)에 대해 쿠키(cookie)로 서명(signature)하도록 요청합니다. 이를 통해 CSRF 공격을 방어하고 업로드된 태그 속성의 무결성을 보장할 수 있습니다.
Wordpress는 올바른 CSRF 토큰이 없는 댓글을 PINFBACK 및 TRACEBACK 요청으로 자동 수락하고, 해당 댓글을 화이트리스트 필터로 필터링한 후 href 필드를 추출하여 "a 태그"를 재구성합니다. 이 취약점을 방어하기 위해 두 가지 핵심 사항을 고려했습니다: 1. 서버는 불법적인 CSRF 요청과 합법적인 PINGBACK/TRACEBACK 요청을 구별할 수 없습니다. 2. CSRF 공격자는 "a 태그"의 href 필드에 코드를 주입하며, 필터링 후 태그 속성이 변경됩니다. doggyNonce는 *cookie(wp-setting-time-$uid)와 *uploaded href attribute에 의존하는 해시 값입니다: doggyNonce=Hash(*uploaded href attribute,*cookie) doggyNonce가 업로드된 href 속성에 대한 관리자의 서명 역할을 한다는 점에 유의해야 합니다.
1. 'mal.html'은 CSRF 공격을 모의(mock)하기 위한 것입니다. 따라서 Wordpress가 아닌 다른 도메인에 배치해야 합니다.
2. 'post.html'은 PINGBACK/TRACEBACK 기능을 모의하기 위한 것입니다. 따라서 WP와 동일한 도메인에 배치해야 합니다.