Deep link hijacking
El deep link hijacking es la interceptación de un enlace destinado a una aplicación móvil por parte de otra aplicación que ha registrado el mismo manejador. Cuando el enlace lleva un código de autorización o un token, quien lo intercepta se lo queda, y así se toma el control de una cuenta en un dispositivo sin que haya ningún fallo en el servidor.
La vulnerabilidad está en el estilo antiguo de enlace, en el que una aplicación reclama un esquema propio con solo declararlo. Nada impide que una segunda aplicación declare el mismo, y cuál gana cuando las dos están instaladas no es algo que la aplicación legítima pueda controlar. Los enlaces verificados, que atan una aplicación a un dominio sobre el que el desarrollador demuestra control publicando un fichero en ese dominio, eliminan la ambigüedad, y son la única forma que debería llevar nada sensible.
La cadena que importa es OAuth 2.0 en móvil. Si el código de autorización se devuelve a un esquema propio, una aplicación maliciosa que haya registrado ese mismo esquema recibe el código y lo canjea por tokens. La defensa es PKCE, definido en el RFC 7636, que ata el código a un secreto que generó la aplicación que hace la petición, de forma que un código robado no lo puede canjear nadie más. Es práctica obligada para aplicaciones nativas y sigue faltando en integraciones que probamos.
Enumerar los manejadores es rápido: los esquemas y dominios declarados están en el manifiesto de la aplicación, y probar cuáles aceptan parámetros desde otra aplicación es cuestión de mandárselos. Lo que buscamos es cualquier manejador que ejecute una acción o acepte una credencial sin más comprobaciones, y el hallazgo se escribe como toma de control de la cuenta cuando la cadena se completa. Es un punto fijo de las pruebas móviles donde se enumera cada manejador de enlaces registrado.