GWS - App Scripts
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:
HackTricks Training GCP Red Team Expert (GRTE)
App Scripts
App Scripts es código que se activará cuando un usuario con permiso de editor acceda al documento con el que está vinculado el App Script y después de aceptar el aviso de OAuth. También se pueden configurar para que se ejecuten cada cierto tiempo por el propietario del App Script (Persistencia).
Crear App Script
Hay varias formas de crear un App Script, aunque las más comunes son desde un Documento de Google (de cualquier tipo) y como un proyecto independiente:
Escenario de App Script
Crear Google Sheet con App Script
Comienza creando un App Script, mi recomendación para este escenario es crear una hoja de cálculo de Google e ir a Extensiones > App Scripts
, esto abrirá un nuevo App Script vinculado a la hoja.
Fuga de token
Para dar acceso al token de OAuth necesitas hacer clic en Servicios +
y agregar ámbitos como:
AdminDirectory: Acceder a usuarios y grupos del directorio (si el usuario tiene suficientes permisos)
Gmail: Para acceder a datos de Gmail
Drive: Para acceder a datos de Drive
Google Sheets API: Para que funcione con el disparador
Para cambiar tú mismo los ámbitos necesarios puedes ir a la configuración del proyecto y habilitar: Mostrar archivo de manifiesto "appsscript.json" en el editor
.
Para capturar la solicitud, simplemente puedes ejecutar:
Permisos solicitados para ejecutar el App Script:
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F1395576375-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhS1MeeqlxNyBIe5eNo6K%252Fuploads%252Fgit-blob-b3920360d336e7e5fed2faa4a200bb5e86ae8585%252Fimage%2520%28334%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=798290ea&sv=1)
Al realizar una solicitud externa, el cuadro de diálogo de OAuth también pedirá permiso para acceder a puntos finales externos.
Crear Desencadenador
Una vez que se haya leído la aplicación, haga clic en ⏰ Desencadenadores para crear un desencadenador. En función a ejecutar, elija getToken
, se ejecuta en la implementación Head
, en la fuente del evento seleccione Desde la hoja de cálculo
y seleccione el tipo de evento Al abrir
o Al editar
(según sus necesidades) y guarde.
Tenga en cuenta que puede verificar las ejecuciones de los App Scripts en la pestaña Ejecuciones si desea depurar algo.
Compartir
Para activar el App Script, la víctima necesita conectarse con Acceso de editor.
El token utilizado para ejecutar el App Script será el del creador del desencadenador, incluso si el archivo se abre como Editor por otros usuarios.
Abusar de documentos Compartidos conmigo
Si alguien compartió contigo un documento con App Scripts y un desencadenador utilizando el Head del App Script (no una implementación fija), puedes modificar el código del App Script (agregando, por ejemplo, funciones para robar tokens), acceder a él y el App Script se ejecutará con los permisos del usuario que compartió el documento contigo (ten en cuenta que el token de OAuth del propietario tendrá como alcance de acceso los otorgados cuando se creó el desencadenador).
Se enviará una notificación al creador del script indicando que alguien modificó el script (¿Qué tal usar permisos de gmail para generar un filtro que evite la alerta?)
Si un atacante modifica los alcances del App Script, las actualizaciones no se aplicarán al documento hasta que se cree un nuevo desencadenador con los cambios. Por lo tanto, un atacante no podrá robar el token del creador con más alcances de los que estableció en el desencadenador que creó.
Copiar en lugar de compartir
Cuando creas un enlace para compartir un documento se crea un enlace similar a este: https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit
Si cambias el final "/edit" por "/copy", en lugar de acceder, Google te preguntará si deseas generar una copia del documento:
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F1395576375-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhS1MeeqlxNyBIe5eNo6K%252Fuploads%252Fgit-blob-0c5f0ae7e042d1d5aa7aee2cee192763ff58961e%252Fimage%2520%28335%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=f1651b0f&sv=1)
Si el usuario lo copia y lo accede, tanto el contenido del documento como los App Scripts se copiarán, sin embargo, los desencadenadores no lo harán, por lo tanto nada se ejecutará.
Compartir como Aplicación Web
Ten en cuenta que también es posible compartir un App Script como una aplicación web (en el Editor del App Script, implementar como una aplicación web), pero aparecerá una alerta como esta:
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F1395576375-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhS1MeeqlxNyBIe5eNo6K%252Fuploads%252Fgit-blob-09aa87e562682d990bf01411a45bac4ec86d915d%252Fimage%2520%28337%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=1f452da2&sv=1)
Seguido por el cuadro de diálogo de OAuth típico que solicita los permisos necesarios.
Pruebas
Puedes probar un token recopilado para listar correos electrónicos con:
Lista de calendario del usuario:
Script de la aplicación como Persistencia
Una opción para la persistencia sería crear un documento y agregar un desencadenador para la función getToken y compartir el documento con el atacante para que cada vez que el atacante abra el archivo exfiltre el token de la víctima.
También es posible crear un Script de la aplicación y hacer que se active cada cierto tiempo (como cada minuto, hora, día...). Un atacante que haya comprometido credenciales o una sesión de una víctima podría configurar un desencadenador de tiempo en un Script de la aplicación y filtrar un token OAuth muy privilegiado cada día:
Simplemente crea un Script de la aplicación, ve a Desencadenadores, haz clic en Agregar desencadenador y selecciona como fuente de evento Programado y elige las opciones que mejor se adapten a ti:
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F1395576375-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhS1MeeqlxNyBIe5eNo6K%252Fuploads%252Fgit-blob-74939c8ad647442e442554b3a74c378d2ac5a7cf%252Fimage%2520%28336%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=c0cae13f&sv=1)
Esto creará un correo electrónico de alerta de seguridad y un mensaje push a tu móvil alertando sobre esto.
Bypass de Confirmación de Documento Compartido no Verificado
Además, si alguien compartió contigo un documento con acceso de editor, puedes generar Scripts de la aplicación dentro del documento y el PROPIETARIO (creador) del documento será el propietario del Script de la aplicación.
Esto significa que el creador del documento aparecerá como creador de cualquier Script de la aplicación que cualquier persona con acceso de editor cree dentro de él.
Esto también significa que el Script de la aplicación será confiable para el entorno de Workspace del creador del documento.
Esto también significa que si un Script de la aplicación ya existía y las personas han concedido acceso, cualquier persona con permiso de Editor en el documento puede modificarlo y abusar de ese acceso.
Para abusar de esto también necesitas que las personas activen el Script de la aplicación. Y un truco ingenioso es publicar el script como una aplicación web. Cuando las personas que ya han concedido acceso al Script de la aplicación accedan a la página web, activarán el Script de la aplicación (esto también funciona usando etiquetas <img>
).
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated