9.2 KiB
Compartir UIActivity
A partir de iOS 6, es posible que las aplicaciones de terceros compartan datos (elementos) a través de mecanismos específicos como AirDrop, por ejemplo. Desde la perspectiva del usuario, esta función es la conocida hoja de actividad de compartir en todo el sistema que aparece después de hacer clic en el botón "Compartir".
Una lista completa de los mecanismos de intercambio integrados disponibles se puede encontrar en UIActivity.ActivityType. Si no se considera apropiado para la aplicación, los desarrolladores tienen la posibilidad de excluir algunos de estos mecanismos de intercambio.
Envío de elementos
Al probar la Compartición de UIActivity, debe prestar especial atención a:
- los datos (elementos) que se comparten,
- las actividades personalizadas,
- los tipos de actividad excluidos.
El intercambio de datos a través de UIActivity
funciona creando un UIActivityViewController
y pasándole los elementos deseados (URL, texto, una imagen) en init(activityItems:applicationActivities:)
.
Si tiene el código fuente, debe echar un vistazo al UIActivityViewController
:
- Inspeccione las actividades pasadas al método
init(activityItems:applicationActivities:)
. - Compruebe si define actividades personalizadas (que también se pasan al método anterior).
- Verifique los
excludedActivityTypes
, si los hay.
Si solo tiene la aplicación compilada/instalada, intente buscar el método y la propiedad anterior, por ejemplo:
$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:
Recibiendo elementos
Al recibir elementos, debes verificar:
- si la aplicación declara tipos de documentos personalizados mirando en los UTI exportados/importados ("Información" en el proyecto Xcode). La lista de todos los UTI declarados por el sistema se puede encontrar en la Documentación de desarrolladores de Apple archivada.
- si la aplicación especifica algún tipo de documento que puede abrir mirando en los Tipos de documento ("Información" en el proyecto Xcode). Si está presente, consisten en un nombre y uno o más UTI que representan el tipo de datos (por ejemplo, "public.png" para archivos PNG). iOS utiliza esto para determinar si la aplicación es elegible para abrir un documento determinado (especificar UTI exportados/importados no es suficiente).
- si la aplicación verifica adecuadamente los datos recibidos mirando en la implementación de
application:openURL:options:
(o su versión obsoletaUIApplicationDelegate application:openURL:sourceApplication:annotation:
) en el delegado de la aplicación.
Si no tienes el código fuente, aún puedes echar un vistazo al archivo Info.plist
y buscar:
UTExportedTypeDeclarations
/UTImportedTypeDeclarations
si la aplicación declara tipos de documentos personalizados exportados/importados.CFBundleDocumentTypes
para ver si la aplicación especifica algún tipo de documento que puede abrir.
Una explicación muy completa sobre el uso de estas claves se puede encontrar en Stackoverflow, pero aquí tienes un resumen:
UTExportedTypeDeclarations
: Úsalos para definir tus propios UTI que tu aplicación quiere enseñar al sistema en el que está instalado. Un UTI describe un fragmento de datos (¡no necesariamente datos ubicados dentro de un archivo!) y requiere al menos un identificador (com.example.MyCoolDataType
). Además, puede tener un nombre (Mi tipo de datos genial
), una o más extensiones de nombre de archivo (.myCoolDataType
), uno o más tipos MIME (x-application/my-cool-data-type
), uno o más tipos de portapapeles (usados cuando se transfieren datos de ese tipo usando copiar y pegar), y uno o más tipos de sistema operativo heredados. Por lo general, también deseas que los UTI se ajusten a los UTI existentes (por ejemplo, cuando dices que tu UTI se ajusta apublic.data
, cualquier proceso que pueda manejar datos genéricos también puede manejar tu UTI).- por ejemplo: Definir tu propio formato de datos de archivo patentado y quieres que este formato de datos sea conocido también por otras aplicaciones, complementos, extensiones, etc.
UTImportedTypeDeclarations
: UsasUTImportedTypeDeclarations
para enseñar al sistema sobre UTI que deseas que se conozcan en el sistema pero que no son tus UTI.- por ejemplo: Tu aplicación puede leer el formato de datos patentado de otra aplicación, pero no sabes si esa aplicación está instalada en el sistema.
CFBundleDocumentTypes
: UsasCFBundleDocumentTypes
para decirle al sistema qué tipos de documentos puede abrir tu aplicación. A menos que también listes tus UTI aquí, estos UTI no están asociados con tu aplicación en Finder y tu aplicación no aparecerá en el menúAbrir con >
.
Lo único que siempre debes establecer para un tipo de documento es el rol. El rol puede ser "Visor" (puedes mostrar ese tipo de archivo pero no puedes editarlo), "Editor" (puedes mostrar y editar ese tipo de archivo), "Ninguno" (no se especifica lo que puedes hacer con ese archivo).- por ejemplo: Quieres que tu aplicación se asocie con ciertos tipos de archivo, identificados ya sea por extensión, por tipo MIME o por identificador UTI. Si deseas que tu aplicación se asocie con un tipo de UTI, la aplicación debe importar o exportar el tipo, de lo contrario, el tipo puede no ser conocido por el sistema y registrarse en un tipo de UTI desconocido no tiene ningún efecto en absoluto.
Pruebas dinámicas
Para enviar actividades puedes:
- Enganchar el método que hemos visto en el análisis estático (
init(activityItems:applicationActivities:)
) para obtener losactivityItems
yapplicationActivities
. - Descubrir las actividades excluidas enganchando la propiedad
excludedActivityTypes
.
Para recibir elementos puedes:
- Compartir un archivo con la aplicación desde otra aplicación o enviarlo por AirDrop o correo electrónico. Elije el archivo para que desencadene el diálogo "Abrir con..." (es decir, no hay una aplicación predeterminada que abra el archivo, un PDF, por ejemplo).
- Enganchar
application:openURL:options:
y cualquier otro método que se haya identificado en un análisis estático anterior. - Observar el comportamiento de la aplicación.
- Además, podrías enviar archivos específicos malformados y/o usar una técnica de fuzzing.
Lee cómo hacerlo aquí.
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿o quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
-
Descubre The PEASS Family, nuestra colección de exclusivos NFTs
-
Consigue el oficial PEASS & HackTricks swag
-
Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
-
Comparte tus trucos de hacking enviando PRs al repositorio hacktricks y al repositorio hacktricks-cloud.