2018年のDrupalの脆弱性について振り返る

どーも。[ばぁど](https://twitter.com/UltraBirdTech)です。

本記事は[Drupal アドベントカレンダーの4日目](https://qiita.com/advent-calendar/2018/drupal)の記事です。

現在私は、セキュリティエンジニアの卵をやっております。
前職までWebアプリケーション開発を仕事としておりました。
一時期Drupalの開発にも携わっていたので、
今回はセキュリティエンジニアとしての立場からDrupalを見てみようと思い、2018年度に発見されたDrupalのコアの脆弱性について振り返っていきます。

## 2018年の主なDrupalの脆弱性
2018年12月4日現在、コアに対するクリティカルな脆弱性は６個ありました。

### SA-CORE-2018-001
|項目|内容|
|:--|:--|
| 対象のバージョン | 7.x-dev, 8.4.-x-dev |
| 日時 | 2018年2月21日 |
| リスク | Critical |
|公式URL| https://www.drupal.org/sa-core-2018-001 |
|その他参考情報(日本語)|https://drupal-navi.jp/news/462|
|| http://www.webgogo.jp/news/152|

Drupalにおいて、複数の脆弱性の解決が行われました。
いくつかあったのですが興味あったものだけをピックアプしました。
以下がそれぞれの対応項目とCVEの情報。

#### [ CVE-2017-6926 ]コメント返信フォームからの制限されたコンテンツへのアクセス
|サイト |サイトURL|
|:--:|:--|
| NVD | https://nvd.nist.gov/vuln/detail/CVE-2017-6926 |
| JVN | https://jvndb.jvn.jp/ja/contents/2017/JVNDB-2017-012769.html |

Drupal に標準で備わっているコメント機能がキーのようです。
攻撃者がコンテンツにコメントを投稿できる権限を持っていると、許可されていないコンテンツとそのコンテンツのコメントを閲覧することができます。
また、許可されていないコンテンツに対してコメントもできるそうです。

これは情報セキュリティの基本設計モデルであるCIAの機密性と完全性が脅かされる脆弱性ですね。
完全性が侵されるといってもシステムファイルが上書きされるわけではないので若干優先度は下げてもいいかもしれませんが、やはり閲覧を許可されていないコンテンツにアクセスできるのは問題ありです。

またコンテンツへのコメントを許可しないといった対策もできます。
攻撃者がそもそもコメントをすることができなくさせればいいということですね。

#### [CVE-2017-6927] XSSに対する脆弱性
|サイト |サイトURL|
|:--:|:--|
| NVD | https://nvd.nist.gov/vuln/detail/CVE-2017-6927 |
| JVN | https://jvndb.jvn.jp/ja/contents/2017/JVNDB-2017-012770.html |

XSS の脆弱性があるとのこと。
XSSとはページ表示時に、JavaScriptの処理が適切ではなく、スクリプトとして実行されてしまうことです。
JavaScriptがなんでも実行されてしまうので、悪意のあるWebサイトへのリダイレクトなど簡単に仕込むことができますね。
アプリケーションレイヤーでの根本的な対策としては、スクリプトのエスケープを行なった状態でDBに保存することと、ページび描画する際もスクリプトが起動しないように処理を行うことなどが対策としてあげられます。

今回は、Drupalが持つ `Drupal.checkPlain()`という関数がキーのようです。
この`Drupal.checkPlain()`という関数がページに描画される前にJavaScriptをエスケープしてくれるようなのですが、全ての注入方法に対して適切には処理をしてくれるわけではないようです。

#### [CVE-2017-6928]プライベートファイルへアクセスできる危険性
|サイト |サイトURL|
|:--:|:--|
| NVD | https://nvd.nist.gov/vuln/detail/CVE-2017-6928 |
| JVN | https://jvndb.jvn.jp/ja/contents/2017/JVNDB-2017-012750.html |
Drupal7に対する脆弱性です。

Drupal上のファイルを不正に取得される恐れがあるとのこと。
Drupal File Systemというものがある。
これを使用している場合、ファイルをダウンロードするときにユーザーの認証が必要なのだが、特定の条件下でこの認証チェックが正常に働かないとのこと。

しかし本脆弱性は一般的なサイト構成、設定では起きないので危険性は低いとのこと。
特定の状況下でしか起こらないとのことなので、CVEのスコアも5.3と他に比べて低く設定されていますね。

#### [CVE-2017-6929]
|サイト |サイトURL|
|:--:|:--|
| NVD | https://nvd.nist.gov/vuln/detail/CVE-2017-6929 |
| JVN | https://jvndb.jvn.jp/ja/contents/2017/JVNDB-2017-012751.html |

jQuery にXSSの脆弱性があるとのこと。
これもDrupal7のみのものです。

jQueryとはJavaScriptのライブラリのことです。
生のJavaScriptで書くと大変な記述を簡略化して書けたり、DOMの操作をしやすくしてくれたりします。

信頼できないドメインへのAjaxリクエストを送ることが可能とのこと。
本脆弱性は特定のコントリビュート、カスタムモジュールが必要なので緩和はされるとのこと。

またDrupal8.4.0の場合は既に対応済みの模様。
またDrupal7の場合でもjQueryを1.4.4にすれば解消済みとのこと。

### SA-CORE-2018-002
|項目|内容|
|:--:|:--|
| 対象のバージョン | 7.x-dev, 8.x-dev |
| 日時 | 2018年3月28日 |
| リスク | Highly Critical |
|公式URL|https://www.drupal.org/sa-core-2018-002|
|NVD|https://nvd.nist.gov/vuln/detail/CVE-2018-7600|
|JVN|https://jvndb.jvn.jp/ja/contents/2018/JVNDB-2018-003541.html|

Drupalを遠隔からコードを実行される危険性があります。
非常に危険な脆弱性であり、公開前に注意喚起が行われ発表時は早急な対応が求められました。

本脆弱性には名前もつけられており「Drupalgeddon2」と呼称がつけられています。

沢山の会社、組織が本脆弱性に関するレポートをあげていますね。

|会社名|URL|
|:--|:--|
|三井物産セキュアディレクション株式会社|https://www.mbsd.jp/Whitepaper/CVE-2018-7600.pdf|
|IPA|https://www.ipa.go.jp/security/ciadr/vul/20180329-drupal.html|
|IBM|https://www.ibm.com/blogs/tokyo-soc/cve-2018-7600/|
|JPCERT|https://www.jpcert.or.jp/at/2018/at180012.html|

特に[三井物産セキュアディレクションさんのPDF](https://www.mbsd.jp/Whitepaper/CVE-2018-7600.pdf)が攻撃手法のサンプルまで掲載してくれていて、とても分かり易かったです。
足元に脆弱性のあるバージョンをインストールすれば、実際に脆弱性を確認できますね。

資料によればHTTPリクエストを受け取った時に必ず実行されるメソッド部分に脆弱性があるとのこと。

### SA-CORE-2018-003
|項目|内容|
|:--:|:--|
| 対象のバージョン | 7.x-dev, 8.x-dev |
| 日時 | 2018年4月18日 |
| リスク | Modelately Critical |
|公式URL|https://www.drupal.org/sa-core-2018-003|

XSSの脆弱性です。

CKEditorというDrupalのモジュールがあるのですが、そのモジュールに脆弱性があるとのこと。

しかし、この脆弱性は後に来るさらなる脆弱性の前兆でしかありませんでした。。。

### SA-CORE-2018-004

|項目|内容|
|:--|:--|
| 対象のバージョン | 7.x-dev, 8.x-dev |
| 日時 | 2018年4月25日 |
| リスク | Highly Critical |
|公式URL|https://www.drupal.org/sa-core-2018-004|
|その他参考情報(日本語)|http://www.jpcert.or.jp/at/2018/at180019.html|
||https://www.webgogo.jp/news/157|

外部からのコードが実行される可能性。

前回、4月18日に続き発表された脆弱性です。
SA-CORE-2018-002と同じく非常に深刻な脆弱性ということで発表されておりました。
SA-CORE-2018-002に関連するセキュリティアップデートとのこと。

前回の003の脆弱性から立て続けに発表されたので、すごい落胆したのを思い出します（また、脆弱性対応しなきゃなのか・・・という感じで）

またGWに突入する前の大きな花火でしたね。

### SA-CORE-2018-005
|項目|内容|
|:--|:--|
| 対象のバージョン | 8.5.6 以前の Drupal8 |
| 日時 | 2018年8月1日 |
| リスク | Highly Critical |
|公式URL|https://www.drupal.org/SA-CORE-2018-005|
|NVD|https://nvd.nist.gov/vuln/detail/CVE-2018-14773|
|JVN|https://jvndb.jvn.jp/ja/contents/2018/JVNDB-2018-009237.html|
|symfony公式|https://symfony.com/blog/cve-2018-14773-remove-support-for-legacy-and-risky-http-headers|

Drupal8 が載っているWebフレームワークであるsymfonyの脆弱性になります。
Drupal8から、土台の実装が大きく変わりPHPのWebフレームワークであるsymfonyの上に実装されるようになっています。
そのためDrupal8からはsymfonyの恩恵を受けることができるのと同時に、大元のsymfonyに脆弱性が発見された場合はDrupal側にもパッチが必要になっという流れになります。
symfonyの脆弱性なので、Drupal7などの8より前のバージョンは本脆弱性は存在しません。

### SA-CORE-2018-006
|項目|内容|
|:--|:--|
| 対象のバージョン | 7.x, 8.x |
| 日時 | 2018年10月17日 |
| リスク | Modelately Critical |
|公式URL|https://www.drupal.org/sa-core-2018-006|
|その他の参考情報(日本語)|https://drupal-navi.jp/news/515|
||https://annai.co.jp/article/sa-core-2018-006|

001と同様にいくつかの脆弱性を修正したようです。
コンテンツ管理機能や、外部URLインジェクションの危険性があったためそれらの修正ですね。

## まとめ
2018年のコアに対するクリティカルなDrupalの脆弱性は以上です。
脆弱性情報振り返っていると、当時の記憶と一緒に思い出します←

大事なのは、これらのクリティカルな脆弱性情報が発表された時に、いかに早く適切に対応できるかということ。
脆弱性を放置するということは、攻撃者に利用されてDDosの拠点やWebサイトの改ざんをされる可能性があります。Webページをセキュアに保つことはWebページを運用している人の責任ですね。
決して小さな脆弱性でも放置せずに、まずは影響がないか調査して、影響があれば迅速に対応できるように体制を構築して、用意しておくことが大事です。

また、脆弱性に関しては脆弱性の危険性を判断するために、多種多様な技術的な知見、セキュリティの知見が必要になります。
それらを常に蓄えておかなければ、脆弱性が発表された時に正しく脆弱性を評価できません。
やはり、IT業界は普段からの勉強が大事ですね。

それでは！よきDrupalライフを！

## [おまけ]Drupal の脆弱性情報の入手しかた
Drupal公式サイトから情報を入手することができます。
https://www.drupal.org/security

また、最新の脆弱性情報を入手するためにもメールなどで送ってもらうように設定すると気付きやすいです。
もしDrupalで運用しているサイトがある場合は設定しておくと吉です。

### 1. ユーザーログインを行う（登録していない人は[登録から](https://register.drupal.org/user/register)）
[ログイン画面](https://www.drupal.org/user/login)
![Screen Shot 2018-12-02 at 12.24.18.png](https://qiita-image-store.s3.amazonaws.com/0/99413/5232ca03-2c89-4b6e-356b-11502964cc1e.png)

### 2. My Account 画面へ遷移する
[My Account 画面](https://www.drupal.org/user)(ログイン後のみ遷移可能)
![Screen Shot 2018-12-02 at 12.25.53.png](https://qiita-image-store.s3.amazonaws.com/0/99413/994a6950-9d79-00e1-a5be-f8364a590151.png)

### 3. Editタブを選択する
![Screen Shot 2018-12-02 at 12.27.17.png](https://qiita-image-store.s3.amazonaws.com/0/99413/5b7a7f62-e397-d545-3a5d-bceb1e009d73.png)

### 4. My Newsletters タブを選択する
![Screen Shot 2018-12-02 at 12.28.40.png](https://qiita-image-store.s3.amazonaws.com/0/99413/19897c4a-9670-e483-34a1-10e02fa7940a.png)

### 5. Security announcements にチェックを入れる
![Screen Shot 2018-12-02 at 12.29.47.png](https://qiita-image-store.s3.amazonaws.com/0/99413/27ea451c-efa9-fda6-df17-f42c4bf643ac.png)

### 6. 「Save」をクリック
![Screen Shot 2018-12-02 at 12.31.22.png](https://qiita-image-store.s3.amazonaws.com/0/99413/e0439a87-6071-0e27-d366-d74e9c782b6c.png)

これで脆弱性情報をメールで受け取る準備の完了です。
次回セキュリティに関する何らかの情報があった場合、設定しているメールアドレス宛でセキュリティ情報を受け取ることができます。

以上です！！！！！！バタバタバタバタバタバタバタバタバタへ( 'e')へ