Blog 24/7

IDOR (Insecure Direct Object Reference)

TAB. 1Hasłobez tłumaczenia
Po angielskuinsecure direct object reference (IDOR)
Którą formą pisaćbez tłumaczenia Skrót, nazwa własna albo nazwa standardu — nie tłumaczymy w ogóle.
Inne formyniezabezpieczone bezpośrednie odwołanie do obiektu (nie potwierdzono w źródłach — tylko opis, nie nazwa)
KategoriaPodatności i klasy błędów

IDOR (Insecure Direct Object Reference) to odmiana błędu kontroli dostępu, w której aplikacja udostępnia rekord na podstawie identyfikatora podanego przez użytkownika i nie sprawdza, czy ten użytkownik ma prawo do tego rekordu. MITRE opisuje tę słabość jako CWE-639: mechanizm autoryzacji nie przeszkadza jednemu użytkownikowi w dostępie do danych innego, gdy ten zmieni wartość klucza wskazującego dane [1]. OWASP wymienia IDOR, czyli podgląd lub edycję cudzego konta przez podanie jego unikalnego identyfikatora, wśród przykładów kategorii Broken Access Control [3].

Jak działa

Według OWASP do powstania IDOR potrzebne są trzy elementy: obiekt (konto, dokument, zamówienie), odwołanie do niego (numer, UUID, slug) i brak sprawdzenia uprawnień przy dostępie [2]. Typowy przykład to adres z numerem użytkownika, w którym zmiana numeru na kolejny pokazuje dane innej osoby, bo aplikacja nie sprawdziła, czy pytający może je zobaczyć [2].

OWASP ilustruje to scenariuszem z parametrem acct: atakujący zmienia jego wartość w przeglądarce i otrzymuje dostęp do dowolnego konta, jeśli serwer nie weryfikuje go poprawnie [3]. Schemat poniżej pokazuje ten przebieg na stronie example.com.

RYS. 1IDOR przez zmianę numeru zamówienia

Błąd nie polega na tym, że identyfikator jest widoczny. Polega na tym, że serwer ufa mu bez sprawdzenia, do kogo należy obiekt. IDOR nie wymaga żadnej techniki wstrzyknięcia: wystarczy zmiana jednej liczby w żądaniu.

Odmiany

MITRE wiąże z CWE-639 kilka pojęć [1]. Dostęp do danych innego użytkownika na tym samym poziomie uprawnień to autoryzacja pozioma. Gdy klucz kontrolowany przez użytkownika działa jak flaga uprawnień, możliwa jest też eskalacja uprawnień w pionie, aż do dostępu administracyjnego [1].

OdmianaCo zmienia atakującySkutek
Poziomanumer cudzego rekordu tej samej klasy [1]odczyt lub zmiana danych innego użytkownika
Pionowaklucz działający jak flaga roli [1]dostęp do funkcji administracyjnych
W API (BOLA)identyfikator obiektu w żądaniu API [1]operacje na cudzych obiektach przez interfejs

W kontekście interfejsów API ta sama słabość nosi nazwę BOLA (Broken Object Level Authorization) [1]. Pokrewny jest mass assignment, w którym atakujący dopisuje do żądania pole, którego aplikacja nie powinna od niego przyjmować.

W WordPressie

W WordPressie IDOR pojawia się głównie we wtyczkach, które obsługują własne obiekty: zamówienia, rezerwacje, zgłoszenia formularzy, pliki klientów; zob. podatność we wtyczce. Rdzeń daje narzędzia, żeby sprawdzać uprawnienia do konkretnego obiektu, a nie tylko do rodzaju operacji.

Funkcja current_user_can() przyjmuje identyfikator obiektu, gdy sprawdzana zdolność jest meta‑zdolnością [4]. Meta‑zdolności, takie jak edit_post i edit_user, są mapowane przez map_meta_cap() na zdolności podstawowe [4]. Wywołanie current_user_can( 'edit_post', $post->ID ) odpowiada więc na pytanie, czy ten użytkownik może edytować ten konkretny wpis [4]. Dokumentacja odradza sprawdzanie nazw ról zamiast zdolności, bo daje to niepewne wyniki [4]; zob. role i uprawnienia użytkowników.

$order_id = absint( $_GET['id'] );
// podatne: brak sprawdzenia właściciela
$order = get_post( $order_id );
// poprawne: uprawnienie do tego obiektu
if ( ! current_user_can( 'edit_post', $order_id ) ) {
    wp_die( 'Brak dostępu', 403 );
}

Drugim miejscem są własne trasy REST. Parametr permission_callback sprawdza, czy użytkownik może wykonać działanie, zanim zostanie wywołana właściwa funkcja [5]. Od WordPressa 5.5 brak tego parametru powoduje komunikat _doing_it_wrong, a trasy publiczne powinny jawnie używać __return_true [5]. Trasa, która przyjmuje identyfikator obiektu, a w permission_callback sprawdza tylko, czy ktoś jest zalogowany, to typowy niezabezpieczony endpoint REST API.

