Broken Object Property Level Authorization — Falhas de Acesso a Propriedades Sensíveis em APIs
A vulnerabilidade Broken Object Property Level Authorization (BOPLA) representa uma falha crítica de controle de acesso em APIs modernas, permitindo que usuários acessem ou modifiquem propriedades específicas de objetos sem possuir os privilégios adequados. Diferente de falhas que expõem objetos inteiros, esse problema ocorre em níveis mais granulares da estrutura de dados, tornando sua detecção mais complexa e ampliando os riscos de exposição de informações sensíveis.
Incluída no OWASP API Security Top 10 (2023), essa vulnerabilidade é comum em aplicações que retornam respostas excessivas de dados (excessive data exposure) ou não validam corretamente permissões em campos específicos de requisições e respostas. Quando explorada, pode permitir vazamento de dados confidenciais, manipulação de atributos críticos e elevação indevida de privilégios dentro da aplicação.
No OWSAP TOP 10 2023 RC foi adicionado a vulnerabilidade Broken Object Property Level Authorization que engloba Excessive Data Exposure e Mass Assignment. Veja na imagem abaixo:

Então, quando um usuário tem acesso a propriedades de um objeto sem possuir os privilégios necessarios, significa que a API está vulnerável a Broken Object Property Level Authorization.
Como explorar o Broken Object Property Level Authorization?
Uma das formas de explorar o Broken Object Property Level Authorization é alterar propriedades de um objeto que não teriamos privlégios para alterar. Um exemplo disso é o Mass Assignment, onde alteramos propriedades além das que foram configuradas para o usuário alterar. Para conhecer, explorar e corrigir o Mass Assignment, veja o artigo escrito em nosso blog:

Outra forma de explorar o Broken Object Property Level Authorization é encontrando endpoints que expõe propriedades de um Objeto, segue o exemplo abaixo:
Cenário:
Um aplicativo de uma rede social tem uma funcionalidade de reportar usuários mal intencinados. Nessa funcionalidade, o aplicativo vai enviar uma requisição POST para /api/report/user:
POST /api/report/user
userid=9XuMka&reported_by=4LksI3E a aplicação responde com as seguintes informações:
{
"userid_reported": "9XuMka",
"user_reported": {
"name": "John",
"lastName": "Doe",
"email": "[email protected]",
"age": "25",
"cpf": "999.999.999-99",
"birthdate": "1998"
}
}Veja que a aplicação expôs os dados do usuário reportado, como: nome, sobrenome, email, idade, cpf e data de nascimento.
Como se proteger contra o Broken Object Property Level Authorization?
Quando estiver desenvolvendo uma API, fique atento as funcionalidades que comunicam com propriedades de um objeto, como o Mass Assignment. Para proteger contra o Mass Assignment deve verificar e sanitizar o input do usuário para que ele não consiga alterar valores de outras propriedades.
Outro ponto importante é verificar a resposta que enviamos para uma requisição, pois não podemos expor propriedades que não foram especificadas na requisição do lado do cliente. No exemplo acima, vemos que na requisição foi especificado apenas o "userid" e a resposta nos trouxe o nome, sobrenome, email, idade, cpf e data de nascimento do usuário reportado. Isso é prejudicial, pois ajuda os atacantes realizarem phishing com a vítima.
Referências


