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 è codice che verrà attivato quando un utente con permessi di modifica accede al documento a cui è collegato l'App Script e dopo aver accettato il prompt OAuth. Possono anche essere impostati per essere eseguiti ogni certo tempo dal proprietario dell'App Script (Persistenza).
Ci sono diversi modi per creare un App Script, anche se i più comuni sono da un Documento Google (di qualsiasi tipo) e come progetto autonomo:
Inizia creando un App Script, la mia raccomandazione per questo scenario è di creare un Google Sheet e andare su Estensioni > App Scripts
, questo aprirà un nuovo App Script per te collegato al foglio.
Per dare accesso al token OAuth devi cliccare su Servizi +
e aggiungere ambiti come:
AdminDirectory: Accesso a utenti e gruppi della directory (se l'utente ha abbastanza permessi)
Gmail: Per accedere ai dati di gmail
Drive: Per accedere ai dati di drive
Google Sheets API: Affinché funzioni con il trigger
Per cambiare tu stesso i scopi necessari puoi andare nelle impostazioni del progetto e abilitare: Mostra il file di manifest "appsscript.json" nell'editor
.
Per catturare la richiesta puoi semplicemente eseguire:
Permissions requested to execute the App Script:
Poiché viene effettuata una richiesta esterna, il prompt OAuth chiederà anche il permesso di raggiungere endpoint esterni.
Una volta letta l'App, clicca su ⏰ Triggers per creare un trigger. Come funzione da eseguire scegli getToken
, eseguito al deployment Head
, nella sorgente evento seleziona From spreadsheet
e tipo di evento seleziona On open
o On edit
(secondo le tue esigenze) e salva.
Nota che puoi controllare i runs degli App Scripts nella scheda Esecuzioni se vuoi fare debug di qualcosa.
Per triggerare l'App Script la vittima deve connettersi con Accesso Editor.
Il token utilizzato per eseguire l'App Script sarà quello del creatore del trigger, anche se il file è aperto come Editor da altri utenti.
Se qualcuno ti ha condiviso un documento con App Scripts e un trigger utilizzando il Head dell'App Script (non un deployment fisso), puoi modificare il codice dell'App Script (aggiungendo ad esempio le funzioni per rubare il token), accedervi, e l'App Script verrà eseguito con i permessi dell'utente che ti ha condiviso il documento! (nota che il token OAuth dei proprietari avrà come scope di accesso quelli dati quando è stato creato il trigger).
Una notifica verrà inviata al creatore dello script indicando che qualcuno ha modificato lo script (Che ne dici di usare i permessi di gmail per generare un filtro per prevenire l'allerta?)
Se un attaccante modifica gli scope dell'App Script gli aggiornamenti non verranno applicati al documento fino a quando non viene creato un nuovo trigger con le modifiche. Pertanto, un attaccante non sarà in grado di rubare il token del proprietario creatore con più scope di quelli impostati nel trigger che ha creato.
Quando crei un link per condividere un documento, viene creato un link simile a questo: https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit
Se cambi la parte finale "/edit" in "/copy", invece di accedervi, google ti chiederà se vuoi generare una copia del documento:
Se l'utente lo copia e accede, sia i contenuti del documento che gli App Scripts verranno copiati, tuttavia i triggers non lo sono, quindi niente verrà eseguito.
Nota che è anche possibile condividere un App Script come un'applicazione Web (nell'Editor dell'App Script, distribuisci come applicazione Web), ma apparirà un avviso come questo:
Seguito dal tipico prompt OAuth che chiede i permessi necessari.
Puoi testare un token raccolto per elencare le email con:
Elenca il calendario dell'utente:
Una opzione per la persistenza sarebbe creare un documento e aggiungere un trigger per la funzione getToken e condividere il documento con l'attaccante in modo che ogni volta che l'attaccante apre il file, esfiltra il token della vittima.
È anche possibile creare un App Script e farlo attivare ogni X tempo (come ogni minuto, ora, giorno...). Un attaccante che ha compromesso credenziali o una sessione di una vittima potrebbe impostare un trigger temporale per l'App Script e leakare un token OAuth molto privilegiato ogni giorno:
Basta creare un App Script, andare su Trigger, cliccare su Aggiungi Trigger e selezionare come sorgente evento Time-driven e selezionare le opzioni che meglio si adattano a te:
Questo creerà un'email di avviso di sicurezza e un messaggio push sul tuo cellulare che ti avvisa di questo.
Inoltre, se qualcuno ti ha condiviso un documento con accesso in modifica, puoi generare App Scripts all'interno del documento e il PROPRIETARIO (creatore) del documento sarà il proprietario dell'App Script.
Questo significa che il creatore del documento apparirà come creatore di qualsiasi App Script che chiunque con accesso in modifica crea al suo interno.
Questo significa anche che l'App Script sarà fidato dall'ambiente Workspace del creatore del documento.
Questo significa anche che se un App Script esisteva già e le persone hanno concesso accesso, chiunque con permesso di Modifica sul documento può modificarlo e abusare di quell'accesso.
Per abusare di questo hai anche bisogno che le persone attivino l'App Script. E un trucco interessante è pubblicare lo script come un'app web. Quando le persone che hanno già concesso accesso all'App Script accedono alla pagina web, attiveranno l'App Script (questo funziona anche usando i tag <img>
).
Impara e pratica il Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)