CVE-2018-7602の検証
Web系の脆弱性について勉強していきたいと思い、いくつか検証してみた。この記事はそのうちの3つ目。
CVE-2018-7602について
Drupal 7.x系、8.x系にRCEの脆弱性が存在する。
今回検証するのはこのコード。
尚、こちらのPoCも参考にしている。
検証コードとDrupal7.57のソースをまとめたリポジトリを作成した。以降の検証はこのリポジトリ内にあるスクリプト等でインストール作業を自動化している。
検証環境は、Virtualbox上で動作するVM(Ubuntu 16.04 64bit)。予めgitがインストールされているものとする。
インストール
$ git clone https://github.com/happynote3966/CVE-2018-7602.git $ cd CVE-2018-7602 $ sudo ./install.sh # (途中でMySQLのrootパスワードの設定を求められる) $ sudo ./install.2sh # (ここでも途中でMySQLのrootパスワードの入力が2回求められる。)
ここまで実行したら、次はInstallation Script(Webコンソール)でDrupalをインストールする。 以降のインストール作業はこちらの手順と同様のため省略する。詳しくはこの記事を参照のこと。
検証
この脆弱性は、ログインしているユーザが管理者によって認証され、記事の削除権限を持っていることが必要となる。 そのため、一般ユーザを作成し、そのユーザに対し記事の作成権限と削除権限を追加する。その後に、ログインを行ってからPoCを実行する。
まずは管理者権限でテスト用のユーザを作成する。画面上のPeople
のタブをクリックし、以下のような画面を出す。
次に、現れた画面の上部にあるAdd user
をクリックし、一般ユーザを作成する。
ユーザ名はhappynote3966
、パスワードはpassword
としておく。下にあるCreate new account
をクリックして作成は完了。
次に、一般ユーザの権限を追加する。まずは画面上のPeople
のタブをクリックし、更にその中のPERMISSIONS
のタブをクリックする。
この中のNode
の項目内にあるArticle: Create new content
とArticle: Delete own content
のAUTHENTICATED USER
の列にチェックを入れ、Save Permissionをクリックして、権限を反映する。
最後に、記事を追加する。 まずはログアウトし、先ほど作成した一般ユーザ名とパスワードでログインする。
ログインできると、以下のような画面になる。
ここから、Add new content
をクリックし、記事の作成を行う。
記事の内容は適当にした。
一番下にあるSaveをクリックすると、作成した記事が反映される。
このときのURLを確認し、?q=node/1
の最後の数字の部分を見てみると、1
となっていることが分かる。これがノードIDとなる。
準備が完了したので、これからPoCを実行してみる。まずはブラウザ内でCookieをチェックする。 このサイトのCookie(今回はlocalhost)を閲覧する。今回は以下のようになっていた。
Name:SESS29af1facda0a866a687d5055f2fade2c Content:bBJ40SrtSVWc7Y9-By57oyIqSElDNO1nPEghwMTMb9s
この情報と、ノードIDを用いてPoCを実行する。今回の場合は、以下のよう実行する。CookieのNameとContentは=
で連結させる。
$ python drupalgeddon3_update.py http://localhost/drupal/ "SESS29af1facda0a866a687d5055f2fade2c=bBJ40SrtSVWc7Y9-By57oyIqSElDNO1nPEghwMTMb9s" 1 "ls -al"
すると、以下のような実行結果が表示された。
ls -al
を実行することができている。
感想
ログインした状態で、且つ記事を削除できる権限を持ち合わせていること、などがRCEの条件になるというのを知った。特定の条件下でのみ攻撃が通ってしまうような脆弱性は見つけるのが難しいのかもしれないが、いずれそのような脆弱性も発見してみたい。