Weaknesses of type CWE-566
8 resultsBypass de autorização via chave primária SQL controlada pelo usuário
Ocorre quando a aplicação usa um parâmetro controlado pelo usuário (como um ID vindo da URL ou formulário) diretamente em uma cláusula WHERE do SQL, sem validar se aquele usuário tem permissão de acessar o registro. Um atacante pode simplesmente alterar o ID para acessar dados ou realizar ações em registros de outros usuários.
Uma API retorna `/api/pedidos?id=123`. A aplicação executa `SELECT * FROM pedidos WHERE id = ?` sem verificar se o usuário logado é o dono do pedido 123. Um atacante muda a URL para `?id=456` e acessa o pedido de outro cliente, ou um admin consegue editar pedidos de qualquer cliente mudando apenas o ID na requisição.
Sempre valide se o usuário autenticado tem permissão antes de acessar o registro: combine a chave primária com uma cláusula adicional no WHERE (ex: `WHERE id = ? AND usuario_id = ?`) ou implemente controle de acesso explícito na lógica de negócio, nunca confie apenas no ID enviado pelo cliente.