網站安全🔒 開放式重定向 Open Redirect 攻擊手法 — 「導遊放你自由行」

Jayden Lin
Jan 1 · 9 min read

筆者任職於 Yahoo ,線上課程:《經典駭客攻擊教程:給每個人的網站安全入門》|粉絲團:《程式猿吃香蕉🍌》

大家旅行的時候喜歡跟團還是自由行呢?或是否有被導遊放生變成自由行的體驗?本篇文章將使用「旅遊」的概念來說明「開放式重定向 Open Redirect 」攻擊手法,便於大家了解這項攻擊手法的嚴重性。

這類攻擊最常發生在網站登入流程,因為網站登入後的跳轉如果沒有指定白名單或做驗證,很容易被駭客利用來做「釣魚攻擊」,那麼防禦的重點就在於怎麼正確的「驗證」跳轉的網址了。

本篇文章將先說明「開放式重定向 Open Redirect 」的攻擊原理與損害,並先說明「錯誤」的防禦方式,供大家自己的防禦方式是否正確,最後再分享正確的防禦重點事項。

本篇內容:
✔ 開放式重定向 Open Redirect 的攻擊原理與損害
✔ 防禦注意事項:正確與錯誤的防禦方式
✔ 小結

▍開放式重定向 Open Redirect 攻擊原理與損害

談攻擊原理之前,我們先來談「重定向」( Redirect ) 這件事情,相信許多人都有登入帳號後,頁面跳轉到網站首頁或回到前頁面的經驗,這就是「重定向」( Redirect )。

許多網站的程式寫法,都是在登入網址的後面加上一個網址參數 ( Query Parameter ) 來指定登入後的跳轉位置,例如:

https://example.com/signin?redirect_uri=/home

網址參數 ( Query Parameter ) 的名稱根據網站的不同而有所差異,常見的參數還有 return_uri 、 return_url 、redirect_url 、done 、 success_uri、 success_url、 forward_url、 forward_uri、 forward 等等

下次再登入網站的時候,大家可以注意看看網址的後面是否藏有這個參數,以 Yahoo 登入為例,它的網址最後就多了 done 這個參數來指定登入後「重定向」( Redirect ) 的目的地 (如下圖所示) 。

有些人可能會警覺到,既然網址參數是在客戶端 (Client side),那麼就提供了駭客一個注入 (injection) 惡意內容的機會。

想像一下,經營網站就像經營旅行社一樣,旅行社提供使用者良好的旅遊體驗,每一個景點與移動都要仔細設計。這就如同網站經營者精心安排網站內容,每個導航 (Navigation ) 按鈕與頁面流程的跳轉,都需要良好地設計,讓使用者有良好的網站使用體驗。

然而,若是你的網站有「開放式重定向 Open Redirect 」的漏洞, redirect_uri 重定向的網址便可以被駭客指定到一些惡意的網頁,就會破壞整體的瀏覽體驗。

https://example.com/signin?redirect_uri=https://example.coom/payment

舉例來說,如上網址所示,網址將在登入後導到 https://example.coom/payment 網站,而 example.coom 不同於 example.com ,網址多了一個 o ,是駭客所經營的惡意釣魚網站,偽裝成 eaxmple.com騙 取使用者輸入信用卡資訊。

駭客將此連結 ( 如下圖所示 ),隨機送給使用者,使用者一時不查,只看到前半段網址是 example.com 就點擊進入登入頁面,沒注意到登入後會被跳轉到 example.coom/payment 這個惡意釣魚網址,以至於使用者跳轉後仍「以為」自己在 example.com ,基於對 example.com 網站的信任而填入信用卡資訊,造成攻擊發生。

以旅行社的譬喻方式來說,就像你經營了一間旅行社,大部分的導遊都很認真,安排很棒的旅遊行程 ,但有一個「不守規定的導遊」,允許遊客任意指定旅行地點 ( 如同網站出現「開放式重定向 Open Redirect 」漏洞 ),把原本安排得好好的旅遊行程讓遊客「自訂」搞成自由行。

最糟糕的是,被自訂的行程還會影響到其他旅客。

