Drupal RCE CVE-2018-7600 수정
- 악의적인 사용을 금합니다. 법적 책임은 본인에게 있습니다.
- 무단 도용/복제를 급합니다. 본 글의 저작권은 huti에게 있습니다.
CVE-2018-7600은 원격에서 명령어 실행이 가능한 취약점으로 심각도가 높다. CVE-2018-7600에 취약한 Drupal 버전은 아래와 같다.
l 7.58 이전 버전
l 8.3점대 버전 중 8.3.9 이전 버전
l 8.4점대 버전 중 8.4.6 이전 버전
l 8.5점대 버전 중 8.5.1 이전 버전
8.X대 공격 경로 :
/user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax
8.X대 Payload :
form_id=user_register_form&_drupal_ajax=1&mail[#post_render][]= 시스템 명령 함수&mail[#type]=markup&mail[#markup]=시스템 명령어
-POC TEST
위 그림은 #post_render를 이용해서 PHP의 exec 함수로 id라는 명령어를 실행한 화면이다.
Response로 ip 명령어 실행 데이터가 노출된 것을 확인할 수 있다.
왜 이런 취약점이 발생하는 것일까?
/user/register는 가입하기 경로이다.
가입하기 화면에서 이메일 주소와 아이디를 입력해서 가입 요청을 하면, 그림 4-9와 같은 데이터가 BODY에 실려 웹서버로 전달된다.
이렇듯 mail 계정과 name 데이터가 있어야 요청 패킷이 전송되며, 요청 패킷이 전달될 때 여러 폼 데이터가 한 번에 전달된다. 페이지의 특성상 굳이 ajax forms로 mail 데이터만 업데이트할 필요가 없어 보인다. 그런데 ajax forms를 사용하게 허용하여 취약점이 발생하는 것이다.
취약 경로와 공격 데이터를 나눠서 이해해 보자.
취약성이 있는 경로,
http://10.0.2.15:3333/user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax는 $form[acount][mail][#value] 하위 폼에 ajax 요청을 보낸다는 뜻이다.
POC를 보면, HTTP Request Method는 POST이며, Http Request Packet Body 값으로 아래와 같은 데이터가 온다.
form_id=user_register_form&_drupal_ajax=1&mail[#post_render][]=exec&mail[#type]=markup&mail[#markup]=id
form_id는 user_register_form인데, user_register_form은 가입하기 양식 전체의 form_id이다.
_drupal_ajax 값을 1로 설정한 것은 ajax를 사용하겠다는 의미(TRUE)이다.
공격은 #post_render 배열에서부터 시작된다. 브라우저에 어떤 페이지를 load하는 것을 render라고 하는데, #post_render 배열은 브라우저에 특정 부분(wrapper)을 render하는 역할을 한다.
#post_render 배열은 #markup을 인자로 사용하는데, #post_render 배열에 시스템 명령 함수가 오고, #post_render 배열의 인자인 #markup에 시스템 명령어가 오면, 시스템 명령어가 실행되는 것이다.
다음은 시간대를 설정하는 timezone이라는 폼을 대상으로 공격을 시도해 봤다.
이번에는 #lazy_builder를 이용했다.
이 공격은 에러 메시지를 유발하기 때문에 Response에 명령어 결과값이 노출되지 않는다.
그렇기 때문에 touch 명령어를 이용해서 파일을 만드는 테스트를 진행했다.
위 그림에서 touch 명령어가 실행되어 /tmp/2 파일이 생성된 것을 확인할 수 있다.
아래와 같이 7.X 버전 취약점도 확인해 봤다.
이 원격 명령 취약점들은 모두 패치되었다.
하지만, 취약 버전에서는 여전히 RCE가 가능하므로
반드시 취약하지 않은 버전으로 업데이트를 해야 한다.
참고
https://research.checkpoint.com/uncovering-drupalgeddon-2/
https://gist.github.com/g0tmi1k/7476eec3f32278adc07039c3e5473708
Leave Drupal RCE CVE-2018-7600 수정 to:
Read more #kr posts
Best Posts From huti
We have not curated any of huti's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From huti
- [웹프로그래밍과 PHP] 4. 반복문(while,for)
- [웹프로그래밍과 PHP] 3. 조건문(if,if~elseif~else, ~?~:축약형)
- [웹프로그래밍과 PHP]2. PHP시작과 끝, 변수, 연결자, 주석
- [웹프로그래밍과 PHP] 1. PHP 동작 방식
- 악성코드 분석할 때 도움이 되는 Windows 레지스트리
- WebLogic이란?
- Oracle WebLogic RCE 취약점(CVE-2019-2725)
- 이태리 여행, 피렌체, 로마
- RPC Error? Broadcast Error?
- Spring Messaging RCE 취약점(CVE-2018-1270)