先日AWS WAF配下にある、WordPressの作業をしていたら、WAFに引っかかった。CSSとPNGファイルのアップロードがXSSルールに引っかかったとのことなので、記録代わりにメモ。

1.事象の詳細
作業としては、PNGファイルのアップロードと各ページでカスタムCSSを適用する作業。
しかし、どちらもサーバーからの応答が返ってこないと作業者からの報告があり、コンソールを確認すると、設定していたコアルールセット (CRS) マネージドルールグループのCrossSiteScripting_BODYがブロックしていた。
2.コアルールセット (CRS) マネージドルールグループとCrossSiteScripting_BODYについて
コアルールセット (CRS) ルールグループ
コアルールセット (CRS) ルールグループは、Webアプリケーションの一般的な攻撃を防ぐためのルールをまとめたもの。HTTPリクエストのヘッダー、ボディの中身を内容を見て、攻撃性のあるリクエストかどうかを検査する。。
リクエストサイズが大きすぎるリクエスト、Botによるアクセス、XSSが疑われるものなどの攻撃をブロックする。
CRSルールグルーブの内容をより詳しく知りたい方は下記サイトをご参照。
CrossSiteScripting_BODY
CrossSiteScripting_BODYは、CRSルールグループに含まれているルールの一つでリクエストボディにXSSが疑われる要素がないかを検査するルール。
下記は公式サイトからの抜粋。
ビルトインを使用してリクエスト本文を検査し、一般的なクロスサイトスクリプティング (XSS) パターンがないか調べます。 AWS WAF クロスサイトスクリプティング攻撃ルールステートメントパターンの例には、
<script>alert("hello")</script>
などのスクリプトあります。
3.CSSとPNGのXSSについて
CSSの場合
JavaScript同様、<style>タグを表示させることができれば、画面の表示を変えることができる。それがCSSを使ったXSS
XSSによって注入されたCSSが悪さをする攻撃をCSSインジェクションというらしい。それなら、SQLインジェクションもXSSの一種と呼べるのかな。
因みに、所詮はCSSファイルなのでできることは限られていて、遭遇する機会は少ないとのこと。そもそもXSSに対して脆弱性があるのであればJavaScriptを埋め込むのだから。そらそうじゃ。

PNGの場合
Internet explorerの時代には拡張子がpngでも、内容がHTMLであれば、それを読み込んでしまっていたよう。しかし、同様にpngの中にスクリプトを書いてGoogle chromeで読み込んでも正しく読み込んではくれなかった。

コメントやピクセルデータ、キャッシュファイルを使用すれば、攻撃できるとのことだけど、少し面倒なので、今回はここで諦めるとする。

4.まとめ
WAFの誤検知とはいえ、意外なてセキュリティリテラシーを獲得できた。使える知識かは別だけど。
個人的にはマネージドルールももう少ししきい値や例外ルールを柔軟にカスタマイズできると嬉しいんだけどね。(今はアクセスを許可するとかカウントするくらいしかできないので。)
今回はここまでとします。