Recoltarea credențialelor folosind Swagger UI

În acest articol de blog, vom vedea cum atacatorii pot profita de fișierul tău Swagger UI expus pentru a lansa atacuri de recoltare a credențialelor și cum te poți proteja împotriva acestora.

Cerințe pentru atac

  • Organizația ta expune documentația pentru serviciile API folosind fișiere Swagger UI (https://swagger.io/tools/swagger-ui/)
  • Endpoint-ul de documentație Swagger UI poate fi accesat fără autentificare și permite importarea definițiilor externe prin parametrii GET impliciți din URL, precum „?url=” și „?configUrls=”

Scenariu de recoltare a credențialelor prin Swagger UI

  1. Atacatorul va crea un fișier de definiție Swagger YAML malițios
  2. Fișierul Swagger malițios va fi găzduit pe un server web arbitrar
  3. Un listener va fi lansat de partea atacatorului (vom folosi Burp Suite Collaborator în acest Proof-of-Concept)
  4. Atacatorul va trimite victimei linkul care indică spre Swagger UI-ul tău și care conține definiția malițioasă în parametrii URL.
  5. Deoarece victima se bazează pe autenticitatea domeniului, aceasta va introduce *probabil* credențialele în instanța Swagger UI
  6. După ce credențialele sunt introduse, acestea vor fi livrate către listener-ul atacatorului

Proof-of-Concept tehnic (PoC)

Mai întâi, va trebui să creăm un fișier de definiție Swagger malițios care va solicita utilizatorilor să își introducă datele de autentificare:

Fișierul de exploatare Swagger de mai sus va include o rută API de login care le sugerează utilizatorilor să se autentifice înainte de a accesa documentația API completă.

În valoarea obiectului „host”, introdu hostname-ul listener-ului. Deoarece folosim modulul Burp Suite Collaborator pentru listener, vom introduce endpoint-ul .burpcollaborator.net (exemplu: kbzsipjangphidl11k2l67d81z7qvf.burpcollaborator.net)

După ce fișierul Swagger malițios a fost creat, trebuie să îl găzduiești undeva. GitHub este un loc potrivit pe care îl putem folosi pentru scopul acestui exercițiu.

Poți găsi payload-ul Swagger aici:

https://gist.github.com/corneacristian/f72a91ebc664f73dfdad3d18460b86a0

takeover.yaml

În continuare, navighează la endpoint-ul care găzduiește Swagger UI și introdu fișierul de definiție prin parametrii GET „?url=” sau „?configUrls=”, după cum urmează:

  • https:///swagger/index.html?url=https///takeover.yaml
  • https:///swagger/index.html?configUrls=https:///takeover.yaml

Poți confirma că importul a fost realizat cu succes atunci când aplicația îți afișează o pagină similară cu cea de mai sus.

După ce victima introduce orice tip de credențiale în formularul de login, le poți observa în logurile listener-ului.

Cum poți preveni exploatarea Swagger UI

  • Dezactivează funcția de import extern al fișierelor de definiție
  • Menține Swagger UI actualizat la cea mai recentă versiune
  • Aplică autentificarea pe endpoint-ul Swagger UI

Acest exemplu este unul dintre testele pe care le realizăm atunci când efectuăm Penetration Testing.

Vrei să verifici securitatea API-ului sau aplicației tale?

Contactează-ne

Ready to get started?

Get in touch with one of our experts today to discuss your business needs.