舉例來說,有一個惡意的遊客把導遊的目的地改成到劣質紀念品店採買(從中賺取分潤),那麼其他的遊客遇到這名「不守規定的導遊」的時候,其行程也會被改成劣質紀念品店採買。注意這裡的幾個角色,有幫助於大家理解「開放式重定向 Open Redirect 」攻擊:

  • 惡意遊客:其角色就像駭客一樣,指定 redirect_uri 重定向的網址,將其他使用者導向惡意的釣魚網站騙取使用者信用卡資訊。惡意的遊客則是利用「不守規定的導遊」,將其他旅客導向劣質紀念品採買的行程,而其他遊客基於對於旅行社的信任感,所以對於導遊的行程不疑有他,而造成惡意遊客 (駭客) 的行為成功。就像駭客利用其他使用者對於你的網站的信任,對於從你網站導往的目的地位置有信任感,而造成攻擊成功。
  • 不守規定的導遊:其角色就如同開放式重定向 Open Redirect 」的程式漏洞,被駭客利用來進行攻擊。
  • 旅行社:其角色就像你的網站一樣,辛苦經營且有良好的品牌聲譽,所有流程都安排得很棒,有良好得使用者體驗 (就如同其他導遊都安分守己的帶團),但因為有「開放式重定向 Open Redirect 」漏洞 (就如同那位不守規矩的導遊) 而被駭客利用去做壞事。

基於以上的概念,那麼防禦重點就在於怎麼處理那名「不守規定的導遊」,至少讓他思想正確一點,對於「惡意遊客 」要求的旅行「目的地」,能有正確的「判斷能力」,以程式碼的觀點來看,就是要正確的驗證重定向網址的「目的地」。

▍防禦注意事項:正確與錯誤的防禦方式

已知防禦的重點是要驗證重定向網址的「目的地」,只是…該怎麼驗證?

  • 若跳轉的目的地是使用「部分網址」(例如:使用 /payment,而不是完整的網址),不能只驗證重定向網址字串開頭是否為 / ,因為駭客會使用 //example.coom 來通過驗證,並且 //example.coom 成了「完整網址」,跳出了「部分網址」限制跳轉的頁面在同站的限制,較好的方式是採用白名單,指定可以被跳轉的路徑。
  • 若是跳轉的目的地是相對路徑 (Relative Path),例如:使用 ../payment,要同時注意是否有目錄遍歷 Path Traversal 漏洞。有關目錄遍歷 Path Traversal 的攻擊與防禦手法可以參考我先前撰寫的這篇文章:
  • 若跳轉的目的地是「完整網址」,驗證合法網域 ( Domain ) 的時候,不能只判斷字串開頭,例如:不能只判斷重定向網址字串開頭是否為 https://example.com ,因為這會造成 https://example.com.hacker.com 這種惡意網域能通過驗證,較好的方式是驗證網域的結尾或是指定整個網域 ( Domain ),而不是只要驗證開頭。
  • 駭客輸入的重定向網址字串當中,有些並不是「網址」,例如:data:text/html,<script>alert(1)</script> 或是 javascript:alert(1) 等等,會直接造成瀏覽器的 JavaScript 程式執行。

▍小結

開放式重定向 Open Redirect 攻擊之所以經常被大家忽略,是因為它並不是直接「破壞」現有的網站,駭客還需要配合搭建對應的釣魚網站來讓攻擊效益最大化。但這並不表示這類的漏洞不重要,因為不論是後續釣魚網站造成的帳號密碼的外洩、或是信用卡資料被盜取,這些都是對網站的信譽有很大的傷害。因此在頁面的跳轉上,重定向網址的使用一定要有妥善的規劃與驗證,具備有資訊安全的思維才能讓網站的運營長長久久。

以上的內容是我對「開放式重定向 Open Redirect 」的分享,希望對大家有幫助。若是喜歡我分享的網站安全內容,也可以參考我其他文章或是我的線上課程《經典駭客攻擊教程:給每個人的網站安全入門》:

若是喜歡我分享的內容,歡迎幫我按個拍手,可拍 50下,給我一點鼓勵,或是加入我的粉絲團《程式猿吃香蕉🍌》,一起分享軟體知識與心得!

程式猿吃香蕉

來點軟體世界中那些更營養的知識

程式猿吃香蕉

『來點更營養的軟體知識,吃香蕉吧!』成員均為軟體開發愛好者,任職於網路產業,熱於分享與討論交流,訂閱我們吧

Jayden Lin

Written by

Yahoo 擔任 Lead Engineer,負責搜尋廣告系統開發。曾擔任樂天市場前端開發組經理,從零建立樂天台灣前端開發團隊。也是《程式猿吃香蕉》團隊創辦人,致力提供優質的、入門的、科普性質的軟體知識給大家。

程式猿吃香蕉

『來點更營養的軟體知識,吃香蕉吧!』成員均為軟體開發愛好者,任職於網路產業,熱於分享與討論交流,訂閱我們吧

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store