Erfahren Sie, was Insecure Direct Object Reference (IDOR) bedeutet, wie Angreifer diese Schwachstelle ausnutzen und wie Entwickler IDOR-Schwachstellen mit Hilfe von sicheren Codierungspraktiken, Zugriffskontrollmustern und automatisierten Testplattformen verhindern können.
Was ist IDOR?
Insecure Direct Object Reference (IDOR) ist eine Sicherheitslücke, bei der eine Anwendung interne Objektkennungen wie Benutzer-IDs, Bestellnummern oder Dateinamen preisgibt, ohne zu überprüfen, ob der Anfragende zum Zugriff auf dieses Objekt berechtigt ist. Durch Ändern eines Parameters in einer URL oder einem API-Aufruf kann ein Angreifer Daten anzeigen, ändern oder löschen, auf die er keinen Zugriff haben sollte.
IDOR verstehen: Warum diese Schwachstelle immer noch wichtig ist
IDOR gehört zu der großen Kategorie der Defekte Zugangskontrolledas von OWASP seit Jahren als eines der kritischsten Web-Sicherheitsrisiken eingestuft wird. Die Gefahr von IDOR liegt in seiner Einfachheit: Der Angreifer benötigt keine fortgeschrittenen Ausnutzungstechniken, keine Verschlüsselung von Nutzdaten und keine Ausweitung von Berechtigungen. Ein einziger geänderter Parameter - oft nur eine Zahl - kann private Informationen preisgeben.
Ein typisches anfälliges Muster sieht folgendermaßen aus:
bash
/api/benutzer/profil?id=1002
Wenn die Anwendung den Besitz oder die Berechtigung nicht überprüft, kann die Änderung der ID in 1003 kann die Daten eines anderen Nutzers preisgeben.
Moderne Anwendungen - insbesondere solche, die APIs, Microservices oder mobile Clients beinhalten - verlassen sich häufig auf parametrisierten Objektzugriff. Diese Architektur ist zwar schnell und flexibel, kann aber leicht IDOR einführen, wenn die Berechtigungsprüfungen inkonsistent sind oder fehlen.

CVE-2025-13526: Ein echter IDOR-Fall in freier Wildbahn
Eines der jüngsten öffentlichkeitswirksamen Beispiele für die Nutzung von IDOR ist CVE-2025-13526Die Software betrifft das beliebte WordPress-Plugin OneClick Chat to Order (Versionen ≤ 1.0.8).
- Die Schwachstelle befindet sich in der Plugin
wa_bestellung_danke_aufhebenFunktion. Das Plugin vertraut auf eineauftrag_idParameter aus dem URL-Abfrage-String - ohne zu prüfen, ob die Anfrage vom rechtmäßigen Eigentümer der Bestellung stammt. - Angreifer (auch unauthentifizierte) könnten einfach die
auftrag_idWert auf der URL der "Danke"-Seite (z. B. durch Ändernorder_id=123456zuorder_id=123455) und die Bestelldaten anderer Kunden abrufen. Enthaltene Daten Namen, E-Mail-Adressen, Telefonnummern, Rechnungs-/Versandadressen, Bestellpositionen und Preise, Metadaten zu Zahlungsarten. wiz.io+2Gowri Infosec+2 - Da die Auftragskennungen fortlaufend und vorhersehbar waren, wurde die Massenaufzählung trivial - ein Angreifer oder ein automatisiertes Skript konnte innerhalb von Minuten Tausende von Aufträgen erfassen. Mittel+1
- Die Schwachstelle wurde mit einer CVSS v3.1-Basisbewertung von 7,5 (hoch) eingestuft, was die Einfachheit der Ausnutzung (keine Anmeldung erforderlich) und die Schwere der Datengefährdung widerspiegelt.
- Der Entwickler hat das Problem in der Version 1.0.9durch die Implementierung angemessener Berechtigungsprüfungen, um sicherzustellen, dass nur rechtmäßige Eigentümer (oder autorisierte Benutzer) Auftragsdaten einsehen können. Website-Besitzer wurden dringend aufgefordert, sofort ein Upgrade durchzuführen. Gowri Infosec+1
Dieser reale Verstoß zeigt, dass IDOR kein theoretischer oder veralteter Fehler ist - er ist nach wie vor aktiv, kann ausgenutzt werden und hat potenziell schwerwiegende Folgen für den Datenschutz und die Einhaltung von Vorschriften.

