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

5.8 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 Simplifié

Depuis iOS 6, les applications tierces ont été autorisées à partager des données telles que du texte, des URL ou des images en utilisant des mécanismes comme AirDrop, comme décrit dans le guide de communication inter-applications d'Apple. Cette fonctionnalité se manifeste par une feuille d'activité de partage à l'échelle du système qui apparaît lors de l'interaction avec le bouton "Partager".

Une énumération complète de toutes les options de partage intégrées est disponible à UIActivity.ActivityType. Les développeurs peuvent choisir d'exclure certaines options de partage s'ils les jugent inappropriées pour leur application.

Comment Partager des Données

L'attention doit être portée sur :

  • La nature des données partagées.
  • L'inclusion d'activités personnalisées.
  • L'exclusion de certains types d'activités.

Le partage est facilité par l'instanciation d'un UIActivityViewController, auquel les éléments destinés au partage sont passés. Cela est réalisé en appelant :

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

Les développeurs doivent examiner le UIActivityViewController pour les activités et les activités personnalisées avec lesquelles il est initialisé, ainsi que tout excludedActivityTypes spécifié.

Comment Recevoir des Données

Les aspects suivants sont cruciaux lors de la réception de données :

  • La déclaration de types de documents personnalisés.
  • La spécification des types de documents que l'application peut ouvrir.
  • La vérification de l'intégrité des données reçues.

Sans accès au code source, on peut toujours inspecter le Info.plist pour des clés comme UTExportedTypeDeclarations, UTImportedTypeDeclarations, et CFBundleDocumentTypes afin de comprendre les types de documents qu'une application peut gérer et déclarer.

Un guide succinct sur ces clés est disponible sur Stackoverflow, soulignant l'importance de définir et d'importer des UTI pour une reconnaissance à l'échelle du système et d'associer des types de documents avec votre application pour l'intégration dans la boîte de dialogue "Ouvrir avec".

Approche de Test Dynamique

Pour tester l'envoi d'activités, on pourrait :

  • S'accrocher à la méthode init(activityItems:applicationActivities:) pour capturer les éléments et les activités partagées.
  • Identifier les activités exclues en interceptant la propriété excludedActivityTypes.

Pour recevoir des éléments, cela implique :

  • Partager un fichier avec l'application depuis une autre source (par exemple, AirDrop, email) qui invite à la boîte de dialogue "Ouvrir avec...".
  • S'accrocher à application:openURL:options: parmi d'autres méthodes identifiées lors de l'analyse statique pour observer la réponse de l'application.
  • Utiliser des fichiers malformés ou des techniques de fuzzing pour évaluer la robustesse de l'application.

Références

{% 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 %}