Conhecendo o Mass Assignment

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ário e envia os dados diretamente para o banco de dados. Este tipo de vulnerabilidade normalmente acontece em páginas de cadastro em sistemas e páginas para atualizar o perfil do usuário.

Como podemos explorar o Mass Assignment?

Na maioria dos códigos, o Mass Assignment ocorre quando obtemos os dados informados pelo usuário e enviamos diretamente para o banco de dados.

Código 1

Observe que o código acima não valida as informações inseridas pelo usuário. Normalmente a função update recebe um array com os parâmetros e valores que serão atualizados, desta forma ficando ainda mais fácil o processo de desenvolvimento sem precisar especificar os dados que serão atualizados.

Código de exemplo abaixo:

Código 2

O código acima irá atualizar o nome, email e a senha do usuário. Vemos que no Código 1 não especificamos os dados que serão atualizados, apenas passamos os dados inseridos pelo usuário para a função update, então para um usuário atualizar sua senha e seu email, precisa enviar os seguintes parâmetros para a aplicação: senha=senha@123&[email protected].

Caso essa aplicação estiver armazenando as permissões dos usuários no banco de dados na mesma tabela onde possui a vulnerabilidade de Mass Assignment, qualquer usuário conseguirá atualizar suas permissões, mesmo não sendo administrador do sistema.

Podemos explorar a vulnerabilidade com um parêmetro adicional “permissao“: nome=nome&senha=senha@123&[email protected]&permissao=administrador.

Perceba que adicionamos o parâmetro “permissao” e atribuímos o valor “administrador”, desta forma, a aplicação não irá alterar somente os campos nome e senha, mas também irá alterar o campo “permissao”.

Como corrigimos o Mass Assignment?

Para corrigirmos o Mass Assignment, precisamos criar um array para que o usuário não tenha controle sobre os índices do array, pois são eles que indicam a informação que será atualizada.

Então podemos fazer um código parecido com este:

Código 3

Desta forma iremos atualizar apenas o nome, email e a senha inserida pelo usuário, e qualquer outro parâmetro que não esteja entre os 3 citados acima, será ignorado pela aplicação.

Alguns frameworks tem proteção contra este tipo de vulnerabilidade, no caso do PHP o laravel tem uma proteção contra esse tipo de ataque onde é possível especificar na model uma variavel “protected” que contem a lista de quais campos os usuários podem atualizar.

Algumas referências:

https://cheatsheetseries.owasp.org/cheatsheets/Mass_Assignment_Cheat_Sheet.html

https://github.com/OWASP/API-Security/blob/master/2023/en/src/0xa3-broken-object-property-level-authorization.md

Onde praticar Mass Assignment ?

Atualmente o hackingclub possuí 2 CTFs que podemos explorar Mass Assignment, dentre elas as máquinas: Ship e Hackhristmas Express.

O Hacking Club é uma plataforma de treinamento em cybersecurity, que permite você aprender hacking de forma totalmente prática.

Temos mais de 50 ambientes com vulnerabilidades reais com write-ups para você treinar e aprender hacking. Semanalmente  lançamos máquinas gratuitas para você praticar e se desafiar no hacking!