2.クライアントサイドの脆弱性

2.1. XSS(クロスサイトスクリプティング)

2.1.1. XSSの概要

XSSはHTMLに悪質なスクリプトを埋め込み実行できる脆弱性のこと。
この脆弱性により攻撃者は、ユーザーへのなりすまし、ユーザーが実行できるすべての操作を実行し、ユーザーのすべてのデータにアクセスが可能になる。このとき被害者のユーザーがアプリケーション内で特権アクセスを持っている場合、攻撃者はアプリケーションのすべての機能とデータを完全に制御できる可能性がある。

XSSは仕組みとして脆弱なウェブサイトに何かしら操作をして、悪意のあるJavaScriptをユーザに返すことで機能する。

またXSSには以下の種類がある。

  • 反射型XSS
  • 格納型XSS
  • DOMベースのXSS
  • ブラインドXSS

2.1.2. 反射型XSS

反射型XSSはもっとも一般的なXSSで、攻撃者が用意したURLにアクセスした時に発生する。
主にURLのクエリパラメータに含まれるJavaScriptをそのまま実行してしまう場合に発生する。

# 正しいリクエスト
https://security.example.com/status?message=All+is+well.
<p>Status: All is well.</p>
# 以下のようなリクエストを送ってJavaScriptが実行されてしまう場合に反射型XSSとなる
https://security.example.com/status?message=<script>/*+Bad+stuff+here...+*/</script>
<p>Status: <script>/* Bad stuff here... */</script></p>

2.1.3. 格納型XSS

格納型XSSはwebサイトが蓄積しているコンテンツの中に含ませるXSSのこと。
具体的にはWebアプリケーションのデータベースなどに保存され、他のユーザーがサイトまたは Web ページにアクセスしたときに実行される。

データベースに保存された悪意のあるJavaScriptは、ユーザを別のサイトにリダイレクトしたり、ユーザーのセッションCookieを盗んだり、訪問ユーザとして動作しながら他のWebサイトのアクションを実行したりする可能性がある。

データが保存され、他のユーザーがアクセスできる領域に表示されていると思われるすべてのエントリポイントがそのポイントと考えられる。

2.1.4. DOMベースのXSS

DOMベースのXSSが可能となるのはアプリケーションがDOMを通じて動的にHTMLを組み立てている部分に悪意のあるスクリプトを注入できるとき。 またそのペイロードを実行できるのはDOMからデータが読み戻されるときになる。

2.1.5. ブラインドXSS

ブラインドXSSは格納型XSSに似ているがペイロードが動作しているか確認することやテストすることができないXSS。
システム管理者やバックエンドオペレータは確認できる。XSS Hunter ExpressというツールがブラインドXSSの検証でよく使われる。

2.1.6. XSSチートシート

WAFやフィルターの回避に役立つXSSのPoCを含むサイト

https://portswigger.net/web-security/cross-site-scripting/cheat-sheet

https://github.com/Proviesec/xss-payload-list

2.1.7. 高度なXSSペイロード

WAFやアプリのフィルターを回避するためのPayloadsは以下が参考になる。

https://github.com/foospidy/payloads/tree/master/other/xss

https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html

https://jsfuck.com/

ペイロードでは<script></script>は必ず必須と限らない、これはHTML自体のイベント族勢が呼び出されたときにJavaScriptを実行するものがあるため。

2.1.8. XSSに関する更な情報源

2.2. CSRF(クロスサイトリクエストフォージェリ)

2.3. クリックジャッキング

2.4. DOMベースの脆弱性

2.5. CORS(クロスオリジンリソース共有)の脆弱性

2.6. Web Socketの脆弱性