Zum Hauptinhalt springen
Echtzeit-Radar & Feeds
Alle RSS Feeds ➔
👥 Community & Social
Windows Tipps & SecurityGrafikkarte vor Überhitzung schützen: So geht’s(25.09.2026 um 08:00 Uhr)
••••••••••
Windows Tipps & SecurityGrafikkarte vor Überhitzung schützen: So geht’s(25.09.2026 um 08:00 Uhr)
••••••••••
Intelligence View
⚡ tsecurity.de Intelligence

Entendendo IDOR na prática com um laboratório em Node.js

IDOR, ou Insecure Direct Object Reference, é uma vulnerabilidade de controle de acesso que acontece quando uma aplicação utiliza uma referência direta a um objeto interno — como um usuário, documento, pedido ou fatura — sem verificar se o u…

0
↗ Quelle (dev.to)
Reagiere als Erste:r — dein Feedback zählt!

IDOR, ou Insecure Direct Object Reference, é uma vulnerabilidade de controle de acesso que acontece quando uma aplicação utiliza uma referência direta a um objeto interno — como um usuário, documento, pedido ou fatura — sem verificar se o usuário autenticado tem permissão para acessar aquele recurso.



Considere este endpoint:




GET /api/documents/101






Se o usuário conseguir alterar 101 para 102 e acessar o documento de outra pessoa, temos um IDOR:




GET /api/documents/102







O problema não é o ID estar na URL. O problema é a API confiar nesse ID sem validar se o usuário pode acessar o objeto solicitado.







O projeto Security Labs



Para demonstrar essa vulnerabilidade na prática, criei o projeto open source Security Labs, um ambiente em Node.js com Express para estudar falhas comuns de segurança por meio de laboratórios interativos.



Repositório:



github.com/mensonones/security



Cada laboratório apresenta dois cenários:




















Modo Comportamento
Vulnerável Executa a ação sem aplicar a proteção necessária
Seguro Implementa a validação ou autorização adequada


O primeiro laboratório do projeto demonstra uma falha de IDOR.






Cenário do laboratório



A aplicação simula dois usuários:




















Usuário ID
Alice 1
Bob 2


Também existem dois documentos:




















Documento Proprietário
101 Alice
102 Bob


No modo vulnerável, Alice consegue acessar o documento de Bob alterando apenas o ID da requisição:




GET /api/idor/vulnerable/documents/102






No modo seguro, a API verifica o proprietário do documento e bloqueia a operação:




GET /api/idor/secure/documents/102









HTTP/1.1 403 Forbidden
Content-Type: application/json

{
"error": "Acesso Negado: Você não tem autorização para visualizar este documento."
}






Essa comparação demonstra uma diferença importante:




Autenticação identifica quem é o usuário. Autorização define quais recursos e ações estão disponíveis para ele.







Endpoint vulnerável



A versão vulnerável autentica o usuário, mas não realiza autorização em nível de objeto:




router.get('/vulnerable/documents/:id', checkAuth, (req, res) => {
const docId = parseDocumentId(req.params.id);

if (docId === null) {
return res.status(400).json({
error: 'ID de documento inválido.'
});
}

const doc = documents[docId];

if (!doc) {
return res.status(404).json({
error: 'Documento não encontrado.'
});
}

return res.json({
_warning:
'ENDPOINT VULNERÁVEL: Nenhuma validação de propriedade realizada.',
document: doc
});
});






O middleware checkAuth confirma quem está fazendo a requisição, mas o endpoint retorna o documento sem verificar se ele pertence ao usuário autenticado.



Nesse cenário, conhecer ou descobrir o identificador de outro documento é suficiente para acessá-lo.






Endpoint seguro



A versão corrigida adiciona a validação de propriedade:




