
CVE-2019-6340을 대상으로 하는 Python 익스플로잇으로, Drupal 8 RESTful API를 통해 조작된 HTTP 요청으로 원격 코드 실행을 달성합니다. Docker 설정 및 명령어 삽입 페이로드를 포함합니다.
CVE 2019-6340
사이트에서 Drupal 8 코어 RESTful API Services 모듈이 활성화되어 사용자가 GET, PATCH 또는 POST 요청을 서버로 보낼 수 있습니다.
(PATCH 메서드가 비활성화되어 있어도 GET 요청만으로 코드 실행 취약점을 트리거할 수 있습니다.)
사이트에는 Drupal 8의 JSON-API 또는 Drupal 7의 REST 서비스와 같은 다른 웹 서비스 모듈이 활성화되어 있습니다.
POC 요구사항
DOCKER.IO
DRUPAL 8.6.9
SQL 5.7
docker run -d --name mysqldb -e MYSQL_ROOT_PASSWORD=password mysql:5.7
docker run -d --name drupal --link mysqldb -p 8090:80 -e MY_SQL_USER:root -e MY_SQL_PASSWORD:password drupal:8.6.9
exp 실행 명령
python3 exp.py http://Ip_of_drupal_container:port_assigned(if)// "command_to_execuite"
예:- python3 exp.py http://127.0.0.1:8090/ "hostname -I"
EXP 분석
Guzzle은 HTTP 요청을 쉽게 보내고 웹 서비스와 간편하게 통합할 수 있는 PHP HTTP 클라이언트이며, Drupal 기반 웹사이트에 악의적인 요청을 보내는 익스플로잇으로 사용됩니다. 익스플로잇 코드(exp.py) 내의 Guzzle 스크립트를 분석하면 "command" 문자열이 런타임에 전달한 명령(예: hostname -I)으로 대체되는 것을 확인할 수 있습니다.

exp 명령을 실행하면 먼저 기존 노드를 찾으므로 웹사이트에 몇 개의 노드를 만들어야 합니다. 기본적으로 웹사이트에 콘텐츠를 추가해야 합니다.

같은 노드에 두 번 접근하지 않습니다. 예를 들어 노드를 5개 추가했다면 익스플로잇을 5번 실행한 후 노드를 업데이트해야 합니다. 콘텐츠로 이동하여 노드에 아무 작업이나 적용하면 됩니다.
요청 및 응답

