OWASP TOP 10 API - Broken Function Level Authorization
No OWASP TOP 10 API 2023 foi incluída uma nova vulnerabilidade conhecida como Broken Function Level Authorization. Nesse artigo vamos conhecer essa vulnerabilidade.
O que é o Broken Function Level Authorization?
O Broken Function Level Authorization é uma vulnerabilidade que permite com que um atacante acesse funções em endpoints que ele não deveria ter acesso.
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.