SiteGuard Lite レビュー:ごく簡単な XSS すら防げず、Web アプリの動作を妨害する
最近使用したレンタルサーバに SiteGuard Lite というウェブアプリケーションファイアウォール(WAF)が導入されていたので評価する。
SiteGuard Lite は株式会社ジェイピー・セキュア(神奈川県川崎市、代表:菅原 修)が提供する WAF で、同社が独自で定義したブラックリストによりアクセスを遮断する仕組みになっている。
同社によれば日経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 メソッドで送信できないことが分かった。
- ダブルクォーテーション " で囲まれた文字列が 2 の条件を満たす
- 「and」または「or」という単語(大文字小文字問わず)を含み、かつ 3 または 4 の条件を満たす
- 2 の直後に英数字以外の文字があり、その後ろに「<」または「>」を含む
- 2 の前後両方に「<>」または「<」と「>」で囲まれた文字列を含む
たとえば非同期通信で下書き保存などを行う CMS (Contents management system) が JSON を使ってデータをやり取りしていたとすると、データ中に HTML が含まれ、かつ and や or といった単語が <p>~</p> の中に出現することがある。すると、内容に and や or が含まれる場合だけデータが保存できない問題として発現する。たとえ HTML でなくても、 and のあとに不等号を使う可能性は無視できるほど低くはない。
JSON は、現在のブラウザでは標準で扱えるため、 JavaScript のオブジェクトをシリアライズやその逆をするために非常にポピュラーな形式となっている。そのことを考えると、この過剰検出は大いに問題になると考えられる。