SiteGuard Lite レビュー:ごく簡単な XSS すら防げず、Web アプリの動作を妨害する

最近使用したレンタルサーバSiteGuard Lite というウェブアプリケーションファイアウォール(WAF)が導入されていたので評価する。

SiteGuard Lite は株式会社ジェイピー・セキュア(神奈川県川崎市、代表:菅原 修)が提供する WAF で、同社が独自で定義したブラックリストによりアクセスを遮断する仕組みになっている。

SiteGuard Lite がアクセスをブロックした際は Forbidden Access と表示される

同社によれば日経SYSTEMの2009年3月号では高く評価されているというが、そこから8年の月日が経ち、数多くの機能が Web にもたらされた。今日の Web においても SiteGuard Lite は有用なのか検証する。

結論からいうと、SiteGuard Lite は簡単な XSS (Cross site scripting) すら防げない。おまけに過剰検出により正常なアプリケーションの動作を妨害してしまう根本的な問題がある

SiteGuard Lite はごく簡単な XSS を防げない

まずは簡単なフォームを作り、XSS脆弱性を突くときに送信されるであろう文字列を送信できるか試してみた。

すると次のような、セキュリティの教科書にでも載っていそうな基本的な文字列を通してしまった。

このコードは、もしアプリケーションに XSS 脆弱性があった場合に、タッチデバイスにおいて任意の JavaScript を実行できる

対して、古くからある onclick, onmouseover, onkeydown, onsubmit などはブロックされた。8年前ならこれで十分と判断されたのだろう。

最も影響の大きな過剰検出

こちらは実際にアプリケーションを作成する際に発見したもの。

最も短い例としては次の文字列でアクセスがブロックされてしまった。

いろいろなパターンを試してみると、次の値を含むデータは GET または POST メソッドで送信できないことが分かった。

  1. ダブルクォーテーション " で囲まれた文字列が 2 の条件を満たす
  2. 「and」または「or」という単語(大文字小文字問わず)を含み、かつ 3 または 4 の条件を満たす
  3. 2 の直後に英数字以外の文字があり、その後ろに「<」または「>」を含む
  4. 2 の前後両方に「<>」または「<」と「>」で囲まれた文字列を含む

たとえば非同期通信で下書き保存などを行う CMS (Contents management system) が JSON を使ってデータをやり取りしていたとすると、データ中に HTML が含まれ、かつ and や or といった単語が <p>~</p> の中に出現することがある。すると、内容に and や or が含まれる場合だけデータが保存できない問題として発現する。たとえ HTML でなくても、 and のあとに不等号を使う可能性は無視できるほど低くはない。

JSON は、現在のブラウザでは標準で扱えるため、 JavaScript のオブジェクトをシリアライズやその逆をするために非常にポピュラーな形式となっている。そのことを考えると、この過剰検出は大いに問題になると考えられる。

結論

SiteGuard Lite はごく簡単な XSS すら防げず、モダンなアプリケーションでは過剰検出の問題に悩まされる可能性がある。

「優秀」なブラックリストがあるのなら、そのリストを使って Web アプリケーションにアタックしその結果をレポートするテストツールを提供してほしい。そしてリソースはアプリケーション側の脆弱性を塞ぐことに注ぐべきだ。