Voltar
Engineering
Tabela de conteúdo

 

Leia a Parte 1 sobre GraphQL aqui.

No blog da semana passada, aprendemos sobre os conceitos básicos do GraphQL e como configurar um servidor GraphQL. Também discutimos algumas diferenças importantes entre o GraphQL e a API REST.

Aqui está uma breve recapitulação:

O GraphQL é uma linguagem de consulta de código aberto para APIs que ajuda a carregar dados de um servidor para o cliente de uma forma muito mais simples. Comparando vários aspectos do GraphQL e da API REST, vimos que as operações do GraphQL são superiores às da API REST. Embora os benefícios dessa linguagem de código aberto sejam muitos, ela vem com vulnerabilidades de segurança que os desenvolvedores tendem a encontrar de tempos em tempos.

Começando a partir daí, na segunda parte, discutiremos:

  • GraphQL: configurações incorretas comuns que permitem hackers
  • Testando configurações incorretas comuns no GraphQL

 

GraphQL: configurações incorretas comuns que permitem hackers

O GraphQL é uma das alternativas mais eficientes e flexíveis à API REST. No entanto, ela é vulnerável aos mesmos ataques aos quais a API REST está sujeita.

O GraphQL depende dos desenvolvedores de API para implementar seu esquema para validação de dados. Durante esse processo, eles poderiam introduzir erros inadvertidamente. Além disso, novos recursos e funcionalidades, que atendem aos requisitos do cliente, são adicionados aos aplicativos da web a cada hora. Isso também aumenta a chance de os desenvolvedores cometerem erros.

Aqui, destacamos algumas das configurações incorretas e problemas comuns com o GraphQL, que permitem que hackers o explorem.

  • Controle de acesso ou verificações de autorização impróprias

As limitações do processo de autenticação do usuário podem potencialmente conceder acesso não autorizado a qualquer pessoa. Caso o processo de autenticação esteja com defeito, o aplicativo web não restringe o acesso a um objeto ou recurso, o que leva à entrega dos dados de outro usuário sem realizar verificações de autorização. O método falho permite que os invasores ignorem a restrição de acesso pretendida, expondo os dados do usuário a abusos, exclusão ou alteração.

Vamos considerar o cenário em que um usuário, com o ID de objeto numérico: 5002, deseja recuperar suas PII, como ID de e-mail, senha, nome, número de celular etc. Se esse usuário, consciente ou inconscientemente, usar uma ID de usuário diferente (digamos, 5005) e essa ID pertencer a outro usuário ativo, mas a pesquisa vazar seus dados, isso mostra que o resolvedor do GraphQL permite acesso não autorizado.

A consulta a seguir consiste em um ID de usuário representando um usuário conectado e busca as PII do usuário:

 

consultar dados do usuário { usuários (id: 5002) { nome e-mail id senha Número de celular Chave de autorização Número da conta bancária Número CVV } }

 

No entanto, se o mesmo usuário autenticado conseguir obter os dados da ID 5005, isso significa que há controle de acesso impróprio a um objeto ou recurso. Ele permite que hackers/atacantes acessem os dados de vários usuários. Também permite que um invasor realize atividades maliciosas, como editar os dados do usuário, excluir o usuário do banco de dados etc.

 

  • Problema de limite de taxa e consultas aninhadas do GraphQL que lideram o ataque de DoS

Em uma única consulta, ele é capaz de realizar várias ações em resposta a várias solicitações HTTP. Esse recurso aumenta a complexidade das APIs do GraphQL, o que dificulta que os desenvolvedores de APIs limitem o número de solicitações HTTP. Se a solicitação não for tratada adequadamente pelo resolvedor na camada da API do GraphQL, ela abrirá uma porta para que os atores ataquem a API e realizem ataques de negação de serviço (DoS).

Para evitar isso, somente um número específico de solicitações por minuto deve ser permitido à API e, caso o número de solicitações exceda o limite, ela deve acionar um erro ou rejeitar a resposta.

Vejamos o exemplo a seguir dessas consultas aninhadas:

 

consulta NestedQuery { Todos os usuários { postagens { seguidor { autor { postagens { seguidor { autor { postagens { seguidor { autor { postagens { id } } } } } } } } } } } }

 

  • O sistema de introspecção padrão revela informações internas

Alguns endpoints da API permitem a comunicação entre servidores e não são destinados ao público em geral. No entanto, o recurso de introspecção do GraphQL torna isso possível sem muita dificuldade.