Zagrożenia i skutki

MITRE wymienia jako skutki obejście kontroli dostępu, odczyt i zmianę danych innych użytkowników oraz w niektórych przypadkach dostęp administracyjny [1]. Prawdopodobieństwo wykorzystania ocenia jako wysokie [1]. W sklepie internetowym IDOR może oznaczać wgląd w adresy i zamówienia klientów, czyli wyciek danych, a przy danych osobowych także naruszenie ochrony danych osobowych. Przy operacjach zapisu atakujący może zmieniać lub usuwać cudze rekordy, co prowadzi do przejęcia konta albo utraty danych.

Jak się bronić

  • Sprawdzenie przy każdym obiekcie. OWASP zaleca kontrolę dostępu dla każdego obiektu, spójnie przy odczycie, tworzeniu, zmianie, usuwaniu i eksporcie [2]. MITRE zaleca weryfikację uprawnień przy każdym dostępie do danych [1].
  • Zapytania zawężone do użytkownika. Zamiast szukać obiektu w całej bazie, aplikacja powinna szukać go wśród obiektów bieżącego użytkownika [2].
  • Własność rekordu. Model dostępu ma wymuszać własność rekordu zamiast zakładać, że użytkownik może tworzyć, czytać, zmieniać i usuwać dowolny rekord [3]. Poza zasobami publicznymi dostęp powinien być domyślnie zablokowany [3]; to zastosowanie zasady najmniejszych uprawnień.
  • Trudne identyfikatory to za mało. GUID albo UUID utrudnia zgadywanie, ale według OWASP nie zastępuje sprawdzenia uprawnień [2].

Szerzej o sprawdzaniu uprawnień w kodzie mówi hasło weryfikacja uprawnień.

Historia i przykłady

W styczniu 2026 roku Sekurak opisał podatność IDOR w API Mozilli do zarządzania kontami Firefox [7]. Uwierzytelniony atakujący logujący się przez OAuth mógł usunąć konto innego użytkownika OAuth, znając tylko jego adres e‑mail, bo serwer nie sprawdzał, czy sesja należy do usuwanego konta [7]. Badacz zgłosił błąd w maju 2025 roku; Mozilla oceniła go jako High [7].

20 sierpnia 2026 roku CERT Polska opublikował informację o podatnościach w ATutor 2.2.4 [6]. Jedna z nich, CVE-2026-64969, to IDOR w obsłudze zdjęć profilowych: każdy uwierzytelniony użytkownik, także student, mógł wskazać w żądaniu POST cudzy member_id i trwale usunąć zdjęcie innej osoby, w tym instruktora lub administratora [6].

TAB. 2

Przypisy

7
  1. [1] CWE-639: Authorization Bypass Through User-Controlled Key · MITRE
  2. [2] Insecure Direct Object Reference Prevention Cheat Sheet · OWASP
  3. [3] A01:2021 – Broken Access Control · OWASP
  4. [4] current_user_can() — Function Reference · WordPress.org
  5. [5] Adding Custom Endpoints — REST API Handbook · WordPress.org
  6. [6] Podatności w oprogramowaniu ATutor (CVE-2026-64960 – CVE-2026-64972) · CERT Polska
  7. [7] Jak można było usunąć czyjeś konto Firefox? Podatność IDOR w API Mozilli · Sekurak
TAB. 3

Hasła w tym artykule

12
TAB. 4

Linkują tutaj

7

Wszystkie kategorie → · Hasło w słowniku →

Blog 24/7
05.11CISA i FBI wzywają do zabezpieczenia sterowników chłodzenia po atakach w Europietherecord.media05.11Midnight Blizzard atakowała iPhone'y i Androidy przez zainfekowane strony w Europie i USAsecurityweek.com05.11APT29 kradła dane z iPhone'ów i Androidów przez przejęte i podrobione stronytherecord.media05.11Grupa APT29 przejęła skrypt Plerdy i atakowała niezałatane iPhone'y i Androidythehackernews.com05.11Microsoft wykrył 7,3 mld wiadomości phishingowych w III kwartale 2026microsoft.com05.11DigiCert ujawnia wyciek danych klientów i skanów dokumentów tożsamościbleepingcomputer.com05.11CWPdoor podmienia serwer cwpsrv w Control Web Panel i otwiera tylne wejście do Linuksableepingcomputer.com05.11Brytyjskie NCSC ostrzega, że narzędzia AI zwiększyły liczbę wykrywanych luk zero-daythehackernews.com05.11Skaner RootEvidence sprawdza starą lukę w Cisco IOS i dodaje nagłówki Opt-Outisc.sans.edu05.11Włamanie do portalu grantowego Norad, zagrożone dane 20 614 użytkownikówhelpnetsecurity.com