WordPressのセキュリティ対策に！VAddyでAdmin管理画面のXSSを検査してみる

VAddyは、[継続的なWeb脆弱性検査が簡単に実現できるSaaSです](https://vaddy.net/ja/)。

昨日、一昨日とWordPressを例にVAddyの基本的な使い方、脆弱性の検出例を説明しました。
簡単にWordPressのセキュリティがチェックできましたし、CIやCronに組み込んで定期的に実行するのもVAddyなら簡単です。

- [10分でWebアプリの脆弱性検査ができた！VAddyでWordPressをスキャンしてみる](http://qiita.com/ichikaway/items/1ca084d86bd2f3810daa)
- [WordPressのXSS脆弱性をVAddyで検出してみる](http://qiita.com/ichikaway/items/2506e7f832a01a4fa14d)

VAddyはログインが必要なWebアプリケーションにも対応しています。
今日はログインが必要なWordPressの管理画面に"あえて"、クロスサイトスクリプティング(XSS)の脆弱性を入れて検出できるか試してみたいと思います。
もし、VAddyがログイン処理をうまく扱えていなければXSSは検出できないはずです。ではやってみましょう。

## WordPressの管理画面にあえてXSS脆弱性をいれてみる

WordPress 4.7のユーザ一覧画面 `/wp-admin/users.php` にXSSの脆弱性をいれてみたいと思います。
ユーザ一覧画面にはユーザ検索フォームがあるため、ここで検索したワードをエスケープせずに出力するようにコードを追加します。fontタグを検索ワードで入れて、赤い字で`foo`と出てますね。

<img width="782" alt="スクリーンショット 2016-12-16 10.34.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/61278/32860c32-1441-4d51-3260-499a9f5c3073.png">

`wp-admin/users.php`の505行目に`$usersearch`という変数がありますので、それをそのままechoする行を追加します。

```php
if ( strlen( $usersearch ) ) {
        /* translators: %s: search keywords */
        printf( '<span class="subtitle">' . __( 'Search results for &#8220;%s&#8221;' ) . '</span>', esc_html( $usersearch ) );

        echo 'VAddy XSS:' . $usersearch; //ここにXSSを追加
}
```

## VAddyで検査対象の画面を登録（クロール）
この記事「[10分でWebアプリの脆弱性検査ができた！VAddyでWordPressをスキャンしてみる](http://qiita.com/ichikaway/items/1ca084d86bd2f3810daa)」で、WordPressの検査対象の画面をクロールしましたが、表画面だけだったので今回はログイン画面からクロールしたいと思います。

クロールとは、検査対象の画面（URL、パラメータ）をVAddyに記録する処理です。ブラウザのプロキシを変更し、実際のWordPressの画面を操作するだけで終わります。VAddyはこれを正常ケースのシナリオファイルとして扱い、検査していきます。
今回のクロールは下記のようにしました。

- wp-login.phpからログイン
- wp-admin/users.phpにアクセス
- 検索フォームにfoobarと入れる
- ログアウト

ちゃんとログアウトまでしているので、検査の時にはログインセッションが存在しないことになります。

VAddyのクロール画面で内容を確認してみます。8行目にちゃんと`/wp-admin/users.php?s=foobar`がありますね。
<img width="918" alt="スクリーンショット 2016-12-16 10.35.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/61278/bc1f6ba2-8950-5690-cea9-10d78e203116.png">

## VAddyで検査を実行
あとはVAddyのスキャンメニューにて検査を実行します。
1分ほど待つと検査結果が出てきます。

<img width="934" alt="スクリーンショット 2016-12-16 10.36.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/61278/ad212179-0094-ebff-982a-74296b81279f.png">

検査結果画面の赤い四角で囲んだ箇所が重要な点です。
該当URI `/wp-admin/users.php`のパラメータ`s`にクロスサイトスクリプティングの脆弱性を発見したと出てきました。
一番右のResponseボタンを押すと、検査でXSSが見つかったときのhtmlが表示され、該当箇所が黄色くハイライトされます。これで該当箇所がすぐに特定でき修正できます。

<img width="941" alt="スクリーンショット 2016-12-16 10.36.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/61278/4618a1ff-f106-5f8d-7cc8-1c0414d29432.png">

## WordPressのセキュリティ対策の一つに

WordPressを自分たちでカスタマイズしている方は、ぜひVAddyを使って検査してみてください。
WordPress本体ではなく、自分たちがカスタマイズして書いたコードは、自分たちで検査してセキュリティ対策しないといけないのですから。

## さいごに

WordPressを例に3つ記事を投稿しました。VAddyではXSS以外にも下記の検査ができます。

- SQLインジェクション
- XSS(クロスサイトスクリプティング）
- リモートファイルインクルージョン
- ディレクトリートラバーサル
- コマンドインジェクション


実際に自分たちが作っているWebアプリケーションやAPIサーバに対してVAddyを実行し、まずは現状どうなっているか確認してもらえると嬉しいです。まだ一度も脆弱性診断やセキュリティ対策をしたことがない方は、まずはVAddyから気軽に始めてみるのはどうでしょうか。難しく考えず、まずはゼロをイチにするところから。
何か不明な点があればお気軽に info@vaddy.net までご連絡ください。もしくはTwitter [@vaddynet](https://twitter.com/vaddynet) でも大丈夫です！


### ビールネタ
昨日、渋谷にあるお肉とクラフトビールの店「[やまもと](https://tabelog.com/tokyo/A1303/A130301/13128600/)」に行ってきました。
ボトルビールではありますが、多くの種類のクラフトビールが飲めて最高でした。
渋谷ビールと、帝国IPA、サンクトガーレンXPAを堪能してきました。お近くのかたは是非！