JavaScript 路由器 XSS
日期
2016 年 6 月 22 日
說明
Play 中的 JavaScript 反向路由器中發現了一個跨網站腳本 (XSS) 漏洞。這會影響 Play 2.0.0 到 2.4.7 的所有版本。預設情況下,主機設定為 Host 標頭的值,而此值並未在產生的 JavaScript 中進行跳脫。由於已知有漏洞允許攻擊者偽造 Host 標頭,這在實際上可能會導致反射式 XSS。
影響
在某些環境中,攻擊者有可能偽造 Host 標頭,例如透過快取中毒攻擊。在這些情況下,攻擊者可以插入包含 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 發現此漏洞。