Bußgeld-Kopfzeile

Was ist IDOR? Ein einfacher Leitfaden zu diesem häufigen Sicherheitsrisiko

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.

IDOR WordPress

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_aufheben Funktion. Das Plugin vertraut auf eine auftrag_id Parameter 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_id Wert auf der URL der "Danke"-Seite (z. B. durch Ändern order_id=123456 zu order_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.

CVE-2025-13526: Ein echter IDOR-Fall in freier Wildbahn Sträflich

Ü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 AnwendungObjekt BeispielWarum IDOR auftritt
KontosystemeuserIdDirekte Offenlegung von Benutzerkennungen
E-Commerce-AnwendungenorderIdUnsachgemäße Validierung der Eigentumsverhältnisse
DateiverwaltungfileIdFehlende Zugriffskontrolle für Dateien
Ticketing-PlattformenticketIdBenutzer greifen auf die Tickets anderer Benutzer zu
Mehrmandantenfähige SaaS-AnwendungentenantIdMieterü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:

  1. Differentielles Fuzzing (Testen mehrerer IDs)
  2. Wiederholungstests (Erfassen → Ändern → Wiedergeben)
  3. Rollenwechsel für mehrere Benutzer
  4. 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:

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:

  1. Geschäftslogisches Bewusstsein
  2. 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.

Teilen Sie den Beitrag:
Verwandte Beiträge