Ryan Pickren encontró la manera de acceder a la cámara y el micrófono de un Iphone o Macbook tras pulsar en un enlace especialmente diseñado. En el proceso de la investigación encontró siete vulnerabilidades en el navegador Safari y utiliza tres de las siete para conseguir su propósito. Tras reportar los fallos y ayudar a repararlos recibió la recompensa de 75 000 dólares.
En su página web explica minuciosamente los pasos que realizó para conseguir acceder a la cámara de iOS/macOS. La explotación de esta vulnerabilidad permitía a los atacantes secuestrar la cámara o el micrófono desde un sitio web conocido a partir de los enlaces publicitarios. Esta vulnerabilidad permitiría a una web maliciosa enmascararse como web de confianza al acceder desde Safari.
Cuando una aplicación de iOS quiere acceder a la cámara, el usuario tiene que aceptar los permisos que indica que dicha app va a utilizarla. Aunque esta regla no se cumple con las aplicaciones propias del sistema, como Safari.
El navegador Safari otorga permisos de cámara, micrófono o localización vinculados a sitios web, Esto permite que sitios como Zoom o Skype utilicen la cámara o el micro sin que el usuario tenga que aceptar los permisos cada vez que accede. Es posible comprobar los sitios web de confianza en Safari -> Preferences -> Websites.
La cadena de vulnerabilidades explotada por el investigador hace creer a los dispositivos de Apple que un sitio malicioso es de confianza, aprovechando la manera en la que Safari analiza las URIs, administra el ‘origin’ e inicializa Secure Contexts. Si se consigue resolver esos tres problemas, el sitio malicioso puede ejecutar código JavaScript, con el que podrá acceder, entre otras opciones, a la cámara del usuario sin la necesidad de alertar a la víctima para que le conceda permiso.
Pickren resume su exploit de la siguiente forma: «Mi sitio malicioso utiliza una ‘URL data‘ para generar otra ‘URL blob‘ y utilizar la API Location.replace() para navegar por ella. Eso engaña a Safari, devolviéndome un ‘origin’ mal formado (CVE-2020-3864). Con este ‘origin’ utilicé la API window.history para cambiar mi URL por ‘blob://skype.com‘. Una vez hecho esto, convertí mi ‘origin’ en null para engañar de nuevo a Safari haciéndole creer que estaba en un ‘Secure context‘ (CVE-2020-3865). Teniendo en cuenta que Safari previamente ignoró el esquema de la URL cuando se aplicaron los permisos de la web (CVE-2020-3852), Pude aprovechar todos los permisos que la víctima otorgó a skype.com.»
A pesar de que utiliza tres fallos de seguridad (CVE-2020-3864, CVE-2020-3865 y CVE-2020-3852) para conseguir su objetivo, Pickren descubrió otros cuatro en el proceso de investigación, catalogados como CVE-2020-3885, CVE-2020-3887, CVE -2020-9784 y CVE-2020-9787.
Apple arregló la mayoría de los fallos a finales de enero y parcheó el resto el mes pasado.