JavaScript ルーター XSS
日付
2016 年 6 月 22 日
記述
Play の JavaScript リバースルーターにクロスサイトスクリプティング (XSS) 脆弱性が見つかりました。これは、2.0.0 から 2.4.7 までのすべてのバージョンの Play に影響します。デフォルトでは、ホストは Host ヘッダーの値に設定され、生成された JavaScript ではエスケープされません。攻撃者は Host ヘッダーをスプーフィングできることが知られている脆弱性があるため、実際には反射型 XSS が発生する可能性があります。
影響
一部の環境では、キャッシュポイズニング攻撃などを通じてホストヘッダーをスプーフィングすることが攻撃者にとって可能です。このような場合、攻撃者は JavaScript を含む任意の文字列を挿入して、予期しないユーザーのマシンで実行することができます。
影響を受けるバージョン
Play 2.0.0 - 2.4.7
回避策
Routes.javaScriptRouter
メソッドと JavaScriptReverseRouter.apply
メソッドには、ホストを受け入れる別のバージョンもあります。このバージョンを明示的でサニタイズされたホストで使用して、攻撃者が攻撃を実行できないようにすることができます (例)。
@Html(play.api.routing.JavaScriptReverseRouter(
name = "Router",
ajaxMethod = Some("jQuery.ajax"),
host = "example.com", // should either be constant or sanitized value
routes.javascript.Users.list,
routes.javascript.Application.index
).body.replace("/", "\\/"))
修正
Play 2.4.8 または 2.5.x にアップグレードします。
謝辞
この脆弱性を発見してくれた LinkedIn の Luca Carettoni と Detectify の Frans Rosén に感謝します。