概述
根據國外媒體的最新報道,谷歌公司的安全工程師Eduardo Vela在jQuery Mobile框架中發現了一個安全漏洞,這個漏洞將會讓所有使用了jQuery Mobile的網站暴露于跨站腳本攻擊風險之下。
安全客小百科:jQuery Mobile
jQuery Mobile項目(jQuery框架中的一個組件)是一個基于HTML5的開發框架,在它的幫助下,開發者可以設計出能夠適配目前主流移動設備和桌面系統的響應式Web站點以及應用程序。實際上,jQuery Mobile不僅可以為主流移動平臺提供jQuery的核心庫,而且它也是一個較為完整統一的jQuery移動UI框架。根據jQuery開發團隊的介紹,目前全球范圍內大約有十五萬個活動站點是采用jQuery Mobile開發的。
jQuery Mobile是目前一個非常熱門的項目,下圖顯示的是Stack Overflow上關于jQuery Mobile的提問數量增長情況:
下圖顯示的是jQuery Mobile的使用統計情況:
漏洞描述
幾個月之前,當時的Vela正在苦苦尋找內容安全策略(CSP)的繞過方法,但是在研究的過程中他注意到了jQuery Mobile的一種非常有意思的行為。jQuery Mobile會從location.hash屬性中獲取任意的URL地址,然后再用innerHTML來處理這個URL地址所返回的響應,而在某些特定條件下,攻擊者就可以利用它的這種特性來攻擊目標網站。當他發現了這種奇怪的行為之后,他便開始繼續研究,以確定網站是否存在跨站腳本漏洞。
Vela在對這個XSS漏洞進行了深入分析之后給出了該漏洞的運行機制,大致如下:
1. jQuery Mobile首先會檢查location.hash屬性值。
2. 如果location.hash中的數據看起來跟URL地址差不多的話,它會嘗試將其添加到瀏覽歷史記錄之中(通過history.pushuState實現),然后再利用XMLHttpRequest來對其進行請求訪問。
3. 接下來,它會使用innerHTML來處理服務器端的響應數據。
它首先會嘗試調用history.pushState方法,這會增加一定的攻擊難度,因為你無法對一個跨域的URL使用history.pushState方法。安全專家解釋稱,雖然從理論上來說,history.pushState方法理應能夠防范XSS攻擊,但如果網站存在開放重定向漏洞的話,攻擊者依舊有可能利用這種安全漏洞來對目標站點實施攻擊。
下面是Vela給出的demo【代碼下載】:
http://jquery-mobile-xss.appspot.com/#/redirect?url=http://sirdarckcat.github.io/xss/img-src.html
根據安全研究專家的描述,目前有很多網站都無法抵御這種類型的攻擊,因為很多組織并不認為“開放重定向”是一種安全漏洞,而需要注意的是,像谷歌(/search)、YouTube(/redirect)、Facebook(/l.php)、百度(/link)以及雅虎(/ads/pixel)這樣的熱門網站都存在這種安全漏洞。
壞消息來了
實際上,這是一個非常簡單的漏洞,想要找到這種漏洞其實也很容易。在Vela確認了該漏洞之后,他便立刻將漏洞信息上報給了jQuery Mobile的開發團隊,但是當開發團隊確認了該漏洞將會給用戶帶來的安全風險之后,Vela卻被告知這個漏洞不會得到修復。
如果修復了該漏洞的話,目前很多正在運行的Web站點和應用程序都將會受到影響,這也是開發團隊選擇不修復該漏洞的原因之一。Vela在其發表的研究報告【傳送門】中寫到:“jQuery Mobile團隊解釋稱,他們認為“開放重定向”是一種安全漏洞,但是jQuery Mobile的這種獲取并呈現URL內容的這種行為并不是一種安全缺陷,而且如果要修復這種所謂的“安全漏洞”,那么將會使大量目前已上線的Web站點和應用程序出現異常,所以他們并不打算做任何的修改。這也就意味著,jQuery Mobile的開發團隊不會就這個問題發布任何的更新補丁。而這也同樣意味著,所有使用了jQuery Mobile且存在開放重定向的網站都將存在跨站腳本漏洞。”
如果目標網站不存在開放重定向漏洞的話,攻擊者是否還可以利用這個XSS漏洞來實施攻擊呢?Vela和很多其他的安全研究人員也正在進行嘗試,但目前仍未取得成功。
Vela表示:“如果你有時間的話,你可以在沒有開放重定向漏洞的條件下嘗試去利用這個XSS漏洞來實施攻擊,這也是一種研究思路。我試過很多種方法,但目前都還沒有取得成功。”
總結
開放重定向(Open Redirect)是非常常見的,但它也同樣會給網站和應用程序帶來巨大的安全風險,因此Vela建議安全社區應該修復“開放重定向”這個功能中存在的安全問題。或者說我們應該統一思想,然后一起將其視為一種安全漏洞。如果整個安全行業在這一點無法達成一致的話,估計還有更多的XSS漏洞在等待著我們。