作者:
xsser
·
2013/01/08 17:47
0x00 相關背景介紹
由於應用越來越多的需要和其他的第三方應用互動,以及在自身應用內部根據不同的邏輯將使用者引向到不同的頁面,譬如一個典型的登入介面就經常需要在認證成功之後將使用者引導到登入之前的頁面,整個過程中如果實現不好就可能導致一些安全問題,特定條件下可能引起嚴重的安全漏洞。
0x01 成因
對於URL跳轉的實現一般會有幾種實現方式:
- META標籤內跳轉
- javascript跳轉
- header頭跳轉
透過以GET或者POST的方式接收將要跳轉的URL,然後透過上面的幾種方式的其中一種來跳轉到目標URL。一方面,由於使用者的輸入會進入Meta,javascript,http頭所以都可能發生相應上下文的漏洞,如xss等等,但是同時,即使只是對於URL跳轉本身功能方面就存在一個缺陷,因為會將使用者瀏覽器從可信的站點導向到不可信的站點,同時如果跳轉的時候帶有敏感資料一樣可能將敏感資料洩漏給不可信的第三方。
譬如一個典型的登入跳轉如下:
<?php
$url=$_GET['jumpto'];
header("Location: $url");
?>
如果jumpto沒有任何限制,所以惡意使用者可以提交
http://www.wooyun.org/login.php?jumpto=http://www.evil.com
來生成自己的惡意連結,安全意識較低的使用者很可能會以為該連結展現的內容是www.wooyun.org從而可能產生欺詐行為,同時由於QQ,淘寶旺旺等線上IM都是基於URL的過濾,同時對一些站點會一白名單的方式放過,所以導致惡意URL在IM裡可以傳播,從而產生危害,譬如這裡IM會認為www.wooyun.org都是可信的,但是透過在IM裡點選上述連結將導致使用者最終訪問evil.com。
0x02 攻擊方式及危害
惡意使用者完全可以借用URL跳轉漏洞來欺騙安全意識低的使用者,從而導致“中獎”之類的欺詐,這對於一些有線上業務的企業如淘寶等,危害較大,同時藉助URL跳轉,也可以突破常見的基於“白名單方式”的一些安全限制,如傳統IM裡對於URL的傳播會進行安全校驗,但是對於大公司的域名及URL將直接允許透過並且顯示會可信的URL,而一旦該URL裡包含一些跳轉漏洞將可能導致安全限制被繞過。
如果引用一些資源的限制是依賴於“白名單方式”,同樣可能被繞過導致安全風險,譬如常見的一些應用允許引入可信站點如youku.com的影片,限制方式往往是檢查URL是否是youku.com來實現,如果youku.com內含一個url跳轉漏洞,將導致最終引入的資源屬於不可信的第三方資源或者惡意站點,最終導致安全問題。
0x03 實際案例
a WooYun: 百度一個URL跳轉漏洞
透過url跳轉突破IM的安全校驗,從而傳播惡意URL
b WooYun: 第五次遇到利用淘寶網網址跳轉的網釣
透過url跳轉欺騙交易使用者對URL的信任,從而實現欺詐
c http://hi.baidu.com/rayh4c/blog/item/8fde4b23ffa2045e9822edb9.html
透過URL跳轉繞過應用程式對引用資源的限制,從而導致安全漏洞
d WooYun: 豆瓣電臺認證繞過及csrf防範策略繞過漏洞
藉助未驗證的URL跳轉,可以將應用程式內部敏感的資料傳遞到不安全的第三方區域
0x04 修復方案
理論上講,url跳轉屬於CSRF的一種,我們需要對傳入的URL做有效性的認證,保證該URL來自於正確的地方,限制的方式同防止csrf一樣可以包括:
1 referer的限制
如果確定傳遞URL引數進入的來源,我們可以透過該方式實現安全限制,保證該URL的有效性,避免惡意使用者自己生成跳轉連結
2 加入有效性驗證Token
我們保證所有生成的連結都是來自於我們可信域的,透過在生成的連結里加入使用者不可控的Token對生成的連結進行校驗,可以避免使用者生成自己的惡意連結從而被利用,但是如果功能本身要求比較開放,可能導致有一定的限制。
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!