Entras en tu aplicación favorita, te aparece un enlace para que vincules tu cuenta con Dropbox para tener acceso a tus archivos, tú das permiso y las dos aplicaciones hacen todo automáticamente sin que tu intervengas. Parece algo perfecto y sin ningún problema ¿verdad? Pues en realidad esta simple acción que realizan miles de aplicaciones de iOS es un grave problema de seguridad y privacidad. Todo reside en las URL Scheme.
Una URL Scheme (o esquema de URL) es, explicándolo directamente, un tipo de URL que se puede implantar en diversos sistemas y que en iOS es personalizable por las aplicaciones como haya decidido el desarrollador utilizarlas. Hay algunas, digamos, estándar como tel:// que nos permiten llamar a teléfonos desde cualquier aplicación, pero hay otras como tweetbot:// o byword:// que realizan únicamente acciones relacionadas con sendas aplicaciones. Ambas, tanto las estándar como las personalizadas, presentan en iOS graves problemas de seguridad y privacidad
El problema de la no interacción del usuario
Para comprender cómo una simple "personalización" de las URL puede presentar un problema de seguridad y privacidad grave tan sólo tenemos que hacer un ejercicio de imaginación. Pensemos que estamos trabajando en un documento en Google Docs compartido y un compañero escribe una URL, cuando la pulsamos en nuestro iPhone o iPad, la aplicación de Google Docs nos enseña la web en su visor personal y automáticamente nos hace una llamada a un número desconocido de tarificación adicional, el cual nos coge en el momento y nos empieza a cobrar.
¿Cómo ha ocurrido esto? Pues de una manera muy simple: la URL que escribió nuestro compañero en Google Docs contenía un script que ejecutaba automáticamente la URL tel://XXXX siendo XXXX el número de tarificación adicional. De esta manera iOS entendió que la web quería llamar a ese número y realizó la acción sin preguntarnos y terminando siendo timados de arriba a abajo. Este fallo de seguridad no sólo ocurre con las llamadas, si no que gracias a la posibilidad de que cada aplicación tenga sus propias URL Scheme se pueden hacer acciones tales como seguir a gente en Twitter o sobreescribir archivos sin que el usuario se de cuenta, tan sólo sabiendo como funciona la URL Scheme de cada aplicación.
De quién es la culpa y cómo solucionarlo