router.get('/secure/documents/:id', checkAuth, (req, res) => {
const docId = parseDocumentId(req.params.id);

if (docId === null) {
return res.status(400).json({
error: 'ID de documento inválido.'
});
}

const doc = documents[docId];

if (!doc) {
return res.status(404).json({
error: 'Documento não encontrado.'
});
}

if (doc.ownerId !== req.userId) {
return res.status(403).json({
error:
'Acesso Negado: Você não tem autorização para visualizar este documento.'
});
}

return res.json({
message: 'Acesso autorizado.',
document: doc
});
});






A parte essencial da correção é esta:




if (doc.ownerId !== req.userId) {
return res.status(403).json({
error:
'Acesso Negado: Você não tem autorização para visualizar este documento.'
});
}






Mesmo que o usuário conheça o ID de outro documento, o backend impede o acesso indevido porque compara o proprietário do recurso com o usuário autenticado.






Validação de entrada



O laboratório também valida o formato do identificador recebido.



Evite depender apenas de:




parseInt(req.params.id, 10);






Isso porque entradas como 101abc podem ser convertidas para 101:




parseInt('101abc', 10);
// 101






Uma validação mais estrita pode ser feita assim:




function parseDocumentId(id) {
if (!/^\d+$/.test(id)) {
return null;
}

return Number(id);
}






Dessa forma, identificadores malformados são rejeitados com uma resposta 400 Bad Request.



Essa validação, entretanto, não corrige o IDOR. A correção da vulnerabilidade continua sendo a autorização em nível de objeto.






Como executar



Clone o repositório:




git clone https://github.com/mensonones/security.git
cd security






Instale as dependências e inicie o servidor:




npm install
npm start






Acesse o painel principal:




http://localhost:3000






Ou abra diretamente o laboratório de IDOR:




http://localhost:3000/labs/idor/









Como prevenir IDOR






Verifique o acesso ao objeto



Sempre confirme se o usuário autenticado pode acessar o recurso solicitado:




if (resource.ownerId !== req.userId) {
return res.status(403).json({
error: 'Acesso negado.'
});
}






A validação deve acontecer no backend, mesmo que a interface esconda botões, páginas ou funcionalidades de determinados usuários.






Restrinja a consulta desde a origem



Quando possível, inclua o usuário autenticado na própria consulta:




const document = await database.documents.findFirst({
where: {
id: documentId,
ownerId: req.userId
}
});






Isso reduz o risco de buscar o recurso e esquecer de validar sua propriedade posteriormente.






Não confie em IDs enviados pelo cliente



IDs presentes na URL, query string, headers ou corpo da requisição são dados controlados pelo usuário:




GET /api/orders/5001









{
"documentId": 101
}






O backend deve aplicar a autorização independentemente de onde o identificador foi recebido.






Não use UUID como substituto de autorização



UUIDs dificultam a enumeração, mas não impedem IDOR:




GET /api/documents/49fd2c62-9e20-4ce8-9373-e87bb72f0196






Se a API não verificar a permissão do usuário, o endpoint continua vulnerável.



Identificadores difíceis de descobrir são apenas uma camada complementar de proteção.






Conclusão



IDOR é uma vulnerabilidade simples, mas pode permitir acesso a documentos privados, dados pessoais, pedidos, faturas e outros recursos sensíveis.



O erro normalmente nasce desta suposição:




Se o usuário está autenticado, ele pode acessar o recurso.




A pergunta correta é:




Este usuário autenticado pode executar esta ação sobre este objeto específico?




O laboratório de IDOR do projeto Security Labs demonstra essa diferença de forma prática, comparando um endpoint vulnerável com uma implementação segura.



O código completo está disponível em:



github.com/mensonones/security



Autenticação identifica o usuário. Autorização determina o que ele pode fazer.

1. Sofort-Triage & Abwehrmaßnahmen

SOC Incident Playbook: Remote Code Execution (RCE) Defense
Syntax validiert (0 Fehler)
title: Detect Exploitation - Entendendo IDOR na prática com um laboratório em Node.js
id: 4a2aaa35-7c92-4ced-a2a3-17b92be91ad5
status: experimental
description: Automatisch generierte SIEM-Erkennungsregel basierend auf CTI Intelligence
references:
  - https://tsecurity.de/
