LinkedIn.com中存儲型xss(嵌入未經驗證的Open Graph)

翻譯自:https://medium.com/@jonathanbouman/persistent-xss-unvalidated-open-graph-embed-at-linkedin-com-db6188acedd9
翻譯:聶心明

你想參加私有衆測?我很樂意邀請你,請聯繫我[email protected]

背景

在我的上一篇文章中,我們已經學到存儲型xss中的特殊類型。這次攻擊允許我們通過操作oEmbed功能去注入HTML和JavaScript。
oEmbed是一種開放的格式,它允許從其他網站插入內容。大多數富文本平臺支持標準的oEmbed。比如,你會很容易的在你Wordpress博客的文章中通過粘貼一段 Vimeo的視頻鏈接來添加一段視頻。Wordpress將把鏈接轉換成HTML。這段HTML加載視頻播放器,然後播放指定的視頻。

如果我粘貼我的推特的鏈接到這篇文章中,那麼Medium就會創建一段帶我照片的簡介。這就是oEmbed的功能。在我們知道這些之前,它們有一個很嚴重的漏洞,允許用戶插入未經驗證的oEmbeds。


另一種方式就是通過 Open Graph 協議來嵌入一個假的富文本。一個網站在頁面上添加Open Graph標籤,目的是指定你插入的內容類型。

在用戶嵌入內容之前,大多數平臺會檢查指定的oEmbed和Open Graph標籤。網站會遵守特殊的規則。然後網站會檢查所有的標籤,以決定是否嵌入其中或者以怎樣的方式嵌入其中。

還有一個有利條件是,獨自不需要離開博客去查看富文本內容(比如:視頻,圖片,表演)。還可以插入像Vimeo和Youtube等視頻平臺的鏈接,也可以提高他們的播放量和點擊率。

大多數平臺允許你嵌入一些其他的內容,但是它們會有域名的白名單。看一下 Wordpress的做法。你想把你的HTML注入到平臺中,這可能有點難度。

但是如果白名單的實現出現了錯誤,那麼我們就可以把我們的惡意代碼注入到我們的目標平臺上去,那麼這樣的錯誤是什麼呢?

我們已經證明了oEmbed中的漏洞,現在我們看看能不能利用這個技巧來操縱Open Graph標籤呢?讓我們試試。

選取目標

今天我們應該選誰好呢?你說LinkedIn?好主意。當我想聯繫我關注的研究員時,LinkedIn是我最喜歡的去的地方。而且上面有大量的CEO/CTO/CTTO/CNYANCATO。所以當我報告一個漏洞時(例如沒有安全負責人的平臺)。我就會快速的聯繫到那個網站的負責人,給他們的經理直接發送一個消息就足夠了:”嘿,你的網站有漏洞了,你快去看一下。你的技術支持還在睡覺。“

這裏我插一句嘴,LinkedIn是一個有一個非常負責任的漏洞披露平臺,它們甚至也有私有衆測項目

讓我們給他們報告一個漏洞,然後爭取參加私有衆測的機會吧

識別目標

博客,這就是我想要尋找的地方,這裏允許我們插入一些額外的內容。對LinkedIn 文章說hello。通過訪問你的動態然後點擊 Write an Article 這個按鈕,你就會打開這部分功能。

我們訪問到了一個看起來比較乾淨的編輯器,這裏允許我們去寫我們的第一篇文章,這個文章由標題和內容組成。我們移動鼠標到下面的小圖標中,這裏有一些可以添加圖片和視頻的功能。


點擊這個小圖標,我們點開添加鏈接的按鈕,然後在我們的博客中添加富文本內容。

插入請求

是時候打開 Burp Suite 然後觀察我們的數據傳輸,當我們填入鏈接的時候到底發生了什麼?

我們看到LinkedIn把我們的url轉換成了HTML代碼。返回報文被url編碼了,下面是解碼的結果:

