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
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.