Suponha a instância em que alguém envia uma consulta em um endpoint interno apenas para obter acesso às credenciais de administrador e, assim, obter privilégios de administrador.

Aqui está um exemplo de um único endpoint que tem o potencial de permitir que invasores acessem chamadas de API ocultas a partir do back-end.

Hidden API calls in GraphQL

 

Existem vários sites, como https://apis.guru/graphql-voyager/ que exibem a lista completa de chamadas de API disponíveis no back-end. Isso fornece uma melhor compreensão da interface e também demonstra maneiras de coletar informações confidenciais do servidor.

Entire list of GraphQL API calls

Abordamos algumas das configurações incorretas aqui, mas pode haver muitas outras. Além disso, é vulnerável a todos os bugs que afetam qualquer outra API.

 

Testando configurações incorretas comuns no GraphQL

Aqui, exploraremos duas maneiras de testar essas configurações incorretas comuns, exploradas ainda mais para obter acesso a dados ou informações confidenciais:

  • Burp Suite — Ferramenta avançada de proxy de interceptação
  • Altair GraphQL — interface GraphQL disponível como software, extensão para sistema operacional e navegador.

 

Testando configurações incorretas do GraphQL com Suíte Burp

O Burp Suite é uma estrutura popular de pentesting que funciona como uma ótima ferramenta de proxy para interceptar e visualizar solicitações. Supondo que os leitores já saibam como configurá-lo, vamos nos concentrar apenas nos testes.

  • Essa é a aparência de uma solicitação HTTP normal no GraphQL:Normal HTTP request on GraphQL
  • Modifique a consulta POST de acordo com seus requisitos e envie-a para o servidor.
  • Se estiver configurado incorretamente, ele buscará dados confidenciais/internos.
  • No entanto, se você achar difícil visualizar ou modificar a consulta, poderá usar um plug-in do Burp chamado “GraphQL” para obter os mesmos resultados.

Burp plugin for GraphQL

 

Mas a principal desvantagem de testá-lo no Burp Suite é a visualização inadequada de toda a documentação do esquema. Isso pode fazer com que várias configurações incorretas comuns sejam ignoradas, a menos que localizemos a documentação adequada dos endpoints ou chamadas da API implementadas no back-end. Outro problema relacionado ao uso do Burp é que precisamos modificar ou depurar a consulta manualmente, o que torna o processo mais complexo. Todos esses problemas podem ser resolvidos com a ajuda do método a seguir.

 

Depurando o GraphQL com Altair GraphQL

O Altair ajuda na depuração de consultas do GraphQL e implementações de servidores. Ele corrige o problema de modificar as consultas manualmente e, em vez disso, ajuda a focar em outros aspectos.

O Altair GraphQL está disponível como um software para Mac, Linux e Windows OS e também como uma extensão para quase todos os navegadores. Ele fornece a documentação adequada de todo o esquema que está disponível no back-end. Tudo o que precisamos fazer é configurar o aplicativo web que estamos testando.

Three operations of GraphQL

 

Todas as três operações do GraphQL podem ser vistas na seção de documentação, conforme mostrado acima. Você pode explorar ainda mais essas opções para obter outros campos, endpoints de API etc.

Adding supported values

 

O Altair é capaz de resolver uma das tarefas mais desafiadoras desse processo: adicionar uma consulta manualmente. Ele vem com o recurso que permite a geração automática de consultas. Então, tudo o que precisamos fazer é passar os valores de tipo suportados.

Add Query

 

  • Clique no ADICIONAR CONSULTA conforme mostrado acima, para adicionar automaticamente uma consulta junto com seus argumentos e campos.
  • Agora, forneça os valores dos argumentos para testar se há erros ou configurações incorretas.

Altair GraphQL

 

O Altair facilita muito a busca de bugs em qualquer aplicativo da web. Você pode testar consultas do GraphQL e implementações de servidor com facilidade, pois o Altair executa a parte complexa do processo e permite que você se concentre nos resultados.

 

Conclusão

Em comparação com a API REST, o GraphQL oferece aos desenvolvedores padrões aprimorados de desenvolvimento de API. No entanto, ele tem suas próprias configurações incorretas de segurança que podem ser exploradas com relativa facilidade. No entanto, ele é capaz de preencher as lacunas criadas pela API REST. Como alternativa, o REST também pode ajudar a resolver as desvantagens do GraphQL. Elas não precisam ser chamadas de duas tecnologias incompatíveis. Além disso, acreditamos que essas tecnologias podem coexistir umas com as outras.

Nenhum item encontrado.

Blogs relacionados