OWASP TOP 10 API - Broken Function Level Authorization — Falhas de Controle de Acesso em APIs
A vulnerabilidade Broken Function Level Authorization (BFLA) é um dos problemas mais críticos em Cyber Security envolvendo APIs modernas, permitindo que usuários acessem funcionalidades e operações que deveriam estar restritas por níveis de permissão.
Reconhecida por sua alta incidência em ambientes reais, essa vulnerabilidade integra o OWASP API Security Top 10 (2023) e representa um risco significativo para aplicações que expõem múltiplos perfis de acesso, como sistemas corporativos, plataformas SaaS e serviços financeiros. A exploração pode levar à manipulação de dados críticos, execução de operações privilegiadas e comprometimento da integridade do sistema.
O que é o Broken Function Level Authorization?
O Broken Function Level Authorization é uma vulnerabilidade que ocorre quando o servidor não valida corretamente os privilégios associados ao usuário autenticado, possibilitando acesso indevido a ações administrativas ou funções sensíveis da aplicação.
Cenários em que encontramos o Broken Function Level Authorization
Imagine que um jogo utilize uma API para gerenciar os cargos dos jogadores. A API em questão possuí os endpoints:
/v1/players/roles/:id
/v1/players/roles/add/:idO endpoint "/v1/players/roles/:id" é utilizado para verificar os cargos/niveis do jogador referente ao "id" especificado na rota. Esse endpoint é aberto para que o jogo verifique os cargos dos jogadores.
O endpoint "/v1/players/roles/add/:id" é utilizado para atribuir um novo cargo/nivel à um jogador, portante esse endpoint deve ser protegido para que apenas administradores tenham acesso. Mas e se esse endpoint não estivesse configurado para bloquear requisições de usuários que não possuem permissões de administradores? Caso isso acontecesse, qualquer usuário/jogador conseguiria atualizar seus cargos/niveis dentro do jogo.
Cenário #1
Suponhamos que o token "xxx.xxx.xxx" não possuí permissões de administradores.
GET /v1/players/roles/12
Host: api.example.com
x-access-token: xxx.xxx.xxx
200 OK
...
{
"status":"success",
"role": "Soldier"
}POST /v1/players/roles/add/12
Host: api.example.com
Content-type: application/json
...
x-access-token: xxx.xxx.xxx
{
"newrole": "Legend",
"oldrole": "Soldier"
}
200 OK
...
{
"status":"success",
"message": "role updated"
}Esse cenário está vulnerável a Broken Function Level Authorization, pois um endpoint que contém uma função administrativa deveria ser configurado apenas para administradores, mas está exposto para usuários comuns.
Como prevenir o Broken Function Level Authorization?
Configure as permissões corretas para endpoints que contém funções administrativas. Uma boa prática é utilizar middlewares para gerenciar autorização dos endpoints, pois se uma middlware foi configurada em "/v1/admin", o comum é que todas as rotas que vierem depois de "/v1/admin/xxx" irão precisar de autorização também, assim evitando o Broken Function Level Authorization.
