- Vulnerabilitate IDOR critică într-o platformă B2B SaaS
- Permitea accesul la datele oricărui client cunoscând ID-ul numeric din URL
- Exploatabilă fără autentificare specială — orice utilizator autentificat putea accesa datele altora
- Remediată în 48 de ore de la raportare
Contextul angajamentului
Un furnizor de software B2B din România ne-a solicitat un penetration test grey-box pentru platforma lor web înainte de extinderea bazei de clienți în sectorul financiar. Perimetrul includea aplicația web principală, API-ul REST asociat și modulul de raportare. Durata angajamentului: 5 zile lucrătoare.
Vulnerabilitatea identificată
CVSS 9.1 — CRITICĂÎn ziua a doua a testării, în timpul evaluării modulului de vizualizare a rapoartelor, am identificat că endpoint-ul de descărcare a rapoartelor folosea un identificator numeric secvențial în parametrul URL:
GET /api/v1/reports/download?report_id=1847
Authorization: Bearer <token_utilizator_A>
Modificând parametrul report_id la valori adiacente, am constatat că serverul returna rapoartele altor clienți fără nicio verificare de autorizare suplimentară. Orice utilizator autentificat — indiferent de organizația din care făcea parte — putea accesa rapoartele oricărui alt client al platformei.
Detalii tehnice
Network / Application Layer — endpoint API REST autentificat
Lipsa verificării autorizării la nivel de obiect (BOLA — Broken Object Level Authorization). Serverul verifica doar că utilizatorul era autentificat, nu că avea dreptul de acces la resursa specifică solicitată.
Accesul complet la rapoartele tuturor clienților platformei, inclusiv date financiare, informații despre angajați și documente contractuale marcate confidențial.
API1:2023 — Broken Object Level Authorization (BOLA/IDOR)
Procesul de exploatare
Exploatarea a fost directă și nu a necesitat instrumente specializate. Un simplu script de enumerare a identificatorilor între 1000 și 2000 a returnat 847 rapoarte aparținând unor organizații diferite în mai puțin de 10 minute. Vulnerabilitatea era prezentă pe toate endpoint-urile modulului de raportare, nu doar pe cel de descărcare.
# Conceptual — ilustrarea severității
for report_id in range(1000, 2000):
response = GET /api/v1/reports/download?report_id={report_id}
if response.status == 200:
# Acces neautorizat la raport aparținând altui client
save(response, f"raport_{report_id}.pdf")
Raportare și remediere
Vulnerabilitatea a fost raportată imediat după confirmare, fără a aștepta finalizarea angajamentului — procedura standard BreachFense pentru constatările critice. Echipa de dezvoltare a implementat verificarea autorizării la nivel de obiect în 48 de ore. Retestarea a confirmat că toate endpoint-urile afectate au fost remediate corect.
Lecție de reținut
IDOR rămâne una dintre cele mai frecvente și mai impactante vulnerabilități identificate în evaluările noastre, în special în aplicațiile SaaS cu arhitecturi multi-tenant. Verificarea autentificării nu este suficientă — fiecare acces la o resursă trebuie să verifice explicit că utilizatorul are drepturi asupra acelei resurse specifice, nu doar că este autentificat în sistem.