Î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
- Atacatorul va crea un fișier de definiție Swagger YAML malițios
- Fișierul Swagger malițios va fi găzduit pe un server web arbitrar
- Un listener va fi lansat de partea atacatorului (vom folosi Burp Suite Collaborator în acest Proof-of-Concept)
- Atacatorul va trimite victimei linkul care indică spre Swagger UI-ul tău și care conține definiția malițioasă în parametrii URL.
- Deoarece victima se bazează pe autenticitatea domeniului, aceasta va introduce *probabil* credențialele în instanța Swagger UI
- 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
Î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.