author: iShareStuff CTI Automated Detection Engine
date: 2026-09-25
logsource:
  category: network_connection
  product: any
detection:
  selection:
      CommandLine|contains:
        - 'exploit'
  condition: selection
falsepositives:
  - Legitime administrative Zugriffe oder Penetrationstests
level: high
tags:
  - attack.initial_access
Syntax validiert (0 Fehler)
rule CTI_Threat_Indicator {
    meta:
        author = "iShareStuff CTI Automated Detection Engine"
        date = "2026-09-25"
        description = "YARA Signature for "
    strings:
        $str = "Entendendo IDOR na prática com" ascii wide
    condition:
        any of them
}
Syntax validiert (0 Fehler)
index=security sourcetype IN ("cisco:asa", "pan:traffic", "zeek_conn", "suricata", "WinEventLog:Security")
("Entendendo IDOR na prtica com um laborat")
| stats count earliest(_time) as first_seen latest(_time) as last_seen by src_ip, dest_ip, dest_host, signature
| eval first_seen=strftime(first_seen, "%Y-%m-%d %H:%M:%S"), last_seen=strftime(last_seen, "%Y-%m-%d %H:%M:%S")
| sort - count
Syntax validiert (0 Fehler)
message: "*Entendendo IDOR na prtica com um laborat*"
Syntax validiert (0 Fehler)
CommonSecurityLog
| where Message has "Entendendo IDOR na prtica com um laborat"
| summarize EventCount = count(), FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated) by SourceIP, DestinationIP, DestinationPort, Activity
| extend DetectionRule = "iShareStuff-CTI-Compiled"
| sort by EventCount desc

2. Cyber Threat Intelligence & Forensik

CTI Threat Relationship Graph2 Knoten / 1 Relationen
CVE / Incident Software MITRE ATT&CK CWE Weakness IoC
🎯
MITRE ATT&CK Matrix Navigator 14 Taktiken
Reconnaissance
-
Resource Development
-
Initial Access
Execution
Persistence
-
Privilege Escalation
Defense Evasion
Credential Access
-
Discovery
-
Lateral Movement
-
Collection
-
Command and Control
Exfiltration
-
Impact
tsecurity.de Cognitive Threat RAG
Fokus-Vektor:

Kognitive Analyse für identifizierte Bedrohung: Erhöhte Bedrohungslage im Bereich Entendendo IDOR na prática com um labora.... Basierend auf 368k Vektor-Korrelationen werden sofortige Isolationsmaßnahmen für betroffene Endpunkte empfohlen.

🛡️ Angriffsfläche & Exposure

Netzwerk/Remote-Zugriff ohne Vorauthentifizierung möglich.

⚡ Empfohlene Sofortmaßnahmen
  • 1. Perimeter-Inspektion: Relevante Portfreigaben und exponierte Endpunkte unverzüglich scannen.
  • 2. Patch-Applikation: Hersteller-Hotfix einspielen oder betroffene Daemons in isolierte DMZ-Segmente überführen.
  • 3. Telemetrie & EDR-Alerts: Prozessaufrufe und Child-Processes auf anomale Shell-Spawns überwachen.
🔗 Semantisch verwandte Zero-Days MariaDB 11.7 VEC
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Entendendo IDOR na prática com um laboratório em Node.js

Thematisch verwandte Begriffe: Entendendo, IDOR, prática, laboratório · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Zum Aktualisieren ziehen
ZERO-DAY CVE-2026-97875 | Rojo's "rojo serve" HTTP API (default port 34872) has no Host/Origin hea…
Advisory →
tsecurity.de Icon
Offline-Lesen, Eilmeldungen & 0ms Ladezeit

Installiere tsecurity.de direkt auf deinen Home-Bildschirm für das ultimative Vollbild-Magazinerlebnis ohne Browser-Leisten.

Nächster Beitrag