Cómo solucionar la vulnerabilidad de la inyección de fragmento

Esta información está dirigida a los programadores que usan en sus apps una implementación no segura que provoca que las clases PreferenceActivity sean vulnerables a la inyección de fragmento. Dicha implementación puede permitir que apps externas malintencionadas carguen fragmentos que deberían ser privados.

A partir del 1 de marzo de 2017, Google Play bloqueará la publicación de nuevas apps o actualizaciones en las que las clases PreferenceActivity tal vez sean vulnerables a la inyección de fragmento. La versión publicada del APK no cambiará, pero se bloquearán las actualizaciones de la app si no solucionas la vulnerabilidad.

Acción necesaria

Accede a Developer Console y consulta la sección de alertas de seguridad para encontrar la lista de clases vulnerables.

Si es posible, establece exported=false para PreferenceActivity en tu manifiesto. De esta manera, impedirás que apps externas envíen intents a esta clase.

Si la PreferenceActivity vulnerable se debe exportar a apps externas, determina por qué la clase es vulnerable y toma las medidas necesarias. Existen dos posibilidades:

  1. Implementación incorrecta de isValidFragment:

Revisa si la clase vulnerable contiene o heredó una implementación de isValidFragment que muestra el resultado como verdadero en todas las rutas de código. Si es así, actualiza la clase para consultar la lista de clases de fragmentos permitidas. Por ejemplo, si PreferenceActivity debe permitir clases MyFragment y no otros fragmentos, implementa una verificación como la siguiente:

         public boolean isValidFragment(String fragmentName) {
            return MyFragment.class.getName().equals(fragmentName);

         }

  1. La targetSdkVersion es menor a diecinueve y no implementa isValidFragment:

Si la app tiene establecida en el manifiesto su targetSdkVersion a un valor menor a diecinueve y la clase vulnerable no contiene ninguna implementación de isValidFragment, la vulnerabilidad proviene de PreferenceActivity.

Para solucionarlo, los programadores deben actualizar targetSdkVersion a diecinueve (o a un valor mayor). Como alternativa, si no se puede actualizar la targetSdkVersion, los programadores deben implementar isValidFragment como se describe en el punto uno para consultar las clases de fragmentos permitidas.

Próximos pasos

  1. Actualiza tu app por medio de los pasos destacados anteriormente.

  2. Accede a Developer Console y envía la versión actualizada de tu app.

  3. Regresa después de cinco horas. Si la app no se actualizó correctamente, aparecerá un mensaje de advertencia.

Si tienes alguna otra consulta sobre cuestiones técnicas, publica un comentario en Stack Overflow y usa la etiqueta "android-security". Ten en cuenta que no debes publicar preguntas sobre las políticas de Play en este sitio.

Ten en cuenta que las apps también deben cumplir con el Acuerdo de distribución para programadores y la Política de contenido. Si consideras que enviamos esta advertencia por error, comunícate con el equipo de asistencia de políticas por medio del Centro de ayuda para programadores de Google Play.