hacktricks/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md

5.7 KiB

iOS UIActivity Sharing

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

UIActivity Sharing Simplified

Desde iOS 6 en adelante, las aplicaciones de terceros han podido compartir datos como texto, URLs o imágenes utilizando mecanismos como AirDrop, como se detalla en la guía de Comunicación entre Aplicaciones de Apple. Esta función se manifiesta a través de una hoja de actividad de compartir a nivel del sistema que aparece al interactuar con el botón "Compartir".

Una enumeración completa de todas las opciones de compartir integradas está disponible en UIActivity.ActivityType. Los desarrolladores pueden optar por excluir opciones de compartir específicas si las consideran inapropiadas para su aplicación.

Cómo Compartir Datos

Se debe prestar atención a:

  • La naturaleza de los datos que se comparten.
  • La inclusión de actividades personalizadas.
  • La exclusión de ciertos tipos de actividad.

El compartir se facilita a través de la instanciación de un UIActivityViewController, al cual se pasan los elementos destinados a compartir. Esto se logra llamando:

$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:

Los desarrolladores deben examinar el UIActivityViewController por las actividades y actividades personalizadas con las que se inicializa, así como cualquier excludedActivityTypes especificado.

Cómo Recibir Datos

Los siguientes aspectos son cruciales al recibir datos:

  • La declaración de tipos de documentos personalizados.
  • La especificación de tipos de documentos que la aplicación puede abrir.
  • La verificación de la integridad de los datos recibidos.

Sin acceso al código fuente, aún se puede inspeccionar el Info.plist en busca de claves como UTExportedTypeDeclarations, UTImportedTypeDeclarations y CFBundleDocumentTypes para entender los tipos de documentos que una aplicación puede manejar y declarar.

Una guía concisa sobre estas claves está disponible en Stackoverflow, destacando la importancia de definir e importar UTIs para el reconocimiento a nivel del sistema y asociar tipos de documentos con su aplicación para la integración en el diálogo "Abrir con".

Enfoque de Pruebas Dinámicas

Para probar actividades de envío, se podría:

  • Engancharse al método init(activityItems:applicationActivities:) para capturar los elementos y actividades que se comparten.
  • Identificar actividades excluidas interceptando la propiedad excludedActivityTypes.

Para recibir elementos, implica:

  • Compartir un archivo con la aplicación desde otra fuente (por ejemplo, AirDrop, correo electrónico) que solicite el diálogo "Abrir con...".
  • Enganchar application:openURL:options: entre otros métodos identificados durante el análisis estático para observar la respuesta de la aplicación.
  • Emplear archivos malformados o técnicas de fuzzing para evaluar la robustez de la aplicación.

Referencias

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}