
CVE-2019-6340を悪用するPythonエクスプロイト。Drupal 8 RESTful APIを標的とし、細工されたHTTPリクエスト経由でリモートコード実行を達成します。Docker環境のセットアップとコマンドインジェクションペイロードを含みます。
CVE 2019-6340
Drupal 8 のコア RESTful API サービスモジュールが有効になっており、ユーザーがサーバーに対して GET、PATCH、または POST リクエストを送信できるようになります。
(GET リクエストだけでもコード実行の脆弱性を引き起こすのに十分であり、PATCH メソッドが無効になっていても同様です)
サイトには、Drupal 8 の JSON-API や Drupal 7 の REST サービスなど、他の Web サービスモジュールが有効になっている。
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://DrupalコンテナのIP:割り当てられたポート(あれば)// "実行したいコマンド"
例: python3 exp.py http://127.0.0.1:8090/ "hostname -I"
EXP 分析
Guzzle は、HTTP リクエストの送信を容易にし、Web サービスとの統合を簡単にする PHP の HTTP クライアントです。これは、Drupal ベースの Web サイトに悪意のあるリクエストを送信するためのエクスプロイトとして使用されます。エクスプロイトコード(exp.py)内の Guzzle スクリプトを分析すると、実行時に渡されるコマンド(例:hostname -I)で "command" 文字列が置き換えられていることがわかります。

exp コマンドを実行すると、最初に既存のノードを探します。そのため、Web サイト上にいくつかのノードを作成する必要があります。基本的には、Web サイトにコンテンツを追加します。

同じノードに二度アクセスすることはありません。例えば 5 つのノードを追加した場合、エクスプロイトを 5 回実行した後はノードを更新する必要があります。 単にコンテンツに移動し、ノードに対して任意の操作を適用してください。
リクエストとレスポンス

