成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Edge 漏洞研究團隊對 iOS Chromium 漏洞的研究

系統(tǒng) 瀏覽器
本文我將快速介紹iOS Chromium瀏覽器以及WKWebView提供的JavaScript進程間通信(IPC)的潛在攻擊面。

 本文我將快速介紹iOS Chromium瀏覽器以及WKWebView提供的JavaScript進程間通信(IPC)的潛在攻擊面。另外,我還講討論在探索此代碼區(qū)域時發(fā)現(xiàn)的一個UXSS漏洞。WKWebView 是蘋果在 WWDC 2014 上推出的新一代 webView 組件,用以替代 UIKit 中笨重難用、內(nèi)存泄漏的 UIWebView。WKWebView 擁有60fps滾動刷新率、和 safari 相同的 JavaScript 引擎等優(yōu)勢。

iOS Chromium瀏覽器以及WKWebView提供的JavaScript進程間通信(IPC)的潛在攻擊面

與Chromium瀏覽器的桌面版(使用V8作為JavaScript引擎,使用Blink進行渲染和WebAPI支持)不同,iOS版的Chromium沒有。實際上,iOS上所有第三方瀏覽器很可能都使用內(nèi)置的WKWebView API向其應(yīng)用程序添加Web支持,Chromium也不例外。原因是iOS平臺上的代碼簽名限制以及Apple不愿意允許開發(fā)人員提交啟用了動態(tài)協(xié)同設(shè)計權(quán)限的應(yīng)用程序。特別是,此權(quán)限允許應(yīng)用程序映射RWX內(nèi)存。這個功能將允許實現(xiàn)一個高效的JavaScript引擎,與其讓Chromium在平臺上遭受性能不佳的困擾,不如像其他瀏覽器一樣使用WKWebView。

IPC

使用WKWebView而不是自己的渲染和JavaScript引擎的一個不幸的副作用是,你不能再對底層代碼進行直接修改。這意味著你不能直接向網(wǎng)站公開新的本機功能。 WKWebView API通過WKUserContentController對象對此進行了補救。在創(chuàng)建WKWebView對象期間,可以通過WKWebViewConfiguration對象傳遞該對象。

該對象不僅可以用于將JavaScript直接注入網(wǎng)頁中,還可以通過JavaScript公開本機或目標c代碼。這些JavaScript接口通過window.webkit.messageHandlers對象公開,并通過postMessage接口支持調(diào)用。在撰寫本文時,每個網(wǎng)頁都有四個消息處理程序可用,找到這些代碼的最簡單方法是grep“setScriptMessageHandler”的代碼

  1. window.webkit.messageHandlers.FrameBecameAvailable.postMessage(...) 
  2. window.webkit.messageHandlers.FrameBecameUnavailable.postMessage(...) 
  3. window.webkit.messageHandlers.crwebinvoke.postMessage(...) 
  4. window.webkit.messageHandlers.FindElementResultHandler.postMessage(...) 

 先讓我們一起討論前兩個消息處理程序,這些是控制WebFrameImpl對象的創(chuàng)建和銷毀的處理程序。該對象的唯一責任是管理瀏覽器進程與頁面內(nèi)框架之間的IPC通信。在內(nèi)部,這些對象由WebStateImpl擁有的WebFramesManagerImpl管理。 WebStateImpl對象是代表選項卡的主要對象,在桌面上與之等效的是WebContents對象。

[[358609]]

與桌面版的Chromium不同,在Chromium的桌面版本中,諸如RenderFrameHost之類的對象與框架的生命周期完全同步,而WebFrameImpl對象的生命周期則完全由JavaScript控制。如果網(wǎng)頁隨機調(diào)用FrameBecomeAvailable或FrameBecomeUnavailable,則框架可能沒有相應(yīng)的WebFrameImpl對象,或者可能有10個,不過此時我還沒有注意到由該API公開并以這種方式使用而引起的任何內(nèi)存安全問題。

這些處理程序通常通過//ios/web/js_message/resources目錄中的代碼調(diào)用,要創(chuàng)建WebFrameImpl對象,需要以下代碼段。

