WordPressのXSS脆弱性をVAddyで検出してみる

  • 9
    Like
  • 0
    Comment

VAddyは、継続的なWeb脆弱性検査が簡単に実現できるSaaSです

昨日はVAddyの基本的な使い方を説明しました。
10分でWebアプリの脆弱性検査ができた!VAddyでWordPressをスキャンしてみる

たった3ステップで脆弱性診断が手軽にでき、特別な知識が不要だと感じてもらえたら嬉しいです。
VAddyではWebAPIの提供やJenkinsプラグイン、 CLIツールなどCI連携ツールの提供もしていますので、簡単に継続的なセキュリティのチェックが行えます。

今日は昨日の記事でスキャンしたWordPressにクロスサイトスクリプティング(XSS)の脆弱性を入れて、同じようにVAddyで検査してみたいと思います。

WordPressにXSSの脆弱性をあえて入れる

VAddyに登録した検査対象のページは、WordPressの検索フォーム画面でした。この画面にXSSが発生するようにしたいと思います。
利用したのはWordPress 4.7と、デフォルトでインストールされているテーマTwentySeventeenです。

before-xss.png

この画面のテーマファイルは、wp-content/themes/twentyseventeen/search.phpです。

このファイルの</header>タグの後に、検索文字列をエスケープせずに表示するコードを入れてみます。

<?php get_header(); ?>

<div class="wrap">

        <header class="page-header">
                <?php if ( have_posts() ) : ?>
                        <h1 class="page-title"><?php printf( __( 'Search Results for: %s', 'twentyseventeen' ), '<span>' . get_search_query() . '</span>' ); ?></h1>
                <?php else : ?>
                        <h1 class="page-title"><?php _e( 'Nothing Found', 'twentyseventeen' ); ?></h1>
                <?php endif; ?>
        </header><!-- .page-header -->


                <!-- ここにXSSを追加 -->
        XSS Test: <?php echo get_search_query($escape=false); ?>  <br/><br/>

最後の行の XSS Test: から始まるコードがそれです。検索ワードをescape=falseで表示しています。

試しに検索キーワードに <font color="red">aaaa</font> を入れて検索ボタンを押すと、下の画面のように赤い字のaaaaが表示されます。fontタグがそのまま処理されていますね。

after-xss.png

VAddyで検査を実行してみる

昨日の記事で行ったスキャンをもう一度実行してみます。

VAddyの左メニューのスキャン画面に遷移して、Start Scanボタンを押して検査を実行し、20秒ほど待つと下記の画面が表示されました。

スクリーンショット 2016-12-14 23.06.15.png

同じ画面を検査しましたが、今回は1つ問題を発見したため、赤いラベルで1 Problemと表示されます。
これをクリックして詳細な問題を見てみます。

検査結果の詳細

スクリーンショット 2016-12-14 23.09.17.png

この画面では上部は検査の種類や検査リクエスト数、利用したクロール情報が表示されます。
重要なのは赤い四角で囲った箇所です。

  • 脆弱性の種類 (クロスサイトスクリプティング)
  • 該当URL (/?s=test)
  • 該当パラメータ( s )

が表示されています。この情報を元に、GETのパラメータsの値を表示しているViewファイルの箇所を探してエスケープ漏れを修正します。(今回は自分でXSSコードを入れてるので修正はしません)

一番右の、「Response」というボタンをクリックすると、検査の時の実際のレスポンスデータが表示されます。XSSの場合はhtmlの該当箇所が黄色くハイライトされているため、修正する箇所の特定も容易になります。
スクリーンショット 2016-12-14 10.48.22.png

さいごに

今回はWordPressを題材に実際にXSSの問題を検出してみました。
SQLインジェクションやコマンドインジェクションも入れてみると楽しいかと思います(非公開サーバで)。
VAddyはログイン後の画面の検査も可能ですので、あとは自分が作っているWebアプリケーションで検査してみましょう!
https://vaddy.net/ja/

ビールネタ

12月になりすっかり冬ですね。冬といえば、よなよなリアルエール!
ハンドポンプで入れるビールは、口当たりがスムーズで香りもあって非常に美味しいです。
一般的なビールよりも温度設定が少し高いので、冬に飲みたくなりますね。
都内であれば、よなよなビアキッチンに行けば飲めると思います。福岡なら、私がよく行くガストロパブエールズで飲めます!