Slashdot Mirror


Malicious Websites Can Initiate Skype Calls On iOS

An anonymous reader writes "In this article, security researcher Nitesh Dhanjani shows how iOS insecurely launches third-party apps via registered URL handlers. Malicious websites can abuse this to launch arbitrary applications, such as getting the Skype.app to make arbitrary phone calls without asking the user. Dhanjani 'contacted Apple's security team to discuss this behavior, and their stance is that the onus is on the third-party applications (such as Skype in this case) to ask the user for authorization before performing the transaction.' He also discusses what developers of iOS apps can do to design their software securely and what Apple can do to help out."

36 of 177 comments (clear)

  1. 3rd Party Responsibility? by WrongSizeGlass · · Score: 5, Interesting

    [disclaimer: Mac & iPhone user]

    The responsibility is on 3rd party app developers? Hogwash! If Apple wants full control of the app development & distribution process then they get the full responsibility for the security too. Yes, 3rd party apps need to be smart and act in the best interest of the user but Apple's stranglehold of the environment puts this squarely on their shoulders. Fix it Apple, plain and simple.

    1. Re:3rd Party Responsibility? by Bigjeff5 · · Score: 4, Insightful

      Here is how it will go down:

      First, Apple say this is an app issue, and app vendors need to fix it. They will dig their heals in and effectively say "screw you" to all their loyal customers.

      Then, in the next iOS update (or the one after, if the next update is scheduled to be too soon) there will suddenly be a prompt for launching applications via registered URL handlers, possibly with some hype about how Apple is looking out for you, but not necessarily.

      When confronted about the dichotomy between their two positions, Steve Jobs will simply reply "Apple is always concerned about the security of our customers, of course we would want to protect them from these kinds malicious attacks." All the while giving the reporter a befuddled look, as if to suggest the reporter is crazy for even asking such a stupid question.

      --
      Security is mostly a superstition... Avoiding danger is no safer in the long run than outright exposure. - Helen Keller
    2. Re:3rd Party Responsibility? by jo_ham · · Score: 3, Funny

      And in the update tech document, that catalogs the changes, it will give a description of the problem, what has been done to fix it and then "credit to Nitesh Dhanjani for reporting this issue". You know, like all the other security update knowledgebase articles on Apple's site.

    3. Re:3rd Party Responsibility? by Culture20 · · Score: 3, Insightful

      Yeah, the fix should be simple. Add this to the list of requirements for apps and don't approve any that don't implement it.

      The fix _IS_ simple. "This website is attempting to open XYZ.app. [ ]Allow? [X]Deny?"

    4. Re:3rd Party Responsibility? by GameboyRMH · · Score: 4, Insightful

      So the curated iOS apps really then are the same as any other "Open" platform apps that user can download and install themselves. The only difference of course is that Apple get their 30% and are in a better position to control their platform - all nicely in the name of the user benefits!

      You beat me to it, the "quality, security and support" arguments for curated app stores are DEAD now. Quality was a stillborn argument, security was quickly disproven, and now this support is the last nail in the coffin. When it came time for Apple to put their money where their mouth is, they offered a level of support that would only be acceptable for an amateur FOSS project (basically none, much like the weeks when the PDF exploit used by jailbreakme.com went unpatched) - except you can't even fix it yourself. And you're paying game console prices.

      --
      "When information is power, privacy is freedom" - Jah-Wren Ryel
    5. Re:3rd Party Responsibility? by bh_doc · · Score: 3, Funny

      "You are coming to a sad realization, Cancel or Allow?"

      I know I've heard that somewhere, but for the life of me I just can't remember where...

    6. Re:3rd Party Responsibility? by jhoegl · · Score: 2, Insightful

      It is the app causing the problem, but Apple allowed the app.

      Therefore, a curse on both houses.

    7. Re:3rd Party Responsibility? by FilthCatcher · · Score: 2, Insightful

      Umm i think that's kind-of how it already is..
      I believe iOS doesn't come by default with a url-binding for skype: it gets setup when skype installs.

      you're sugesting a change from:
      no binding -> skype install -> binding added
      to:
      no binding -> skype install -> locked-by-default binding -> skype override -> unlocked binding

      Straight away the skype install would change to both add and unlock and you're back to exactly the same position as before.

      As much as it pains me to say so I'm with Apple on ths one: The app install created a url binding. It's then up to the app to handle those urls sensibly.

    8. Re:3rd Party Responsibility? by tbird81 · · Score: 3, Insightful

      Here is how it will go down:

      First, Apple say this is an app issue, and app vendors need to fix it. They will dig their heals in and effectively say "screw you" to all their loyal customers.

      Then, in the next iOS update (or the one after, if the next update is scheduled to be too soon) there will suddenly be a prompt for launching applications via registered URL handlers, possibly with some hype about how Apple is looking out for you, but not necessarily.

      When confronted about the dichotomy between their two positions, Steve Jobs will simply reply "Apple is always concerned about the security of our customers, of course we would want to protect them from these kinds malicious attacks." All the while giving the reporter a befuddled look, as if to suggest the reporter is crazy for even asking such a stupid question.

      After this, Apple users on Slashdot will defend Steve Jobs. They'll state this can happen on any operating system, and that it is not Apple's responsibility. Then they're say how they are immune to viruses. They'll rejoice when they get their new version of Safari, which is limited to Apple's pre-approved sites.

      Then their call will cut out, their screen will break, and their data will disappear. Steve Jobs will tell them that they are "holding it wrong". Apple fans will then bend over and take this abuse, at a personal cost of $4000.

    9. Re:3rd Party Responsibility? by ConfusedVorlon · · Score: 2

      that's how it is at the moment

      by default, you cannot launch an ios app with a url handler.

      the app has to register a url scheme, and include code for handling the call. Apple is pretty pointed in the documentation that you need to consider carefully what might be incoming and treat it with suspicion.

      this is a good capability - Skype are just idiots.

    10. Re:3rd Party Responsibility? by Bogtha · · Score: 4, Informative

      In case anybody was wondering about that documentation, Apple specifically warn against this in the documentation for this API:

      Be sure to validate the input you get from URLs passed to your application; see "Validating Input" in Secure Coding Guide to find out how to avoid problems related to URL handling.

      And in that Secure Coding Guide, you will read things like this:

      Any time your program accepts input from an uncontrolled source, there is a potential for a user to pass in data that does not conform to your expectations. If you don't validate the input, it might cause problems ranging from program crashes to allowing an attacker to execute his own code.

      If your application has registered a URL scheme, you have to be careful about how you process commands sent to your application through the URL string. Whether you make the commands public or not, hackers will try sending commands to your application. If, for example, you provide a link or links to launch your application from your web site, hackers will look to see what commands you're sending and will try every variation on those commands they can think of. You must be prepared to handle, or to filter out, any commands that can be sent to your application, not only those commands that you would like to receive.

      --
      Bogtha Bogtha Bogtha
    11. Re:3rd Party Responsibility? by GameboyRMH · · Score: 2, Informative

      You wish...Search for the list of security in Android, it is on here somewhere. Many of them are months (not the 2 weeks of the PDF exploit on iOS) and at least 5 of them are more serious, a couple can be exploited remotely.

      Ouch! RIP strawman.

      Your "interesting" post only pointed out one iOS security flaw, the "PDF" exploit and it still required the user to [do] someting.

      Yeah like follow a link. Very remote chance of that happening, I know.

      Your outrage over the URL handlers shows you know nothing at all about application development, url handlers, iOS, iPhones, web browsers, or application security.

      LOL yeah I know nothing about those because I think a trivial-to-implement, HTML-based drive-by call activation exploit is a big issue. I'm totally blowing it out of proportion. This was a gigantic fail on Skype's part and Apple shares some blame too. Oh sorry, my ignorance is showing, I WUV APPLE!

      I love your signature line touting the most completely insecure mobile environment available today.

      The only thing insecure about it is that it doesn't protect stupid and determined users from hurting themselves. I welcome this "insecurity."

      --
      "When information is power, privacy is freedom" - Jah-Wren Ryel
  2. Uhm... by larpon · · Score: 4, Informative

    Anyone using the Skype public API can make apps that call someone.
    Kopete IM for KDE is the first that pops to my mind.

  3. Re:Once again proving... by MrEricSir · · Score: 2, Insightful

    Right, because this is clearly a security flaw you'll only find in Apple products.

    --
    There's no -1 for "I don't get it."
  4. Re:Once again proving... by Anonymous Coward · · Score: 4, Insightful

    Whether or not a similar problem exists in competing products is beside the point. Nobody pretends competing products are implicitly secure straight out of the box. Apple fans pretend exactly that.

    Or do you think that it's OK that your walled garden iOS product can make calls (potentially to expensive toll numbers) without any prior warning, simply by visiting a malicious website -- and that Apple doesn't think that's a problem?

  5. Re:Once again proving... by countSudoku() · · Score: 2, Insightful

    I was all set to shout; "See!? This is where Android rules!" Then, I thought better of that idiotic statement. Android will have this same issue and more of the same data hijacking apps that every system will contend with. Personally, I can think of worse things than a random skype call. Come on, Saddos! This is how you meet new people in the Golden Age of Social Networking. Get with the program as say hello to your new random friend!

    --
    This is the NSA, we're gonna geet U h@x0r5! Also, what is a h@x0r5?
  6. Is this *really* only an Apple bug?? by bradgoodman · · Score: 5, Insightful

    As an iOS developer - I kind of agree with Apple. I write apps which register URL handlers - and when one clicks on on - I make the *user* validate that this is what they really want to do. The same kind of exploits could be done on PCs - if you had a URL handler - like "SSH" which blindly allowed a third-party URL-click to launch SSH on your PC and log into a site - or even to do the same thing with *skype* URLs. Has anyone verified if these kind of behaviors would or would not happen on a PC or Linux machine?

    1. Re:Is this *really* only an Apple bug?? by je+ne+sais+quoi · · Score: 4, Insightful

      I'm conflicted. On one hand, Skype is sort of known for getting hacked (having had my "Skype account" hacked and a bunch of money charged to my credit card even though I didn't have and never did have a Skype account. It was a pain to sort out but as identity theft goes, not as bad as it could have been.) On the other hand, I seem to recall that a big complaint of Windows was that it was too easy for someone to make use of a security flaw in an application because all the applications ran under administrator privileges. This smells the same way, too easy to "one-click" your way to identity theft.

      --
      Gentlemen! You can't fight in here, this is the war room!
    2. Re:Is this *really* only an Apple bug?? by emt377 · · Score: 2, Insightful

      "Kind of"? Clearly the helper app has to do any validation and authentication since it has domain specific knowledge. How would the browser know to confirm, say "do you wish to call 1-900-xxx, this will incur a charge?" or "Upgrade CrapWare from 1.x to 2.3 for $19.99?" All the browser can ask is "really run helper App A?" Which may not mean anything to a user and they have no idea whether they want to or not. The fact that anyone can create a link or content that causes Skype.app to make a call really is a problem with Skype, not the browser...

    3. Re:Is this *really* only an Apple bug?? by Anonymous Coward · · Score: 2, Informative

      I'm conflicted. On one hand, Skype is sort of known for getting hacked (having had my "Skype account" hacked and a bunch of money charged to my credit card even though I didn't have and never did have a Skype account. It was a pain to sort out but as identity theft goes, not as bad as it could have been.)

      So what you're saying is, your credit card number was stolen/skimmed and someone registered a Skype account with it to run up charges?

      I fail to see how this is a Skype issue. The same thing could happen with Amazon or any other business that accepts credit cards over the Internet.

    4. Re:Is this *really* only an Apple bug?? by XMode · · Score: 2, Informative

      Well you ARE telling it its a file... ssh://example.com would be an example of an ssh URL...

    5. Re:Is this *really* only an Apple bug?? by jrumney · · Score: 4, Informative

      As an iOS developer - I kind of agree with Apple. I write apps which register URL handlers - and when one clicks on on - I make the *user* validate that this is what they really want to do.

      If I write a seemingly harmless application that registers a url handler for the phish: protocol, then I agree that it is the application that is at fault, but I do expect the OS to protect users from this. Android pops up a dialog asking which application you want to handle the protocol - even when there is only one choice, and the user has to explicitly tick the "always use this application" box to skip that confirmation step.

    6. Re:Is this *really* only an Apple bug?? by moonbender · · Score: 2, Informative

      When I run a callto: URL in my Firefox/Linux, I get a dialog asking me if I want to open gnomemeeting. It's not opened by default, although there is a checkbox to do that for future invocations.

      --
      Switch back to Slashdot's D1 system.
    7. Re:Is this *really* only an Apple bug?? by enoz · · Score: 2, Informative

      Historically that used to work on windows. You could launch executables with the browser.

      I'm pretty sure only Internet Explorer behaved badly in that way.

    8. Re:Is this *really* only an Apple bug?? by tlhIngan · · Score: 2, Interesting

      As an iOS developer - I kind of agree with Apple. I write apps which register URL handlers - and when one clicks on on - I make the *user* validate that this is what they really want to do. The same kind of exploits could be done on PCs - if you had a URL handler - like "SSH" which blindly allowed a third-party URL-click to launch SSH on your PC and log into a site - or even to do the same thing with *skype* URLs. Has anyone verified if these kind of behaviors would or would not happen on a PC or Linux machine?

      Already happened. With Firefox, at that, years ago.

      http://secunia.com/advisories/25984

      Firefox registered a "firefoxurl://" handler, which can call Firefox with arbitrary command line arguments, including malicious javascript.

      Apple can't validate every URL that passes through - if they had a magic library that could ensure every URL is completely valid in every context from now to forever, they would have that patented and licensed to everyone. So in the end, the application handling the URL must validate its arguments.

      The question is - does this affect the PC clients as well? Does Skype on Windows also have the same problem? Or does it not register any URL handlers so you can't just click a Skype link?

  7. Re:Apple should handle but it's Skype's fault by Bigjeff5 · · Score: 3, Insightful

    It's not just Skype, that was just an example.

    ANY app can be opened this way.

    It's definitely Apple's problem. Skype could have been really awesome fixed the problem on their end, but that would not have solved the problem for the 200,000 other apps that can be launched this way.

    --
    Security is mostly a superstition... Avoiding danger is no safer in the long run than outright exposure. - Helen Keller
  8. Why are you wanting to close this down generally? by SuperKendall · · Score: 2, Insightful

    It's odd to me that so many people on Slashdot who complain about platform openness on the iPhone, are suddenly eager to close down a channel of functionality.

    In reality, you want any app to be able to use a defined URL handler path without interdiction - imagine a flow of photo editing apps where you use two or three, it's already slightly jarring to switch apps, why would you want a system dialog in the middle of that flow for each call?

    It really does make a lot more sense for some application that has a protected resource it allows custom URL handlers to activate, to place protection in front of that to be confirmed by the user - Apple does it with the call mechanism, any app that makes a call does prompt the user to confirm a call is desired. So Skype should in fact follow suit, but we should harm the flow of data between other applications in the system just because one app developer is a bit weaker on security.

    Can you really call pay numbers via skype anyway? I would have thought that would cause skype to verify you really wanted to make a paid call, regardless of the number coming in via an outside source or the user typing it in... if you can't make a call on skype that costs anything, then securing it seems kind of moot since there'd be little point in an attack.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  9. This just in by blueg3 · · Score: 5, Insightful

    URL handlers handle URLs. Geeks are shocked.

  10. Re:Apple should handle but it's Skype's fault by atchijov · · Score: 2, Informative

    First of all, please check your facts before making such a broad assumptions. Application need to be configured in particular way in order to be invocable via URL in iOS. I will be surprised if 1 in 1000 applications in Apple iTunes App Store using this functionality. Secondary, It is 100% application responsibility to act "properly" when invoked via URL. All iOS does is firing app and informing it that it was invoked via URL. Skype choose to start call without getting confirmation from the user. Too bad for Skype.

  11. Re:Once again proving... by Zak3056 · · Score: 4, Insightful

    I really fail to see how it is Apples fault that a third part App does something.

    When you require that EVERY application that can run on your platform be approved by your personnel for sale, I'd say that you bear some (though by no means all) responsibility for the application's behavior.

    --
    What part of "shall not be infringed" is so hard to understand?
  12. Re:Once again proving... by iluvcapra · · Score: 2, Insightful

    If you require all URL schemes novel to the system to be validated by the user before they launch the other application, then you just end up with the "Are you sure you want to do that?" problem we all loved on Vista. Some application-defined URL schemes trigger Really Big Things (like Skype calls), and some just launch the app, it's up to the developer who decided to invented the scheme to actually describe what the scheme does. It's obviously impossible for the host OS to test an arbitrary URL to see if it "does something bad" or not, since that would require the OS solving the halting problem on the target app for the given input.

    Of course you could point out that this is a side-effect of the fact that URLs are pretty much the ONLY way to do application-level IPC on iOS. Since URLs are highly containable, don't let apps share memory, are rigorously parseable, etc. they present a very thin vector for making Bad Things Happen, compared to anything else.

    --
    Don't blame me, I voted for Baltar.
  13. Browser cannot run arbitrary applications by SuperKendall · · Score: 2, Insightful

    No I don't. In fact, I just want a web browser that's a web browser, and is completely lacking the ability to run arbitrary programs on the host machine.

    And that's what you have. The web browser can only launch apps where the app itself defines EXACTLY the URL schemes that it accepts, the app can only be launched if you use a link of the form the application expects - and then the application will be launched into a method explicitly built to handle that launch path.

    The URL scheme is a great way for applications to transfer data between themselves, as in the example I gave where a photo can be transferred between a few different photo editing applications. We have only one instance here where THEORETICALLY it could be a problem that a web link can trigger a skype call, even though no-one has yet laid out the path where that costs the user any money without interdiction (does the Skype app really let you call pay numbers that are entered even by hand? That seems like an issue by itself).

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  14. Re:Once again proving... by shutdown+-p+now · · Score: 2, Interesting

    I really fail to see how it is Apples fault that a third part App does something.

    The whole point of the "walled garden" approach - its ultimate benefit - is that apps that "do something nasty" are not admitted, and those which are, are forced to behave.

    That said, TFS really makes it sound it much more scary than it really is - if it could somehow launch Skype in background and make a call, that would be a security issue. This? Skype actually pops up and starts dialing, so the user can break the call right away. And the user will be watching, because you have to have him there to trigger your "exploit" by navigating to the page with the iframe.

    I wonder, will it work with a JS timer reloading iframe to the required URL while the phone is locked? It's about the only way I see of actually exploiting this... have the user navigate to some seemingly legit page & stay there, and then have it trigger a bit later. But I very much doubt it would work - does JavaScript continue to execute in Safari when you switch away from it or lock the phone?

  15. Re:Apple should handle but it's Skype's fault by wkcole · · Score: 5, Informative

    It's not just Skype, that was just an example.

    ANY app can be opened this way.

    That is false. Most apps do not register URL handlers.

    Should the small minority of apps that register URL handlers be trusting that when they get a URL tossed at them, the user knows and approves of the app being opened for that purpose? Of course not. That would be inconsistent with how iOS is documented to operate. Safari or any other app sending an OpenURL message has no way to know whether a particular URL scheme has a potentially risky handler on the other end. An app that receives an HandleOpenURL message knows what its URL scheme does and knows whether handling a particular URL might be risky. Some developers seem to be making use of the opacity of that mechanism.

    It's definitely Apple's problem. Skype could have been really awesome fixed the problem on their end, but that would not have solved the problem for the 200,000 other apps that can be launched this way.

    Where do you get that number? The biggest list of registered URL schemes I can find seems to have about 140 listed ("seems" = a crapulous website showing ~10 per page, 14 pages.) Most apps would have no need to register an URL scheme.

    Skype dropped the ball here. Their app is doing something potentially costly in response to a system message that Skype knows the user might not have knowingly initiated. The app should be asking the user for authorization before initiating the call. Doing that would be more accurately described as "minimally competent" than "really awesome" unless you consider elementary security awareness "really awesome."

    I don't get me wrong. I'm not saying that Apple shouldn't fix the design issue here, they should. But this is a UI design problem more than it is really a security problem. A wisely designed app that needs this functionality can ask for user authorization, but only after it has been launched and put in the foreground. Apple should generalize the integration they use in their own apps to a system-level feature that asks the user for authorization before switching apps whenever an OpenURL is sent that would switch apps. Let apps request quiet switching in their Info.plist and let users toggle that on a per-scheme basis. In the interim, they should go through the app store and remove every app that registers an URL scheme which it handles to do something risky without user authorization.

  16. Re:Once again proving... by Serious+Callers+Only · · Score: 2

    Or do you think that it's OK that your walled garden iOS product can make calls (potentially to expensive toll numbers) without any prior warning, simply by visiting a malicious website -- and that Apple doesn't think that's a problem?

    Actually, it can't make real phone calls, if you try to make a call with a URL via the phone app, it does the right thing and asks the user first. This is a vulnerability in the Skype app, which should not be initiating potentially expensive actions without prompting the user first under any circumstances.

    Imagine a similar case where an app allows other apps to trigger a purchase within it using some proprietary URL scheme, how would Apple sensibly prompt the user when they don't even know what the scheme does and it could change at any time? Users want to be told:

    'This action will do x, do you wish to proceed?'

    not

    'Should the URL sheme://foobar/%202890%56745 be opened in application x'

    That leaves you open to all sorts of social engineering attempts with obfuscated URLs for a start.

    It's up to the application to decide if actions should happen without prompting the user or if the user should be asked first, and in this particular case I think Apple are completely correct to say that responsibility lies with Skype.

  17. Re:Apple should handle but it's Skype's fault by dzfoo · · Score: 3, Interesting

    don't get me wrong. I'm not saying that Apple shouldn't fix the design issue here, they should. But this is a UI design problem more than it is really a security problem. A wisely designed app that needs this functionality can ask for user authorization, but only after it has been launched and put in the foreground. Apple should generalize the integration they use in their own apps to a system-level feature that asks the user for authorization before switching apps whenever an OpenURL is sent that would switch apps. Let apps request quiet switching in their Info.plist and let users toggle that on a per-scheme basis. In the interim, they should go through the app store and remove every app that registers an URL scheme which it handles to do something risky without user authorization.

    So, in your recommended solution, the user would click a "skype://" link and Safari would prompt him with a necessarily generic message such as "You are about to launch Skype, are you sure?" And when the user confirms this, then Skype would launch and prompt the user with a domain-specific message such as "Call: 1-900-xxx-xxxx - This call may incur additional costs. Are you sure?"

    Two clicks for the price of one. Yes, that's the kind of Apple human-computer interface we all know and love.

    No, this is not a iOS security vulnerability. Safari, nor the operating system, has any way to know whether the resource offered to the external application is exploitable. Except of course when the external application is provided by the OS itself or by an application included in the built-in suite; such as the example of the "tel://" protocol scheme.

    For the confirmation message to be meaningful, it must be presented by the target application--which has intimate domain and context knowledge of the resource. That, or Apple would need to keep track of the context and semantics of each and every protocol scheme and how they can be used.

    However, this last one still would not be perfect, for each application is free to use the submitted resource in any way it wants to. There is nothing that prevents Skype from receiving a "skype://" URL and deciding to, say, delete your Skype address book, or initiate an HTTP download.

            -dZ.

    --
    Carol vs. Ghost
    ...Can you save Christmas?