Pular para o conteúdo
Todos os conceitos

Acesso decidido por um parâmetro

Quando um parâmetro (um filtro, um nome de arquivo) escolhe o recurso, trocá-lo alcança o dado de outra pessoa.

O IDOR clássico troca um id numérico no endereço (?id=1003 vira ?id=1000). Mas a mesma falha acontece com qualquer parâmetro que escolhe o recurso, mesmo quando ele não parece um id: um filtro, um nome de time, um nome de arquivo em download.

GET /api/reports/download?file=report-team-pampa-2026q1.csv

Se o servidor confere só que você entrou, e então serve o arquivo pelo nome, trocar pampa por serra entrega o relatório do outro time. É escalonamento horizontal: você alcança o recurso de outro usuário do mesmo nível, sem virar admin. O parâmetro ser um texto (e não um número) não muda nada: ele ainda é uma referência direta a um objeto que não é seu.

O conserto é o mesmo do IDOR: amarre o recurso ao dono e cheque, a cada pedido, se o usuário tem direito àquele objeto (if report.team !== session.team: deny). Esconder, embaralhar ou usar um sufixo esquisito não resolve. Em Python, send_file(request.args["file"]) sem checar o dono é o mesmo erro (e abre path traversal se o nome não for validado).

Atacante ?file=report-team- pampa -2026q1.csv ?file=report-team- serra -2026q1.csv troca o time no nome Servidor serve sem checar o dono
O download escolhe o arquivo pelo parâmetro file; trocar o nome do time pampa por serra entrega o relatório do vizinho, sem virar admin.

Aparece nestes desafios