Solución para la vulnerabilidad de usurpación de esquema de intent

Esta información está dirigida a desarrolladores cuyas apps contengan la vulnerabilidad de usurpación de esquema de intent.

Novedades

Una o más de tus apps contienen un problema de usurpación de intent, lo que puede permitir que redes y sitios web maliciosos accedan a componentes privados de la app. Consulta la notificación en tu cuenta de Play ConsoleDespués de los plazos que aparecen en Play Console, es posible que se eliminen de Google Play todas las apps que contengan vulnerabilidades de seguridad no resueltas.

Acción necesaria

  1. Accede a tu cuenta de Play Console y desplázate a la sección "Alertas" para ver qué apps están afectadas, así como los plazos para resolver los problemas.

  2. Actualiza las apps afectadas. Para ello, sigue los pasos que se destacan a continuación.

  3. Envía las versiones actualizadas de las apps afectadas.

Una vez que las hayas reenviado, revisaremos tu app nuevamente. Este proceso puede demorar varias horas. Si la app pasa la revisión y se publica sin problemas, no se requiere ninguna otra acción. Si la app no pasa la revisión, no se publicará la nueva versión, y recibirás una notificación por correo electrónico.

Detalles adicionales

Los componentes WebView que visiten contenido web que no sea de confianza, analicen vínculos intent:// con Intent.parseUri y envíen esos intents mediante startActivity serán vulnerables a la usurpación de esquema de intent. El contenido web malicioso puede engañar a los WebViews para que envíen intents arbitrarios a componentes de apps privados. Esto puede comprometer a la app y podría producirse, por ejemplo, el robo de datos privados de la app que manipulan esos componentes. Ten en cuenta que el contenido web que no es de confianza incluye contenido de dominios de confianza que se carga a través de HTTP.

Te recomendamos que evites esta vulnerabilidad de alguna de las siguientes maneras:

Opción 1: Asegúrate de que los WebViews no puedan enviar intents arbitrarios

Las apps pueden limitar los intents creados con Intent.parseUri para que solo se envíen como intents implícitos a los componentes con filtros de intent BROWSABLE mediante el siguiente código:

     // convert Intent scheme URL to Intent object
  Intent intent = Intent.parseUri(url);
  // forbid launching activities without BROWSABLE category
  intent.addCategory("android.intent.category.BROWSABLE");
  // forbid explicit call
  intent.setComponent(null);
  // forbid Intent with selector Intent
  intent.setSelector(null);
  // start the activity by the Intent
  view.getContext().startActivity(intent, -1);

Opción 2: Asegúrate de que los WebViews afectados no carguen contenido web que no sea de confianza

Si un WebView necesita analizar URL de esquema intent://, asegúrate de que no cargue contenido web que no sea de confianza, incluido el que se cargue en una conexión no encriptada. Los desarrolladores pueden configurar android:usesCleartextTraffic como "false" en el manifiesto o una configuración de seguridad de la red que no permita el tráfico HTTP. También puedes asegurarte de que los componentes WebView afectados no carguen ninguna URL con esquemas HTTP mediante loadUrl.

Recomendamos que los desarrolladores se aseguren de que los WebViews afectados no carguen URL sin restricciones de fuentes que no sean de confianza (p. ej., direcciones obtenidas de intents no confiables). 

Estamos aquí para ayudarte
Si tienes preguntas técnicas sobre la vulnerabilidad, publícalas en Stack Overflow con la etiqueta "android-security". Si tienes dudas sobre los pasos que debes realizar para resolver este problema, comunícate con nuestro equipo de asistencia para desarrolladores.