GWS - App Scripts
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
App Scripts est un code qui sera déclenché lorsqu'un utilisateur ayant des droits d'éditeur accède au document auquel l'App Script est lié et après avoir accepté l'invite OAuth. Ils peuvent également être configurés pour être exécutés à intervalles réguliers par le propriétaire de l'App Script (Persistance).
Il existe plusieurs façons de créer un App Script, bien que les plus courantes soient à partir d'un Document Google (de tout type) et en tant que projet autonome :
Commencez par créer un App Script, ma recommandation pour ce scénario est de créer une feuille Google et d'aller à Extensions > App Scripts
, cela ouvrira un nouveau App Script pour vous lié à la feuille.
Pour donner accès au token OAuth, vous devez cliquer sur Services +
et ajouter des scopes comme :
AdminDirectory : Accéder aux utilisateurs et groupes du répertoire (si l'utilisateur a suffisamment de permissions)
Gmail : Pour accéder aux données Gmail
Drive : Pour accéder aux données Drive
Google Sheets API : Pour que cela fonctionne avec le déclencheur
Pour changer vous-même les scopes nécessaires, vous pouvez aller dans les paramètres du projet et activer : Afficher le fichier manifeste "appsscript.json" dans l'éditeur
.
Pour capturer la requête, vous pouvez simplement exécuter :
Permissions demandées pour exécuter le script d'application :
Comme une demande externe est faite, l'invite OAuth demandera également la permission d'atteindre des points de terminaison externes.
Une fois que l'application est lue, cliquez sur ⏰ Déclencheurs pour créer un déclencheur. Comme fonction à exécuter, choisissez getToken
, s'exécute au déploiement Head
, dans la source d'événement sélectionnez Depuis la feuille de calcul
et le type d'événement sélectionnez À l'ouverture
ou À la modification
(selon vos besoins) et enregistrez.
Notez que vous pouvez vérifier les exécutions des scripts d'application dans l'onglet Exécutions si vous souhaitez déboguer quelque chose.
Pour déclencher le script d'application, la victime doit se connecter avec Accès Éditeur.
Le jeton utilisé pour exécuter le script d'application sera celui du créateur du déclencheur, même si le fichier est ouvert en tant qu'Éditeur par d'autres utilisateurs.
Si quelqu'un vous a partagé un document avec des scripts d'application et un déclencheur utilisant le Head du script d'application (pas un déploiement fixe), vous pouvez modifier le code du script d'application (ajoutant par exemple les fonctions de vol de jeton), y accéder, et le script d'application sera exécuté avec les permissions de l'utilisateur qui a partagé le document avec vous ! (notez que le jeton OAuth des propriétaires aura comme portées d'accès celles données lors de la création du déclencheur).
Une notification sera envoyée au créateur du script indiquant que quelqu'un a modifié le script (Que diriez-vous d'utiliser les permissions Gmail pour générer un filtre afin de prévenir l'alerte ?)
Si un attaquant modifie les portées du script d'application, les mises à jour ne seront pas appliquées au document tant qu'un nouveau déclencheur avec les modifications n'est pas créé. Par conséquent, un attaquant ne pourra pas voler le jeton du propriétaire créateur avec plus de portées que celles qu'il a définies dans le déclencheur qu'il a créé.
Lorsque vous créez un lien pour partager un document, un lien similaire à celui-ci est créé : https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit
Si vous changez la fin "/edit" pour "/copy", au lieu d'y accéder, Google vous demandera si vous souhaitez générer une copie du document :
Si l'utilisateur le copie et y accède, à la fois le contenu du document et les scripts d'application seront copiés, cependant les déclencheurs ne le sont pas, donc rien ne sera exécuté.
Notez qu'il est également possible de partager un script d'application en tant qu'application Web (dans l'éditeur du script d'application, déployez en tant qu'application Web), mais une alerte comme celle-ci apparaîtra :
Suivie de l'invite OAuth typique demandant les permissions nécessaires.
Vous pouvez tester un jeton recueilli pour lister les e-mails avec :
Liste des calendriers de l'utilisateur :
Une option pour la persistance serait de créer un document et d'ajouter un déclencheur pour la fonction getToken et de partager le document avec l'attaquant afin que chaque fois que l'attaquant ouvre le fichier, il exfiltre le token de la victime.
Il est également possible de créer un App Script et de le faire déclencher toutes les X minutes (comme chaque minute, heure, jour...). Un attaquant qui a compromis des identifiants ou une session d'une victime pourrait définir un déclencheur temporel pour un App Script et leak un token OAuth très privilégié chaque jour :
Il suffit de créer un App Script, d'aller dans Déclencheurs, de cliquer sur Ajouter un déclencheur, et de sélectionner comme source d'événement Déclenché par le temps et de choisir les options qui vous conviennent le mieux :
Cela créera un e-mail d'alerte de sécurité et un message push sur votre mobile vous alertant à ce sujet.
De plus, si quelqu'un vous a partagé un document avec un accès éditeur, vous pouvez générer des App Scripts à l'intérieur du document et le PROPRIÉTAIRE (créateur) du document sera le propriétaire de l'App Script.
Cela signifie que le créateur du document apparaîtra comme créateur de tout App Script que quiconque avec un accès éditeur crée à l'intérieur.
Cela signifie également que l'App Script sera de confiance par l'environnement Workspace du créateur du document.
Cela signifie également que si un App Script existait déjà et que des personnes ont accordé l'accès, quiconque ayant la permission Éditeur sur le document peut le modifier et abuser de cet accès.
Pour abuser de cela, vous avez également besoin que des personnes déclenchent l'App Script. Et un astuce astucieuse est de publier le script en tant qu'application web. Lorsque les personnes qui ont déjà accordé l'accès à l'App Script accèdent à la page web, elles déclencheront l'App Script (cela fonctionne également en utilisant des balises <img>
).
Apprenez et pratiquez le Hacking AWS :HackTricks Training AWS Red Team Expert (ARTE) Apprenez et pratiquez le Hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)