Edge 漏洞研究團隊對 iOS Chromium 漏洞的研究

要銷毀一個WebFrameImpl對象,下面的代碼片段就足夠了。

Edge 漏洞研究團隊對 iOS Chromium 漏洞的研究

在上面的代碼段中,銷毀框架的WebFrameImpl對象唯一需要的就是其標識符,除主框架的標識符外,這些標識符都是公開的。

這是因為,如果瀏覽器的本機端要在子框架中執(zhí)行JavaScript,它將首先通過主框架路由消息。這是通過調(diào)用WebFrameImpl :: CallJavaScriptFunction方法來完成的,此方法使用目標框架的加密密鑰對函數(shù)名稱和參數(shù)進行加密,然后將對__gCrWeb.message.routeMessage的調(diào)用注入到頁面的主框架中。然后,接收框架將消息中的目標框架字段與其自身的框架ID相對照。如果不匹配,它將遍歷所有子框架并重新發(fā)布消息。最終,消息將進入正確的子框架,并且將解密消息并調(diào)用所需的函數(shù)。之所以子框架的框架ID是公開的,是因為任何子框架都可以安裝消息偵聽器,并檢查通過它傳遞的消息的目標框架ID字段。

這些routeMessage調(diào)用的構(gòu)建方式與FrameBecameAvailable處理程序中的監(jiān)督相結(jié)合,實際上導致了一個相當嚴重的漏洞。在將routeMessage調(diào)用注入主框架時,使用了以下代碼。

Edge 漏洞研究團隊對 iOS Chromium 漏洞的研究

可以看到,腳本是使用格式字符串構(gòu)建的,該格式字符串使用了WebFrameImpl的encryption_message_json,encrypted_function_json和frame_id_成員。最初,frame_id_成員對你可以提供的名稱沒有任何限制。因此,子框架可以執(zhí)行以下代碼:

Edge 漏洞研究團隊對 iOS Chromium 漏洞的研究

這將導致創(chuàng)建一個新的WebFrameImpl,其框架ID為foobar'); alert(window ['origin'] +'。創(chuàng)建框架后,瀏覽器將嘗試向其路由消息。會嘗試從框架中獲取表單信息以進行自動填充,因為將JavaScript注入到主框架中,這將以在主框架中運行的以下代碼結(jié)尾:

Edge 漏洞研究團隊對 iOS Chromium 漏洞的研究

此漏洞的影響是,它啟用了從子框架(例如托管廣告的框架)中的UXSS,并允許該框架在托管框架的網(wǎng)頁中運行任意JavaScript。不過該漏洞已經(jīng)進行了修復,該修補程序本身很簡單,可以確??蚣躀D僅包含十六進制數(shù)字(0-9和A-F)。

crwebinvoke

crwebinvoke處理程序用于處理綁定到標簽的WebState對象的消息,通過調(diào)用WebStateImpl :: AddScriptCommandCallBack添加這些處理程序,并且回調(diào)本身具有以下簽名。

Edge 漏洞研究團隊對 iOS Chromium 漏洞的研究

