Vulnerabilidad en el recorrido de la ruta de acceso

Esta información está dirigida a los programadores cuya(s) app(s) contenga(n) una vulnerabilidad en el recorrido de la ruta de acceso.

Novedades

A partir del 16 de enero de 2018, Google Play comenzó a bloquear la publicación de apps nuevas o actualizaciones que contienen una vulnerabilidad de Path traversal. 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 y corrige la vulnerabilidad.
  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

Las implementaciones de openFile en los bloques ContentProviders exportados pueden ser vulnerables si no se validan los parámetros URI entrantes. Una app malintencionada podría proporcionar un URI elaborado (por ejemplo, uno que contenga "/../") para engañar a tu app y hacer que devuelva un ParcelFileDescriptor a un archivo fuera del directorio deseado, y, de esta forma, acceder a cualquier archivo de tu app.

Existen dos estrategias recomendadas para quitar una vulnerabilidad en el recorrido de la ruta de acceso del ContentProvider.

1. Si tu ContentProvider no necesita que se lo exponga en otras apps, haz lo siguiente:

2. Si tu ContentProvider necesita que se lo exponga en otras apps, haz lo siguiente:

Asegúrate de que las entradas de openFile que contengan caracteres de recorrido de la ruta de acceso no provoquen que tu app devuelva archivos inesperados. Para ello, comprueba la ruta de acceso canónica del archivo. Por ejemplo:

public ParcelFileDescriptor openFile (Uri uri, String mode)
   throws FileNotFoundException {
 File f = new File(DIR, uri.getLastPathSegment());
 if (!f.getCanonicalPath().startsWith(DIR)) {
   throw new IllegalArgumentException();
 }
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

Advertencia: Ten en cuenta que no es seguro llamar a getLastPathSegment en el parámetro URI, ya que una app malintencionada podría proporcionar una ruta de acceso URI codificada (como "%2F..%2F..path%2Fto%2Fsecret.txt") para que el resultado de getLastPathSegment sea "/../../path/to/secret.txt". Por ejemplo, la siguiente implementación sigue siendo vulnerable a ataques:

public ParcelFileDescriptor openFile(Uri uri, String mode){
 File f = new File(DIR, uri.getLastPathSegment());
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

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 seguir para resolver este problema, comunícate con nuestro equipo de asistencia para desarrolladores.

false
Menú principal
8321106309513918376
true
Buscar en el Centro de asistencia
true
true
true
true
true
5016068
false
false