OWASP TOP 10 API - Broken Function Level Authorization — Falhas de Controle de Acesso em APIs

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/:id

O 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.

Referências

API-Security/editions/2023/en/0xa5-broken-function-level-authorization.md at master · OWASP/API-Security
OWASP API Security Project. Contribute to OWASP/API-Security development by creating an account on GitHub.