🚀 A CloudSEK se torna a primeira empresa de segurança cibernética de origem indiana a receber investimentos da Estado dos EUA fundo
Leia mais

Autores: Sparsh Kulshrestha e Shashank Bharthwal
Editora: Deepanjli Paulraj
Ao navegar pelos diferentes widgets disponíveis no Appsmith, encontramos um widget chamado Iframe. Usando esse widget, os usuários podem inserir iframes com URLs arbitrários e srcDoc em seus painéis do Appsmith. Observamos que o campo denominado SRCDoc é vulnerável ao XSS.

O XSS poderia ter sido usado para roubar cookies de sessão do administrador, mas os cookies de sessão foram marcados como HttpOnly e, portanto, não podem ser acessados via Javascript.

Embora não tenhamos conseguido acessar os cookies, conseguimos usar um iframe para pesquisar conteúdo confidencial de um endpoint de API ao qual somente os administradores têm acesso. Um desses endpoints era “/api/v1/admin/env”, que contém as variáveis de ambiente do Appsmith, incluindo credenciais relacionadas à infraestrutura. Qualquer outro usuário além do administrador não pode acessar o endpoint.

Como temos a capacidade de injetar um iframe e executar javascript arbitrariamente, o administrador pode ser induzido a carregar o iframe com sucesso, permitindo que o javascript acesse o conteúdo do iframe.
Como prova de conceito, o código a seguir foi injetado no campo srcDoc para inserir um iframe que carrega o endpoint do ambiente administrativo e busca o conteúdo do iframe assim que ele termina de carregar. Depois que os dados são exfiltrados, eles são enviados para o VPS do invasor, onde podem ser decodificados.
<html>Código de exploração para injeção de iframe e exfiltração de dados
Quando o exploit estiver pronto, ele precisará ser publicado para que outros usuários possam acessá-lo. Isso pode ser feito tornando público o painel do Appsmith e pode ser acessado por qualquer pessoa.

Depois que o painel é publicado e está disponível ao público por meio de um link, o link é enviado ao administrador. Assim que o administrador clica no link e visualiza o painel, o iframe do endpoint confidencial é carregado. Em seguida, o javascript rouba o conteúdo do iframe e o envia para o atacante. Veja como os dados são recebidos pelo atacante quando o administrador visita o painel malicioso.

Agora, esses dados codificados em base64 podem ser decodificados pelo atacante executando o seguinte comando:
$ echo “<base64_encoded_data>” | base64 — decodificar

As credenciais decodificadas do MongoDB podem ser usadas para investigação e exploração adicionais.
Com base em nossos testes anteriores no Appsmith, sabemos que existem proteções que restringem o acesso aos metadados internos das instâncias de nuvem, mas não há restrições no host local. Além disso, o Appsmith tem um recurso que permite aos usuários conectar o MongoDB como fonte de dados.
Em seguida, verificamos se essa funcionalidade pode ser usada para se conectar ao MongoDB interno em execução no localhost. Isso foi feito preenchendo os detalhes de conexão e autenticação obtidos anteriormente no formulário, o que permite que os usuários se conectem ao MongoDB como fonte de dados.

Ao clicar na opção “Salvar”, a fonte de dados foi adicionada com sucesso. Depois disso, podemos visualizar todas as coleções no banco de dados do Appsmith, na interface do usuário.

Para cada uma dessas coleções, foi possível executar as seguintes consultas de banco de dados
De todas as coleções, a chamada “Usuários” contém os detalhes de todos os usuários da plataforma.
Nesse estágio, existem várias maneiras de aumentar os privilégios para um administrador. É possível até mesmo modificar o hash da senha do usuário administrador ou adicionar políticas administrativas ao nosso usuário. Prosseguimos buscando as políticas administrativas do MongoDB, usando o comando FIND.

Descobrimos que a conta do administrador tem as seguintes políticas associadas a ela.
“políticas”:,Em seguida, usando o comando update, atualizamos as políticas atribuídas ao nosso usuário com as políticas administrativas. Ao clicar em “EXECUTAR”, obtivemos uma resposta bem-sucedida do MongoDB.

Para validar a vulnerabilidade, acessamos nossa conta de usuário por meio de um navegador diferente e descobrimos que ela tinha acesso a todas as funcionalidades e permissões administrativas para gerenciar usuários, espaços de trabalho e instâncias.

Tentamos acessar o endpoint, ou seja, “/api/v1/admin/env”, que é somente para administradores, e obtivemos uma resposta do servidor com sucesso.

Os invasores podem primeiro explorar a vulnerabilidade do XSS para roubar credenciais internas do MongoDB e, em seguida, uma vulnerabilidade SSRF pode ser explorada para se conectar ao MongoDB interno para executar consultas de banco de dados e obter a aquisição total da conta ou o aumento de privilégios.
Além disso, o Appsmith não tem uma restrição de inscrição na instalação padrão. Portanto, se uma instância do Appsmith for exposta à Internet, qualquer pessoa poderá se inscrever e ter acesso à funcionalidade vulnerável na qual a vulnerabilidade do SSRF foi descoberta.
Isso pode ter um impacto em grande escala, já que mais de 1.000 instâncias do Appsmith estão expostas na Internet:

A CloudSEK enviou essa vulnerabilidade ao Appsmith por meio de seu processo bem definido de divulgação de vulnerabilidades. Posteriormente, a equipe do Appsmith corrigiu esse problema em sua próxima versão. As versões 1.7.12 e superiores do Appsmith não têm essa vulnerabilidade.