Übliche Szenarien in der Praxis, in denen IDOR auftritt
IDOR kann in jedem System vorkommen, das über benutzergesteuerte Eingaben auf interne Objekte verweist. Nachfolgend sind gängige Kontexte aufgeführt:
| Art der Anwendung | Objekt Beispiel | Warum IDOR auftritt |
|---|---|---|
| Kontosysteme | userId | Direkte Offenlegung von Benutzerkennungen |
| E-Commerce-Anwendungen | orderId | Unsachgemäße Validierung der Eigentumsverhältnisse |
| Dateiverwaltung | fileId | Fehlende Zugriffskontrolle für Dateien |
| Ticketing-Plattformen | ticketId | Benutzer greifen auf die Tickets anderer Benutzer zu |
| Mehrmandantenfähige SaaS-Anwendungen | tenantId | Mieterübergreifende Datenlecks |
Angreifer zählen oft vorhersehbare IDs auf, versuchen sequenzielle IDs oder spielen authentifizierte Anfragen mit geänderten Parametern nach.
Wie Angreifer IDOR ausnutzen (sichere, kontrollierte Beispiele)
Nachstehend sind Beispiele für sichere Illustrationen die typische anfällige Muster und ihre sicheren Gegenstücke zeigen. Dabei handelt es sich nicht um schädliche Exploits, sondern um Modelle häufiger Fehler, die Entwicklern helfen sollen, unsichere Muster zu erkennen.
Beispiel 1: IDOR in Node.js / Express
javascript
// ❌ Anfälliges Beispiel: Vertrauen in die vom Benutzer angegebene ID
app.get('/api/user/profile', (req, res) => {
const userId = req.query.id;
db.users.findById(userId).then(user => {
res.json(user);
});
});
// ✅ Sicheres Beispiel: Autorisierung erzwingen
app.get('/api/user/profile', (req, res) => {
const authenticatedId = req.user.id;
db.users.findById(authenticatedId).then(user => {
if (!user) return res.status(404).json({ error: "User not found" });
res.json({ id: user.id, email: user.email, role: user.role });
});
});
Beispiel 2: Ein gängiges Muster in Python / Flask
python
#❌ Unsicher: keine Überprüfung der Eigentumsverhältnisse
@app.get("/Rechnung")
def get_invoice():
rechnung_id = request.args.get("id")
return get_invoice_by_id(invoice_id)
#✅ Sicher: Berechtigungsprüfung hinzugefügt
@app.get("/Rechnung")
def get_invoice_secure():
rechnung_id = request.args.get("id")
user_id = session["user_id"]
Rechnung = get_invoice_by_id(invoice_id)
if invoice.owner_id != user_id:
return {"Fehler": "Unautorisiert"}, 403
Rückrechnung
Beispiel 3: Kombinierte Back-End- und Front-End-Verteidigung (Java + React)
Java (Spring Boot)
java
// ❌ Fehlende Berechtigungsprüfung
@GetMapping("/bestellungen")
public Order getOrder(@RequestParam String orderId) {
return orderRepository.findById(orderId);
}
// ✅ Sichere Durchführung
@GetMapping("/bestellungen")
public ResponseEntity getOrder(
@RequestParam String orderId,
Prinzipal) {
Auftrag = orderRepository.findById(orderId);
if (!order.getUser().equals(principal.getName())) {
return ResponseEntity.status(HttpStatus.FORBIDDEN)
.body(Collections.singletonMap("error", "Zugriff verweigert"));
}
return ResponseEntity.ok(order);
}
React-seitige sichere Anfrage
javascript
async function fetchOrder(orderId) {
const res = await fetch(/orders?orderId=${orderId}, {
Header: {"Authorization": Bearer ${localStorage.getItem("token")} }
});
if (!res.ok) throw new Error("Nicht autorisiert oder nicht gefunden");
return res.json();
}
Erkennung von IDOR-Schwachstellen: Praktische Ansätze für Entwickler
IDOR zu finden ist oft schwieriger als es auszunutzen. Im Gegensatz zu Injektionsschwachstellen führt IDOR nicht immer zu offensichtlichen technischen Fehlern - die Symptome sind logisch und verhaltensbedingt.
Zu den gängigen Erkennungstechniken gehören:
- Differentielles Fuzzing (Testen mehrerer IDs)
- Wiederholungstests (Erfassen → Ändern → Wiedergeben)
- Rollenwechsel für mehrere Benutzer
- Aufzählung der Parameter
Sicherer Fuzzing-Pseudocode:
python
Einfaches Beispiel für sicheres Fuzzing
ids = ["1001", "1002", "1003"]
for i in ids:
res = client.get(f"/api/user/profile?id={i}")
print(i, res.status_code, len(res.text))
Vermeidung von IDOR: Bewährte Praktiken, die Entwickler befolgen müssen
Bei der IDOR-Prävention geht es nicht um Verschleierung - es geht um Genehmigungauf der Serverebene konsequent durchgeführt.
Vertraue niemals den Objektbezeichnern des Clients
Jeder Parameter ist änderbar. Selbst verschlüsselte IDs können verfälscht werden.
Erzwingen einer serverseitigen Autorisierung bei jeder Anfrage
Verwenden Sie anerkannte Zugangskontrollmodelle:
- RBAC (Rollenbasierte Zugriffskontrolle)
- ABAC (Attribut-basierte Zugangskontrolle)
- ACLs (Zugriffskontrolllisten)
- Politik-als-Code Systeme wie OPA
Ressourcen der Behörde:
- OWASP: https://owasp.org
PortSwigger Web-Sicherheitsakademie: https://portswigger.net/web-security/access-control
Nicht aufzählbare Identifikatoren bevorzugen
UUIDs verringern das IDOR-Risiko, beseitigen es aber nicht.
Validierung von Mandantengrenzen in Umgebungen mit mehreren Mandanten
Die mieterübergreifende IDOR ist eine der schwerwiegendsten und kostspieligsten Formen.
Verwendung einer Backend-for-Frontend (BFF)-Schicht
Eine BFF kann die Autorisierungslogik zentralisieren und so Inkonsistenzen zwischen den Mandanten verringern.
Zusätzliche fortgeschrittene Beispiele
Beispiel 4: Go API mit fehlender Autorisierung
gehen.
// ❌ Verwundbarer Handler
func GetDocument(w http.ResponseWriter, r *http.Request) {
id := r.URL.Query().Get("id")
doc := db.FindDocument(id)
json.NewEncoder(w).Encode(doc)
}
// ✅ Mit Eigentumsüberprüfung
func GetDocumentSecure(w http.ResponseWriter, r *http.Request) {
id := r.URL.Query().Get("id")
user := r.Context().Value("user").(string)
doc := db.FindDocument(id)
if doc.Owner != user {
http.Error(w, "Unauthorized", http.StatusForbidden)
return
}
json.NewEncoder(w).Encode(doc)
}
Beispiel 5: GraphQL-Endpunkte und Objektautorisierung
javascript
// ❌ Anfälliger Resolver
const resolvers = {
Abfrage: {
order: (_, { id }) => db.getOrder(id),
}
};
// ✅ Sicherer Resolver mit Eigentumsüberprüfung
const resolversSecure = {
Abfrage: {
order: (_, { id }, context) => {
const order = db.getOrder(id);
if (order.owner !== context.user.id) {
throw new Error("Zugriff verweigert");
}
Rückgabeauftrag;
}
}
};
Beispiel 6: Sicherer Zugang in Rust (Actix Web)
Rost
// ❌ Angreifbar
async fn get_ticket(path: web::Path) -> impl Responder {
let id = path.into_inner();
let ticket = db::find_ticket(&id);
web::Json(ticket)
}
// ✅ Sichere Version
async fn get_ticket_secure(
Pfad: web::Path,
Benutzer: LoggedInUser
) -> impl Responder {
let id = path.into_inner();
let ticket = db::find_ticket(&id);
if ticket.owner != user.id {
return HttpResponse::Forbidden().json("Zugriff verweigert");
}
HttpResponse::Ok().json(ticket)
}
Automatisierung der IDOR-Erkennung: Warum traditionelle Tools Probleme haben
Die meisten herkömmlichen Schwachstellen-Scanner können IDOR nicht zuverlässig erkennen, da IDOR zwei Dinge voraussetzt, die Scanner traditionell nicht leisten können:
- Geschäftslogisches Bewusstsein
- Kontextbezogene Mehrbenutzer-Tests
Scanning-Tools, die sich ausschließlich auf signaturbasierte Erkennung oder Einzelbenutzeranfragen stützen, übersehen IDOR in der Regel vollständig, insbesondere in APIs.
Wie Penligent hilft, IDOR automatisch zu identifizieren
Dies ist der Ort, an dem SträflichPenligent, eine KI-gesteuerte Penetrationstest-Plattform, bietet einen einzigartigen Vorteil. Im Gegensatz zu herkömmlichen Scannern führt Penligent:
- Automatische Mehrbenutzersimulation
- Objektübergreifende Parameterinferenz
- Intelligente ID-Mustererkennung
- Differenzialanalyse des Verhaltens
- KI-Fuzzing, das sich auf der Grundlage beobachteter Reaktionen anpasst
Ein Beispiel für die sichere, anonymisierte Erkennungsleistung von Penligent:
vbnet
Potenzielle IDOR entdeckt:Endpunkt: /orders?id=1002Beobachtetes Verhalten:
- Benutzer A hat den Auftrag #1003 (Eigentum von Benutzer B) erhalten. Risiko: Unbefugter Zugriff auf die Daten eines anderen Benutzers.
Diese Art von Einblick ist mit statischen Tools oder einer manuellen Überprüfung allein nur schwer zu erreichen.
Reduzierung von IDOR-Risiken über CI/CD mit Penligent
Penligent lässt sich problemlos in CI/CD-Pipelines integrieren und bietet eine kontinuierliche Abdeckung:
- Automatische Erkennung von API und Routen
- Ableitung der Erlaubnismatrix in Echtzeit
- Scannen von Staging- und produktionsähnlichen Umgebungen
- Automatische Generierung von sicheren, reproduzierbaren PoC-Sequenzen
Dies reduziert:
- Blinde Flecken in der Geschäftslogik
- Multi-Tenant-Engagement
- Regulatorische Risiken (GDPR, HIPAA, SOC2)
Schlussfolgerung: IDOR ist einfach, aber verheerend - und vermeidbar
IDOR ist nach wie vor eine der häufigsten und schädlichsten Formen von Schwachstellen bei der Zugriffskontrolle. Da sie sich in der Geschäftslogik versteckt, entgeht sie oft den herkömmlichen Tools. Durch die Durchsetzung konsistenter Berechtigungsprüfungen, die Verwendung nicht vorhersehbarer Identifikatoren, die Validierung von Mandantengrenzen und den Einsatz automatisierter Testplattformen wie Penligent können Unternehmen das Risiko einer großflächigen Datenexposition drastisch reduzieren.
IDOR kann nicht durch Zufall oder gute Absichten vollständig beseitigt werden - es erfordert eine strukturierte Zugangskontrolle, konsistente technische Prinzipien und kontinuierliche Tests.

