Ir para o conteúdo

API4:2019 Lack of Resources & Rate Limiting

Agentes Ameaça/Vetores Ataque Falha Segurança Impactos
Específico da API : Abuso 2 Prevalência 3 : Deteção 3 Técnico 2 : Específico Negócio
Para abusar destas falhas basta realizar pedidos simples à API. Não é necessária autenticação. Múltiplos pedidos concorrentes podem ser realizados por um único computador ou fazendo uso de recursos computacionais na nuvem. É comum encontrar APIs que não limitam o número de pedidos ou que usam limites desajustados. O abuso destas falhas pode conduzir à negação de serviço (DoS), deixando a API incapaz de satisfazer outros pedidos ou mesmo indisponível.

A API é vulnerável?

Os pedidos a uma API consomem recursos tais como largura de banda, processador, memória e armazenamento. A quantidade de recursos necessária para satisfazer um pedido depende essencialmente da informação enviada pelo utilizador e da lógica de negócio implementa pelo endpoint. Deve ainda ter-se em consideração que os pedidos de diferentes clientes concorrem entre si por estes recursos. A API é vulnerável se pelo menos um dos seguintes limites não está definido ou foi configurado com um valor desajustado (e.g. demasiado baixo/alto):

  • Tempo máximo de execução
  • Quantidade máxima de memória alocada
  • Número de ficheiros abertos
  • Número de processos
  • Tamanho do pedido (e.g., uploads)
  • Número de pedidos por cliente/recurso
  • Número de registos por página devolvidos numa única resposta a um pedido

Exemplos de Cenários de Ataque

Cenário #1

Um atacante carrega uma imagem de grandes dimensões realizando um pedido POST para o endpoint /api/v1/images. Após concluir o carregamento a API cria várias miniaturas de diferentes dimensões. Devido à dimensão da imagem carregada a memória disponível é esgotada durante a criação das miniaturas e a API fica indisponível.

Cenário #2

Uma aplicação apresenta uma listagem de utilizadores até ao limite de 200 por página. A lista dos utilizadores é obtida por meio dum pedido ao endpoint /api/users?page=1&size=200. Um atacante altera o valor do parâmetro size de 200 para 200000, causando problemas de performance no servidor de base de dados. Enquanto se verificam estes problemas de performance a API fica indisponível e incapaz de satisfazer pedidos de qualquer utilizador (DoS).

O mesmo cenário pode ser usado para provocar erros do tipo Integer Overflw ou Buffer Overflow.

Como Prevenir

  • Tecnologias como Docker tornam mais fácil a definição de limites de memória, processador, número de restarts, número de ficheiros abertos e processos.
  • Limitar o número máximo de pedidos à API, por cliente, dentro dum determinado período de tempo.
  • Notificar o cliente quando o limite de pedidos foi excedido, informando o valor desse limite e o tempo restante para poder voltar a realizar novos pedidos.
  • Validar de forma adequada os parâmetros enviados na query string e corpo do pedido, em particular aqueles que controlam o número de registos a retornar na resposta.
  • Definir e forçar um tamanho máximo de dados para todos os parâmetros e dados de entrada, tais como comprimento máximo para os texto ou número máximo de elementos duma lista.

Referências

OWASP

Externas