Muchos estaréis pensando ahora mismo que la culpa es de Apple cuando es todo lo contrario. En los manuales de programación para iOS Apple especifica claramente que iOS no avisa a la hora de "ejecutar" las URL Scheme, ya que es labor del desarrollador implantar estos avisos en los casos que lo consideren oportuno. Debido a esto, tienen que ser los propios dueños de las aplicaciones los que corrijan este error, y entre ellos están nombres tan grandes como Dropbox, Google+ y Facebook.
¿Cómo se puede solucionar? Por parte del usuario no hay más manera que vigilar bien los enlaces que pulsamos en iOS. Como ya dijimos, la solución tiene que venir por parte de los desarrolladores, implantando un aviso en estos pasos intermedios que ahora se hacen automáticamente cuando no deberían.
Si tenéis curiosidad por saber hasta qué niveles llega este fallo de seguridad y privacidad, Guillaume K. Ross realizó una interesante charla hace unos días en el BSidesLV 2014 en la que demuestra cómo utilizan algunas aplicaciones las URL Scheme y cómo se pueden utilizar para hacer el mal. Está en inglés pero las imágenes hablan por sí solas
Más información | Algorithm.dk, Iron Geek
Foto | NEC
Ver 23 comentarios
23 comentarios
manucorporat
La responsabilidad de que acciones pueden o no ser realizadas por un URL shema si que es responsabilidad pero el hecho de que se pueda hacer una llamada es un problema de Apple.
Aunque el desarrollador mostrase algún tipo de alerta no se solucionaría nada, ya que la URL directa que se postea en el script no es tel:// si no http://, es decir una pagina web normal. El desarrollador entonces muestra un UIWebView y este usando el motor javascript de APPLE (nitro), ejecuta dicho script que SIMULA que alguien pulsa la pantalla, pulsando así el enlace a tel://.
La solución pasa porque modificar el motor javascript para detectar cuando un evento viene directamente de la pantalla o cuando es un evento fake generado por el propio script javascript.
Además cuando el schema de la URL a seguir no sea http:// o https:// el motor javascript DE APPLE! debería mostrar la alerta. Ya que solo desde el stack del motor es posible detectar este tipo de interacciones.
Esto es parecido a un error de seguridad que consistía en que el propio JS escribiese letras en un campo de texto y el propio autocompletador rellenaba la contraseña. Este error se soluciono evitando que el autocompletado reaccionase a cambios que venían del script JS.
Definitivamente no es un problema de los desarrolladores.
98979
Si alguien buscaba la definicion del concepto de "echar balones fuera" aqui la tiene. Apple es consciente de que existe esta vulnerabilidad. Apple tiene la posibilidad de añadir una ventana de "Seguir este enlace abrira la aplicacion xxxxxx. Aceptar/Cancelar" y prefiere culpar a los desarrolladores.
oscarsanzlr
la culpa no es de Apple, es de los desarrolladores
jé
macnaxito
Lo que tienen de fallo de seguridad lo tienen de comodidad y rapidez. Eso es lo malo.
Por ejemplo, al abrir un enlace estilo: open.spotify.xxxxxx se abre Spotify y empieza a sonar la canción o lista que has compartido. Y eso es una comodidad. Otro ejemplo que se me viene es el enlace que me proporciona Unlocator para actualizar mi IP rápidamente. Simplemente le das y ya.
Está claro que se pueden usar para hacer el mal. Como dice Apple, queda de los desarrolladores. Y no lo se a ciencia cierta, pero me imagino que si Apple es tan liberal en una cosa así (que por norma le gusta controlar) en Android y Windows Phone tampoco estarán protegidos de esto. ¿No?
helkai
Eso de que la culpa no es de Apple, es relativo.
Esta muy bien que digan en la documentació que es cosa del desarrollador el tema de los scritp, pero no quita que se deban tomar medidas para evitar este tipo de problemas.
Tambien es responsabilidad de los padres que nuestros hijos no compren lo que no deben en la store, o que vean contenidos inapropiados. Pero no por ello deja de tener ciertas responsabilidades Apple para evitar que haya problemas, equivocaciones o malas intenciones.
Quieren tener un sistema cerrado y controlado, pero eso ha de ser tanto para lo que les interesa como para lo que no. No basta con comentar el posible problema en la documentación.
demasis82
La culpa no es del iPhone, es que lo coges mal.
Dicho esto, si yo doy permiso a una aplicación para que se "conecte" con otra, es por que me fío de ambas empresas que han desarrollado la App.
Pero siempre se aprende algo nuevo.
Amhairghin
La solución esta tanto en el tejado de Apple como en la de los desarrolladores. De Apple porque la primera vez que se ejecuta una acción que venga por pulsar sobre un enlace, el SO debería de avisarnos indicando que va a abrir la aplicación X y que como queremos que se comporte (hacer esto siempre o preguntar de cada vez).
Por otro lado, en el tejado de los desarrolladores está el no hacer las operaciones "automágicamente", es decir, si un enlace envía a Tweeter un texto a publicar, que la aplicación de Tweeter me pida confirmación ANTES de enviarlo, e, incluso, me permita modificar ese mensaje.
Por otro lado, en cuanto al ejemplo que pone el artículo, ese esta TOTALMENTE en el tejado de Apple, ya que ninguna aplicación debería poder acceder al dialer y realizar una llamada sin preguntar al usuario. Como mucho aparecer el número marcado para que le puedas dar a llamar.
Vamos, que la solución es bastante sencilla de implementar, otra cosa es que haya voluntad de hacerlo.
calitb
De qué están hablando?. si hay un link con tel://#### y le das clic te va a preguntar si quieres llamar, no es algo automático. No hay fallo de parte de apple en esto.
joshscofield
Claro, la culpa al final es del último mono.. los desarrolladores.
Es un rollo que el móvil nos esté pidiendo permiso siempre para realizar ciertas acciones, pero sería lo más seguro.
juangarcia
Sino las tuviéramos, diríamos que ios esta súper cerrado porque no habría interacción entre apps. En cuanto a que no es culpa de Apple? Pues hombre decir dos cosas:
1- estas URL schemes, no sólo son accesibles desde una app de un programador, sino que lo son a nivel de sistema, Apple tampoco implememta ningún aviso en Safari, Mail o notas.
2- la mayor cantidad de spam que he sufrido ha sido en ios y con Safari, hubo una época, donde la mayoría de webs tenían publicidad que hacia saltar la App de la AppStore con la dichosa aplicación a promocionar. Es decir 2 programas de Apple.
kenri
Decir que en URL Scheme hay un problema de seguridad es como decir que los autos son un problema de seguridad contra la vida. Un auto puede atropellar a una persona y matarla, pero no por eso se considera un peligro; El que tiene la culpa en todo caso es el conductor y no el que emite las licencias (¿cómo saber que alguien va a matar a una persona conduciendo?). Es lo mismo con las URL Scheme, el desarrollador que las incluye en su app debe aplicar una capa de seguridad si quiere que no cualquier pueda llamar a una función de su aplicación; Ustedes dicen que con esto se puede "seguir a gente en Twitter" sin que uno se entere pero depende de Twitter que alguien pueda hacer eso o no. Las únicas áreas donde Apple es culpable es en los servicios del sistema, hacer una llamada por ejemplo.
fernando.lozanoromer
Culpar a Apple de esto es como culpar a BMW o Mercedes de los que van como locos por la carretera.