供應鏈安全之Broken Link Hijacking (BLH)

語言: CN / TW / HK

有這樣一個問題,如果構成網路的底層硬體或軟體在源頭上出現了漏洞或攻擊該怎麼辦?這種日益普遍同時又不易發現的攻擊形式被稱為供應鏈攻擊,通過這種方式攻擊者可以利用供應商的缺陷來完成對下游鏈路的攻擊,比如可以劫持其更新分發系統來傳播木馬;對於深度整合的下游軟體甚至可以直接完成攻擊,比如這次的Log4J漏洞。

我們知道連結是網路互動的基礎,它們可以使訪問者在頁面之間來回跳轉,可以將網路資源連線或引用來提供給使用者使用。但是需要注意的是,連結往往不是永久性的,隨著實踐的推移,它們可能出現失效的情況,比如域名過期、短連結失效、伺服器關閉、文章刪除或是使用者登出等等,而這些情況都會造成相關的連結失效。

那麼當連結失效,安全人員就可以通過一些方法去擁有或接管當前的連結,從而完成Broken Link Hijacking,並在此之後進行各種惡意行為攻擊。這種問題實際上在野已經被無數利用,而目前來看仍然有很多研究人員不瞭解或者企業對於此類問題不重視。本篇文章會簡要分享下Broken Link Hijacking (BLH) 的形式以及危害。

什麼是 Broken Link Hijacking

簡單總結來說,每當目標連結失效時就會存在BLH的風險,攻擊者可以利用網站上嵌入的過期或無效外部連結來進行劫持。如果的Web應用程式或網站使用從外部url載入的第三方服務或資源或重定向到這些服務並且它們碰巧不可用或無效(通常是由於被劫持的域過期而發生),那麼攻擊者就可以利用這些用於發起各種型別的網路攻擊例如竊取資料,誘導使用者或進行跨站指令碼攻擊(XSS)。

Broken Link Hijacking 形式

Broken Link Hijacking有兩種形式,分別是儲存型和反射型。

儲存型BLH

賬戶接管

當公司刪除某些賬戶時,他們可能會忘記刪除之前寫在網頁上的連結(或者本身網頁上鍊接中的使用者名稱寫錯了),這時攻擊者就可以去註冊這個賬戶來接管或者說冒充這個使用者從而完成一些惡意行為。

劫持LinkedIn賬號

https://medium.com/@bathinivijaysimhareddy/how-i-takeover-the-companys-linkedin-page-790c9ed2b04d

接管GitHub賬號來構造惡意倉庫

https://hackerone.com/reports/1398572

https://hackerone.com/reports/1031321

接管流量分析

https://hackerone.com/reports/111078

外部JS檔案劫持

如果目標有一個外部JS檔案並且該域/頁面已過期,那麼攻擊者就可以去接管並控制它,此時就能夠造成儲存型XSS。

域名過期

比如說example.edu有一個託管在example.com上的外部JS檔案,而example.com已經過期。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Broken Link Hijacking</title>
</head>
<body>
  <script src="//example.com/script.js"></script>
</body>
</html>
 

這時我們就可以接管example.com,並控制example.edu上的JS檔案。

接管未註冊的storage bucke從而託管惡意JS導致XSS

攻擊者可以接管儲存桶並在其上託管惡意JS檔案,當JS檔案載入到儀表板上時,它將執行惡意JS程式碼,這也可能導致XSS攻擊。此外,當dashboard.js檔案嘗試呼叫儲存桶來獲取json資料時,攻擊者將能夠控制並返回惡意或誤導性或誤導性資訊。

https://hackerone.com/reports/1398706

跳轉劫持主頁面

如果使用 target=”_blank” 構建錨鏈接,當連結可控被開啟時,新開啟的選項卡可以訪問 window.opener 物件,該物件可用於控制主頁。使用 window.opener 物件,新開啟的頁面可以使用 window.opener.location 操縱和更改位置或將頁面重定向到惡意頁面。 攻擊者可以將主頁重定向到類似的惡意克隆頁面,然後使用者可以毫無疑問地向該頁面輸入敏感資料。

window.opener.location = "http://fakewebsite.com"
 

可以通過增加noopener noreferrer 來解決這類問題:

<a href="//example.com" target="_blank" rel="noopener noreferrer">Link</a>
 

內容劫持

攻擊者可以通過接管過期的域/頁面來劫持頁面的內容。

劫持推特內容

https://hackernoon.com/how-i-hijacked-top-celebrities-tweets-including-katy-perry-shakira-fca3a0e751c6

反射型BLH

指無法控制 hrefsrc 屬性時,可能出現的利用情況。比如連結是CDN或檔案託管服務。

案例場景

http://example.edu/?version=1.0.0 返回託管在cdn.example上JS檔案的特定版本(1.0.0)。

<!-- http://example.edu/?version=1.0.0 -->
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Broken Link Hijacking</title>
</head>
<body>
  <script src="//cdn.example/1.0.0/script.js"></script>
</body>
</html>
 

cdn.example允許我們新增我們的專案並託管惡意JS檔案。

<!-- http://example.edu/?link=maliciouspath -->
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Broken Link Hijacking</title>
</head>
<body>
  <script src="//cdn.example/maliciouspath/script.js"></script>
</body>
</html>
 

這時通過link引數為maliciouspath即可控制載入JS內容。

自動化檢查Broken Link Hijacking

https://github.com/stevenvachon/broken-link-checker

https://github.com/MayankPandey01/BrokenLinkHijacker

https://github.com/misterch0c/twitterBFTD

https://github.com/cure53/HTTPLeaks

Broken X Hijacking

除了連結,實際上還有很多類似的事物有失效的情況,比如手機號,目前也出現越來越多二次放號導致的安全問題。

隨著時間的推移,Broken Link Hijacking會逐漸受到安全人員的重視。而除了連結以外,我們需要知道對於網路賬號、手機號的失效情況也都在慢慢增長,Broken X Hijacking的X的形態也會逐漸變多,應該持續關注。

參考