ScriptCommandCallback senderFrame的第四個參數(shù)有趣的是,它完全取決于在消息的crwFrameId字段中傳遞的ID。再加上子框架的框架ID可能會泄漏的事實,可能會在將來導致漏洞。目前,我還沒有注意到此行為引起任何漏洞。值得注意的是,許多回調(diào)在執(zhí)行某些操作之前會執(zhí)行類似于if(sender_frame->IsMainFrame()的操作。這意味著,如果你可以泄漏表示主機框架ID的128位值,則可以模擬主機框架。幸運的是,我沒有注意到執(zhí)行此操作的任何方法。

就像該接口的一個示例一樣,它與任何安全問題都不相關(guān),它是處理window.print調(diào)用的代碼。

Edge 漏洞研究團隊對 iOS Chromium 漏洞的研究

如果你在網(wǎng)頁中執(zhí)行上述代碼,則將打開打印對話框。

crwebinvoke界面提供的另一個功能是從注入的JavaScript調(diào)用發(fā)送結(jié)果的通道,每當通過routeMessage調(diào)用方法時,瀏覽器都會在內(nèi)部向列表添加回調(diào)處理程序。通過發(fā)送frameMessaging_

此實現(xiàn)細節(jié)的一個潛在問題是,偽造回應(yīng)所需要的只是發(fā)送請求的框架ID和請求的消息ID的知識。事實證明,消息ID最終只是一個32位的遞增整數(shù),它來自創(chuàng)建框架時的crwFrameLastReceivedMessageId參數(shù)。對于新的框架,這個消息ID從0開始。這意味著任何子框架理論上都可以偽造任何其他子框架的回調(diào)。然而,我還沒有注意到任何利用子框架消息的問題。

FindElementResultHandler

最后,F(xiàn)indElementResultHandler處理程序負責將被修改的HTML元素通知瀏覽器。每當修改網(wǎng)頁時,瀏覽器就會在主框架中調(diào)用__gCrWeb.findElementAtPoint。當findElementAtPoint檢測到所修改的元素位于不同來源的子框架中時,會在子框架上發(fā)布一條消息,以便它可以處理通知瀏覽器的操作。這用于生成長按上下文菜單,并在CRWContextMenuController類中實現(xiàn)。

總結(jié)

盡管本文討論的大多數(shù)概念都專門針對基于Chromium的iOS瀏覽器,但所有WKWebView使用者都可以訪問messageHandler功能。在審核基于WKWebView的瀏覽器時,它是一個很好的第一手資料。MessageHandler是一個抽象類,開發(fā)者可以在自己的項目中創(chuàng)建自己的類,繼承并實現(xiàn)(重寫)MessageHandler中提供的方法。

本文翻譯自:https://microsoftedge.github.io/edgevr/posts/Hacking-Chrome-iOS/如若轉(zhuǎn)載,請注明原文地址。

 

責任編輯:姜華 來源: 嘶吼網(wǎng)
相關(guān)推薦

2020-09-25 10:14:54

漏洞

2010-05-18 10:39:22

2023-07-07 13:29:45

2020-10-16 09:42:22

漏洞

2020-10-14 09:44:52

漏洞

2023-02-26 23:28:45

2015-03-30 09:54:57

2021-09-26 14:04:14

iOS零日漏洞漏洞

2020-10-14 10:39:50

漏洞網(wǎng)絡(luò)攻擊網(wǎng)絡(luò)安全

2010-04-19 10:32:07

2023-06-09 15:54:27

2021-09-26 11:00:55

漏洞網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊

2023-08-23 12:38:10

2011-05-18 14:05:14

2014-12-25 09:51:32

2012-10-24 16:45:33

2023-02-27 08:40:45

微軟Edge瀏覽器

2022-07-07 00:13:14

零日漏洞變種

2021-04-14 09:50:48

零日漏洞漏洞網(wǎng)絡(luò)安全

2019-04-03 08:52:50

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久久久久国产免费视网址 | 成人在线免费视频 | 有码在线 | 成人av一区 | 欧美一区不卡 | 亚洲在线免费 | 国产a区| 草久久 | 色天天综合| 久久日韩精品 | 亚洲第一天堂无码专区 | 九九在线视频 | 国产成人精品综合 | 久久久久久国产精品免费 | 国产99久久精品 | 岛国av免费在线观看 | 精品国产一区二区三区久久影院 | 自拍偷拍亚洲视频 | 欧美a在线| 成人av电影免费在线观看 | 国产精品一码二码三码在线 | 99精品视频在线观看 | 欧美一区二区在线 | 99久9| 久久精品网 | 国产精品久久久久久久久久三级 | 亚洲综合久久久 | 国产一区二区在线免费视频 | 久久国产精品久久久久久 | 97精品国产97久久久久久免费 | 男女网站免费观看 | 国产欧美一区二区三区日本久久久 | 免费在线观看成人 | 欧美a区| 天天干夜夜操 | 国产免费一区二区三区网站免费 | 欧美成人精品在线观看 | 国产精品123区 | 一级毛片免费 | 91精品久久久久久久久久 | 一区二区三区精品 |