June 1, 2026
IDOR: o que é, como ocorre, riscos associados e formas de mitigação
IDOR é uma vulnerabilidade onde um atacante pode modificar um objeto presente na aplicação por meio de URLs ou parâmetros e obtêm acesso a…
newe
2 min read
IDOR é uma vulnerabilidade onde um atacante pode modificar um objeto presente na aplicação por meio de URLs ou parâmetros e obtêm acesso a informações de outros usuários da aplicação.
Tome como exemplo a seguinte URL:
http://localhost:3000/profile/user/1http://localhost:3000/profile/user/1O objeto referenciado trata-se de uma Primary Key (id) presente no banco de dados da aplicação, ela é responsável por identificar os usuários internamente na aplicação.
Abaixo, podemos visualizar um usuário e suas correspondentes informações.
Ao alterar o objeto na URL em questão, incrementando um, a aplicação retorna as informações do usuário correspondente a aquele ID.
Como a vulnerabilidade acontece?
A vulnerabilidade ocorre devido a uma falha no processo de desenvolvimento, onde a aplicação valida a autenticação do usuário (Quem ele é), mas não valida a autorização para acessar certas informações na plataforma.
...
@app.route('/profile/user/<id>' , methods=['GET'])
def profile(id):
id_usuario = user_info(id)
if not session.get("logado"):
return redirect(url_for('login'))
elif id_usuario is None:
return render_template('404.html')
return render_template('profile.html', usuario=id_usuario)
......
@app.route('/profile/user/<id>' , methods=['GET'])
def profile(id):
id_usuario = user_info(id)
if not session.get("logado"):
return redirect(url_for('login'))
elif id_usuario is None:
return render_template('404.html')
return render_template('profile.html', usuario=id_usuario)
...Como visto no código acima, a função def profile(id) apenas valida a autenticação do usuário para acessar as informações relacionadas ao profile. O que causa a vulnerabilidade no controle de acesso e por aplicação usar objetos como identificadores, torna-se um IDOR.
Para corrigir tal vulnerabilidade, é necessário o controle de acesso não permissivo no acesso aos dados de outros usuários.
…
@app.route('/profile/user/' , methods=['GET'])
def profile(id):
id_usuario = user_info(id)
if not session.get("logado"):
return redirect(url_for('login'))
elif id != session['id']:
return render_template('403.html')
elif id_usuario is None:
return render_template('404.html')
return render_template('profile.html', usuario=id_usuario)
……
@app.route('/profile/user/' , methods=['GET'])
def profile(id):
id_usuario = user_info(id)
if not session.get("logado"):
return redirect(url_for('login'))
elif id != session['id']:
return render_template('403.html')
elif id_usuario is None:
return render_template('404.html')
return render_template('profile.html', usuario=id_usuario)
…Segue um diagrama funcional da aplicação funcionando corretamente e com a vulnerabilidade presente.
Cenários
Em alguns contextos o identificador pode mudar para datas, emails, cpfs, nomes de arquivos, é primordial entender o funcionamento da plataforma para identificar vulnerabilidade de IDOR. Todos esses abaixo são possíveis vetores para vulnerabilidade de IDOR.
/api/usuarios?email=joao@empresa.com
/api/pedidos?cpf=12345678900
/api/export?file=relatorio_8891.pdf
/api/messages?conversationId=8821
/api/pedido?id=Q2FsaWRhZGU9MTIz/api/usuarios?email=joao@empresa.com
/api/pedidos?cpf=12345678900
/api/export?file=relatorio_8891.pdf
/api/messages?conversationId=8821
/api/pedido?id=Q2FsaWRhZGU9MTIzImpacto
- Exposição de dados sensíveis do usuário, como nome completo, CPF, endereço, e-mail, telefone, etc.
- Danos à reputação, caso os dados dos usuários sejam exfiltrados e vendidos
- Multas regulatórias (LGPD, GDPR)
- Escalação de privilégios, caso haja a permissão para modificar outros usuários
Mitigação
- Implementar um controle de autorização validando quais objetos os usuários são capazes de acessar.
- Usar identificadores complexos (UUIDs) ou não sequenciais como um medida de defesa em profundidade.
- Evitar a exposição de identificadores em URLs e requisições, utilize as informações de sessão para determinar qual usuário está autenticado.
- Aplicar verificações de autorização do lado do servidor: Toda solicitação que acessa um objeto deve verificar se o usuário autenticado tem permissão para acessar esse objeto específico. Não confie apenas na autenticação.
Referências
https://cwe.mitre.org/data/definitions/639.html https://portswigger.net/web-security/access-control/idor https://cheatsheetseries.owasp.org/cheatsheets/Insecure_Direct_Object_Reference_Prevention_Cheat_Sheet.html