{“embedIframe”:”<iframe src=\”https://www.linkedin.com/pulse/api/edit/embed?embed={"request":{"originalUrl":"https://www.youtube.com/watch?v=9hWgA7qjK2c","finalUrl":"https://www.youtube.com/watch?v=9hWgA7qjK2c"},"images":[{"width":480,"url":"https://i.ytimg.com/vi/9hWgA7qjK2c/hqdefault.jpg","height":360},{"width":1920,"url":"https://i.ytimg.com/vi/9hWgA7qjK2c/maxresdefault.jpg","height":1080}],"data":{"com.linkedin.treasury.Video":{"width":480,"html":"<iframe scrolling=\”no\” allowfullscreen src=\”//media.licdn.com/embeds/media.html?src=https://www.youtube.com/embed/9hWgA7qjK2c?feature=oembed&amp;url=https://www.youtube.com/watch?v=9hWgA7qjK2c&amp;type=text/html&amp;schema=youtube\" width=\”480\” frameborder=\”0\” class=\”embedly-embed\” height=\”270\” />”,”height”:270}},”provider”:{“display”:”YouTube”,”name”:”YouTube”,”url”:”https://www.youtube.com/"},"author":{"name":"321 Relaxing — Meditation Relax Clips”},”description”:{“localized”:{“en_US”:”Rain HD video and forest, relaxing rain sounds and forest sounds for sleeping meditation. Nature sounds relaxation. Rainforest sounds: https://www.youtube.co..."}},"title":{"localized":{"en_US":"Rain Sounds and Forest Sounds — Relaxing Sleep”}},”type”:”video”}&signature=AcdfNDjBXZOjo2vdz4EOixtGBrlx\”></iframe>”,”universal”:true}

編輯器把它解析成框架,然後放入我們的文章中,結果被放入了三個框架之中,它們中每一個之後都有一個視頻播放器。我們繼續,然後就看到我們嵌入的YouTube視頻 relaxing rain sounds

這意味着我們能夠注入我們自己的惡意HTML,這個html不是LinkedIn域下的。我們可以創建獨立的框架。但是我們不能得到LinkedIn的cookie,我們也不能操作框架外的html

如果我們能注入一個假的LinkedIn登錄頁面,然後偷走訪客的密碼,這樣的話,影響也是蠻大的。在LinkedIn中嵌入內容,LinkedIn不會暗示這是一個嵌入的東西,就只是一個乾淨的,無邊框的盒子。所以,對於普通人來說,還是很難區分這是一個釣魚頁面還是一個真正的登錄頁面。

完美的釣魚頁面

首先我們要設計一個釣魚頁面來,因爲我希望能讓其他人很快的瞭解到這個漏洞的危害程度到底有多深。彈出一個JavaScript的警告框是不夠的。

想要複製一個網站的頁面元素,可以用SnappySnippet。這是一個Chrome的插件,它可以讓你選擇網站的元素,並且把它的HTML和css文本都複製下來。

我們把SnappySnippet中的代碼貼到新的的HTML文件中去,然後把它轉換的小一點,並在結尾添加一些JavaScript代碼,以捕捉到用戶輸入的郵箱和密碼。如果你輸入用戶名和密碼並且提交了之後,我就會用JavaScript的警告框來顯示你的登錄信息。

我把假的登錄頁面上傳到我自己的服務器中,然後把它嵌入到LinkedIn的文章裏面,如你所見,我們沒有用到oEmbed或者Open Graph標籤

有一點失敗的地方就是我們插入的頁面周圍有一圈灰色邊框,看上去就像被嵌在裏面的一樣。

利用Open Graph

如果你仔細觀察Open Graph協議,你會發現有個標籤名是og:video。它告訴瀏覽器視頻播放器該如何被嵌入其中。

如果我們用og:video標籤加載我們的釣魚頁面而不是視頻播放器,那麼會發生什麼?


歐耶,我們把釣魚頁面成功的嵌入到了LinkedIn的文章中。讓我們把文章標題改成‘Oops, something went wrong!’,然後繼續

現在我們可以通過精心構造一篇文章,然後把鏈接發給其他人,就可以盜取其他用戶的用戶名和密碼了。或者,我們可以把它公開在LinkedIn上,看看會發生什麼。

現在所有的事情都已經完成,是時候寫一篇報告交給LinkedIn的安全團隊了

結尾

我在LinkedIn.com 中創建了一個完美的釣魚頁面。我們在LinkedIn的文章中在Open Graph Video標籤中注入了我們的釣魚頁面。
這也是一種存儲型xss攻擊

攻擊的影響

  • 完美的釣魚頁面
  • 在用戶輸入他們的憑證之後,我可以把頁面自動重定向到另一個頁面,而不會引起懷疑(通過使用top.location.href)
  • beef攻擊訪問者
  • 會造成點擊劫持攻擊

我還忘了哪些呢?請給我留言

避免這次攻擊的解決方案

  • 不要讓用戶來控制Open Graph標籤,使用白名單來控制嵌入的內容
  • 不要用框架

賞金

沒有

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章