GraphQLer: Enhancing GraphQL Security with Context-Aware API Testing
O GraphQLer é um framework de teste de segurança automatizado de código aberto que aumenta a segurança de APIs GraphQL ao construir grafos de dependência tipados a partir de esquemas vivos para sintetizar cadeias de vulnerabilidades de múltiplas etapas, superando assim ferramentas existentes como ZAP e EvoMaster na detecção de falhas complexas e dependentes de estado, tais como IDOR, UAF e vulnerabilidades de injeção.
Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo
Imagine a internet como uma cidade gigante e movimentada onde diferentes programas de computador (aplicativos) conversam constantemente entre si para compartilhar informações. Por anos, essas conversas seguiram um mapa estrito e previsível: se você quisesse uma foto, pedia pela pasta "foto"; se quisesse uma mensagem, pedia pela pasta "mensagem". Isso era como pedir algo de um menu onde cada prato tem um nome e um local fixos. Mas recentemente, uma nova forma de conversar chamada GraphQL tornou-se popular. Em vez de um menu fixo, o GraphQL é como uma máquina de vendas mágica e metamorfa. Você pode pedir exatamente o que quer, e ela tentará construir isso para você na hora. O problema é que, como essa máquina é tão flexível, às vezes ela esquece de verificar quem está parado na frente dela. Uma máquina de vendas comum poderia dar apenas um refrigerante para alguém com uma moeda, mas esta máquina mágica poderia acidentalmente entregar um diário particular ou uma conta bancária se você pedir da maneira certa. É aqui que os pesquisadores de segurança entram, tentando descobrir como enganar a máquina para revelar seus segredos sem realmente destruir a cidade.
O artigo que você está prestes a ler apresenta um novo detetive digital chamado GraphQLer. Pense na maioria dos scanners de segurança como turistas desajeitados que se aproximam da máquina de vendas, apertam um botão aleatório e veem o que acontece. Se apertarem "Refrigerante" e receberem um refrigerante, eles seguem em frente. Se apertarem "Água" e receberem um erro, eles desistem. Eles nunca percebem que, para conseguir o "Estoque Secreto", primeiro você tem que apertar "Comprar Refrigerante", depois "Pegar Recibo" e, então, apertar "Estoque Secreto". As ferramentas antigas são burras demais para conectar os pontos; elas testam cada botão isoladamente e perdem as sequências complexas necessárias para quebrar o sistema.
O GraphQLer é diferente. É como um detetive que primeiro estuda as plantas da máquina (o "schema") para entender como os botões estão conectados. Ele constrói um mapa mental mostrando que o "Botão A" cria um novo item, o "Botão B" deleta um item e o "Botão C" ainda pode ser capaz de ver um item mesmo depois que ele foi removido. Com esse mapa, o GraphQLer não apenas aperta botões aleatoriamente; ele cria cadeias específicas de ações. Ele simula um cenário onde um usuário compra um item, depois tenta roubá-lo, ou o deleta e depois tenta lê-lo novamente.
Os pesquisadores testaram este novo detetive em 21 APIs reais e falsas, porém realistas (os sistemas de computador sendo testados). Eles descobriram que o GraphQLer foi uma melhoria massiva em relação às ferramentas antigas. Enquanto as melhores ferramentas existentes conseguiam alcançar apenas cerca de 29% dos botões da máquina, o GraphQLer conseguiu alcançar 85,52% deles. Mais importante ainda, quando se tratava de encontrar problemas de segurança complexos, as ferramentas antigas encontraram zero dos problemas de múltiplos passos. O GraphQLer, no entanto, encontrou todas as cinco vulnerabilidades "IDOR" confirmadas (onde você pode ver as coisas de outra pessoa apenas mudando um número) e até detectou um erro de "Use-After-Free" (onde você pode ver um arquivo após ele ter sido deletado).
Em um teste do mundo real em um sistema financeiro (que os autores chamam de "FinServ" para manter o anonimato), o GraphQLer encontrou oito potenciais falhas de segurança sem precisar de senhas ou documentos secretos. Ele até encontrou maneiras de fazer o sistema travar e revelar seu código interno, o que é um grande erro de segurança. O artigo também mostrou que o GraphQLer pode reproduzir vulnerabilidades conhecidas em uma plataforma de código aberto popular chamada Saleor, provando que ele funciona em sistemas que já são conhecidos por estarem quebrados.
Os autores são muito cuidadosos ao dizer que, embora sua ferramenta seja excelente para encontrar esses tipos específicos de erros de reação em cadeia, ela não é uma varinha mágica que resolve tudo. Ela ainda tem dificuldades com alguns cenários muito específicos e complexos onde a máquina exige várias informações ao mesmo tempo para funcionar. Mas para a vasta maioria dos aplicativos modernos que usam essa tecnologia flexível do GraphQL, o GraphQLer prova que você não pode mais testar botões um por um. Você tem que entender a história que a máquina está contando e, só então, poderá encontrar onde estão os furos no roteiro.
Afogado em artigos na sua área?
Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.