GWS - App Scripts
Scripts de Aplicativos
Scripts de Aplicativos são códigos que serão acionados quando um usuário com permissão de editor acessar o documento ao qual o Script de Aplicativo está vinculado e após aceitar o prompt de OAuth. Eles também podem ser configurados para serem executados em intervalos regulares pelo proprietário do Script de Aplicativo (Persistência).
Criar Script de Aplicativo
Existem várias maneiras de criar um Script de Aplicativo, embora as mais comuns sejam a partir de um Documento Google (de qualquer tipo) e como um projeto independente:
Cenário de Script de Aplicativo
Criar Planilha Google com Script de Aplicativo
Comece criando um Script de Aplicativo, minha recomendação para este cenário é criar uma Planilha Google e ir para Extensões > Scripts de Aplicativos
, isso abrirá um novo Script de Aplicativo vinculado à planilha.
Vazar token
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 funcionar com o gatilho
Para alterar 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:
Ao fazer uma solicitação externa, o prompt do OAuth também pedirá permissão para acessar endpoints externos.
Criar Desencadeador
Depois de ler o App, clique em ⏰ Desencadeadores para criar um desencadeador. Como função a ser executada, escolha getToken
, execute no Cabeçalho
do deployment, selecione Do planilha
como fonte de evento e selecione Ao abrir
ou Ao editar
(conforme necessário) e salve.
Observe que você pode verificar as execuções dos App Scripts na guia Execuções se precisar depurar algo.
Compartilhamento
Para acionar 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 desencadeador, mesmo que o arquivo seja aberto como Editor por outros usuários.
Abusando de documentos Compartilhados Comigo
Se alguém compartilhou com você um documento com App Scripts e um desencadeador usando o Cabeçalho do App Script (não um deployment fixo), você pode modificar o código do App Script (adicionando, por exemplo, 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ê! (observe que o token OAuth do proprietário terá como escopos de acesso aqueles concedidos quando o desencadeador 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 e evitar 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 desencadeador com as alterações seja criado. Portanto, um atacante não poderá roubar o token do criador com mais escopos do que aqueles definidos no desencadeador que ele criou.
Copiando em vez de compartilhar
Ao criar um link para compartilhar um documento, um link semelhante a este é criado: https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit
Se você alterar 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 desencadeadores não serão, portanto nada será executado.
Compartilhando como Aplicativo Web
Observe que também é possível compartilhar um App Script como um aplicativo Web (no Editor do App Script, implemente como um aplicativo Web), mas um alerta como este aparecerá:
Seguido pelo prompt OAuth típico pedindo as permissões necessárias.
Testando
Você pode testar um token obtido para listar e-mails com:
Listar calendário do usuário:
Script do Aplicativo como Persistência
Uma opção para persistência seria criar um documento e adicionar um acionador para a função getToken e compartilhar o documento com o atacante para que toda vez que o atacante abrir o arquivo, ele extrai o token da vítima.
Também é possível criar um Script do Aplicativo e configurá-lo para acionar a cada X tempo (como a cada minuto, hora, dia...). Um atacante que tenha comprometido credenciais ou uma sessão de uma vítima poderia configurar um acionador de tempo para um Script do Aplicativo e vazar um token OAuth muito privilegiado todos os dias:
Basta criar um Script do Aplicativo, ir para Acionadores, clicar em Adicionar Acionador e selecionar como fonte de evento Time-driven e escolher as opções que melhor se adequam a você:
Isso criará um e-mail de alerta de segurança e uma mensagem push para o seu celular alertando sobre isso.
Desvio de Prompt Não Verificado de Documento Compartilhado
Além disso, se alguém compartilhou com você um documento com acesso de editor, você pode gerar Scripts do Aplicativo dentro do documento e o PROPRIETÁRIO (criador) do documento será o proprietário do Script do Aplicativo.
Isso significa que o criador do documento aparecerá como criador de qualquer Script do Aplicativo que qualquer pessoa com acesso de editor criar dentro dele.
Isso também significa que o Script do Aplicativo será confiável pelo ambiente do Workspace do criador do documento.
Isso também significa que se um Script do Aplicativo já existir e as pessoas tiverem concedido acesso, qualquer pessoa 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 Script do Aplicativo. E um truque legal é publicar o script como um aplicativo da web. Quando as pessoas que já concederam acesso ao Script do Aplicativo acessarem a página da web, elas irão acionar o Script do Aplicativo (isso também funciona usando tags <img>
).
Last updated