Vai al contenuto
SDETRole
SDETRole

Glossario · Sicurezza

IDOR

Detto anche: Insecure Direct Object Reference, riferimento diretto a oggetti non sicuro, BOLA, broken object level authorization

Definizione

Insecure Direct Object Reference, una falla nel controllo degli accessi per cui cambiare un ID in una richiesta permette di leggere o modificare i dati di un altro utente.

IDOR (Insecure Direct Object Reference, riferimento diretto e non sicuro a un oggetto) è una vulnerabilità in cui l’applicazione usa un identificatore preso dalla richiesta, come /api/orders/1043, per recuperare un record, ma non verifica mai che l’utente autenticato abbia il diritto di accedere a quel record. Cambi l’ID in 1044 e ottieni l’ordine di qualcun altro. Rientra nella categoria A01 Broken Access Control della OWASP Top 10 2021, e la OWASP API Security Top 10 chiama lo stesso problema Broken Object Level Authorization (BOLA).

Esempio

Alice ha effettuato il login e vede il suo ordine:

GET /api/orders/1043
Authorization: Bearer <alice-token>

Cambia il numero:

GET /api/orders/1044
Authorization: Bearer <alice-token>

Se la risposta è 200 con l’indirizzo e gli articoli di Bob, l’endpoint autentica l’utente ma non autorizza l’accesso allo specifico oggetto. UUID difficili da indovinare rendono più difficile tirare a indovinare, ma non correggono la falla: gli ID trapelano tramite URL, log e link condivisi.

Cosa verifica un tester

Crea due utenti di test, ciascuno con i propri dati, poi usa le credenziali dell’utente A sugli oggetti dell’utente B su ogni endpoint e metodo: lettura, aggiornamento, cancellazione e route annidate come /users/{id}/invoices. È facile da automatizzare. In Playwright:

import { test, expect, request } from '@playwright/test';

test("Alice cannot read Bob's order", async () => {
  const alice = await request.newContext({
    baseURL: process.env.API_URL,
    extraHTTPHeaders: { Authorization: `Bearer ${process.env.ALICE_TOKEN}` },
  });
  const res = await alice.get(`/api/orders/${process.env.BOB_ORDER_ID}`);
  expect([403, 404]).toContain(res.status());
  await alice.dispose();
});

Sono accettabili sia 403 sia 404; molte API restituiscono 404 per non confermare nemmeno che il record esista. Controlla anche:

  • Gli ID nei body delle richieste e nelle query string, non solo nel path.
  • Le operazioni di scrittura, dove un IDOR permette a un utente di modificare o cancellare dati.
  • Gli endpoint di operazioni massive e di export che accettano liste di ID.
  • I confini tra tenant nei sistemi multi-tenant.

Perché sfugge

I test funzionali di solito effettuano il login con un solo utente e usano i dati di quello stesso utente, quindi il controllo di autorizzazione non viene mai esercitato. Un IDOR si trova chiedendosi, per ogni endpoint, “e se questo ID appartenesse a qualcun altro?”. Esegui questi test solo su sistemi che sei autorizzato a testare.

Scrivi per cercare in tutto SDETRole.

Ricerca full-text con Pagefind · funziona nel tuo browser Apri la pagina di ricerca →