Conhecendo o Broken Object Property Level Authorization

Conhecendo o Broken Object Property Level Authorization

Broken Object Property Level Authorization é a nova vulnerabilidade inserida no OWASP TOP 10 2023 RC (Release Candidate).

O que é o Broken Object Property Level Authorization?

O Broken Object Property Level Authorization é uma vulnerabilidade encontrada em APIs que expõe e permite acesso a objetos que o usuário não poderia acessar sem privilégios.

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:

Conhecendo o Mass Assignment
O que é o Mass Assignment?O Mass Assignment é uma vulnerabilidade que permite com que o atacante manipule informações que não poderiam ser atualizadas ou inseridas por um usuário comum no banco de dados. Essa vulnerabilidade geralmente ocorre quando a aplicação não valida os campos enviados pelo usu…

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=4LksI3

E 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

Introduction to OWASP API Security Top 10 2023 (RC)
Introduction to API: An Application Programming Interface (API) is a component that enables communication between two different systems by following certain rules. It also adds a layer of abstraction between the two systems where the requester does not know how the other system has derived the resul…
API-Security/0xa3-broken-object-property-level-authorization.md at master · OWASP/API-Security
OWASP API Security Project. Contribute to OWASP/API-Security development by creating an account on GitHub.
API-Security/0xa3-excessive-data-exposure.md at master · OWASP/API-Security
OWASP API Security Project. Contribute to OWASP/API-Security development by creating an account on GitHub.
API-Security/0xa6-mass-assignment.md at master · OWASP/API-Security
OWASP API Security Project. Contribute to OWASP/API-Security development by creating an account on GitHub.