Explorando o Mass Assignment — Manipulação Indevida de Dados em APIs e Aplicações Web
A vulnerabilidade Mass Assignment é amplamente explorada em cenários de Cyber Security, pentests e desafios de CTF (Capture The Flag), permitindo que atacantes manipulem atributos internos de objetos que não deveriam ser controlados por usuários comuns. Essa falha ocorre quando aplicações vinculam automaticamente dados recebidos em requisições a estruturas internas sem validação adequada dos campos permitidos.
Na prática, o problema surge quando APIs e aplicações web processam entradas do usuário e enviam os dados diretamente para o banco de dados ou para modelos internos da aplicação sem restrições explícitas de propriedades. Esse comportamento pode permitir a modificação de permissões, alteração de papéis de usuário, manipulação de saldos financeiros e acesso indevido a funcionalidades privilegiadas — especialmente em páginas de cadastro, atualização de perfil e formulários administrativos.
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!