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 é código que será acionado quando um usuário com permissão de editor acessar o documento ao qual o App Script está vinculado e após aceitar o prompt OAuth. Eles também podem ser configurados para serem executados a cada certo tempo pelo proprietário do App Script (Persistência).
Existem várias maneiras de criar um App Script, embora as mais comuns sejam a partir de um Documento Google (de qualquer tipo) e como um projeto independente:
Comece criando um App Script, minha recomendação para este cenário é criar uma Google Sheet e ir para Extensões > App Scripts
, isso abrirá um novo App Script para você vinculado à planilha.
Para dar acesso ao token OAuth, você precisa clicar em Serviços +
e adicionar escopos como:
AdminDirectory: Acessar usuários e grupos do diretório (se o usuário tiver permissões suficientes)
Gmail: Para acessar dados do gmail
Drive: Para acessar dados do drive
Google Sheets API: Para que funcione com o gatilho
Para alterar você mesmo os escopos necessários, você pode ir para as configurações do projeto e habilitar: Mostrar arquivo de manifesto "appsscript.json" no editor
.
Para capturar a solicitação, você pode simplesmente executar:
Permissões solicitadas para executar o App Script:
Como uma solicitação externa é feita, o prompt do OAuth também pedirá permissão para acessar endpoints externos.
Uma vez que o App é lido, clique em ⏰ Gatilhos para criar um gatilho. Como função a ser executada, escolha getToken
, execute na implantação Head
, na fonte do evento selecione From spreadsheet
e no tipo de evento selecione On open
ou On edit
(de acordo com suas necessidades) e salve.
Observe que você pode verificar as execuções dos App Scripts na aba Executions se quiser depurar algo.
Para disparar o App Script, a vítima precisa se conectar com Acesso de Editor.
O token usado para executar o App Script será o do criador do gatilho, mesmo que o arquivo seja aberto como Editor por outros usuários.
Se alguém compartilhou com você um documento com App Scripts e um gatilho usando o Head do App Script (não uma implantação fixa), você pode modificar o código do App Script (adicionando, por exemplo, as funções de roubo de token), acessá-lo, e o App Script será executado com as permissões do usuário que compartilhou o documento com você! (note que o token OAuth dos proprietários terá como escopos de acesso os que foram dados quando o gatilho foi criado).
Uma notificação será enviada ao criador do script indicando que alguém modificou o script (Que tal usar permissões do gmail para gerar um filtro para prevenir o alerta?)
Se um atacante modificar os escopos do App Script, as atualizações não serão aplicadas ao documento até que um novo gatilho com as mudanças seja criado. Portanto, um atacante não poderá roubar o token do proprietário criador com mais escopos do que o que ele definiu no gatilho que criou.
Quando você cria um link para compartilhar um documento, um link semelhante a este é criado: https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit
Se você mudar o final "/edit" para "/copy", em vez de acessá-lo, o google perguntará se você deseja gerar uma cópia do documento:
Se o usuário copiá-lo e acessá-lo, tanto o conteúdo do documento quanto os App Scripts serão copiados, no entanto, os gatilhos não são, portanto nada será executado.
Observe que também é possível compartilhar um App Script como uma aplicação Web (no Editor do App Script, implantar como uma aplicação Web), mas um alerta como este aparecerá:
Seguido pelo típico prompt do OAuth pedindo as permissões necessárias.
Você pode testar um token coletado para listar e-mails com:
Liste o calendário do usuário:
Uma opção para persistência seria criar um documento e adicionar um gatilho para a função getToken e compartilhar o documento com o atacante, para que toda vez que o atacante abrir o arquivo, ele exfiltre o token da vítima.
Também é possível criar um App Script e fazê-lo ser acionado a cada X tempo (como a cada minuto, hora, dia...). Um atacante que tenha credenciais comprometidas ou uma sessão de uma vítima poderia configurar um gatilho de tempo do App Script e vazar um token OAuth muito privilegiado todos os dias:
Basta criar um App Script, ir para Gatilhos, clicar em Adicionar Gatilho e selecionar como fonte de evento Acionado pelo tempo e escolher as opções que melhor se adequam a você:
Isso criará um e-mail de alerta de segurança e uma mensagem de push para o seu celular alertando sobre isso.
Além disso, se alguém compartilhou com você um documento com acesso de editor, você pode gerar App Scripts dentro do documento e o PROPRIETÁRIO (criador) do documento será o proprietário do App Script.
Isso significa que o criador do documento aparecerá como criador de qualquer App Script que qualquer pessoa com acesso de editor criar dentro dele.
Isso também significa que o App Script será confiável pelo ambiente do Workspace do criador do documento.
Isso também significa que se um App Script já existia e as pessoas concederam acesso, qualquer um com permissão de Editor no documento pode modificá-lo e abusar desse acesso.
Para abusar disso, você também precisa que as pessoas acionem o App Script. E um truque interessante é publicar o script como um aplicativo da web. Quando as pessoas que já concederam acesso ao App Script acessam a página da web, elas acionarão o App Script (isso também funciona usando tags <img>
).
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)