Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Ciekawostka: Ominięcie XSS Auditora wykorzystując funkcje Cloudflare
Standardowe biblioteki oraz funkcje JavaScript, które wykorzystuje i udostępnia Cloudflare można wykorzystać do ominięcia mechanizmu XSS Auditor w przypadku, gdy domena podpięta pod usługi Cloudflare podatna jest na Reflected XSS (Non-persistent XSS). Taką ciekawostką podzielił się Masato Kinugawa, specjalista bezpieczeństwa IT, znany z badań dotyczących podatności XSS jak i współorganizacji zawodów XSSMas Challenge.
Zanim przejdziemy do analizy znaleziska Masato, krótkie wprowadzenie czym właściwie jest XSS Auditor. Zadaniem tego mechanizmu jest weryfikacja, czy w parametrach przekazywanych do aplikacji WWW, które następnie osadzane są w jej źródle nie znajduje się złośliwy kod HTML/JavaScript. Jeżeli podczas analizy wartości parametrów oraz odpowiedzi aplikacji filtry XSS Auditora wykryją niepożądany kod, zostanie on zablokowany a próba wykorzystania podatności Reflected XSS nie powiedzie się. Powoduje to, że mimo iż w wybranej aplikacji WWW istnieje podatność, jej praktyczne wykorzystanie jest niemożliwe w przeglądarkach, które XSS Auditora posiadają.
Podpięcie domeny pod Cloudflare wiąże się z kilkoma konsekwencjami, powszechnie znana jest konieczność zmiany adresów serwerów DNS przypisanych do usługi. Faktem, na który nie wszyscy zwracają uwagę jest to, że wykorzystanie Cloudflare wiąże się z dodaniem do naszej domeny uniwersalnego routingu zaczynającego się od ścieżki cdn-cgi. Przy pomocy tej ścieżki udostępniane są skrypty JavaScript, które wymagane są przez Cloudflare do poprawnego działania. Znajdują się tam funkcje odpowiedzialne m.in. za obsługę formularza wymagającego przepisania kodu CAPTCHA wyświetlanego w przypadku wykrycia podejrzanego działania. Można tam również znaleźć inne fragmentu kodu, np. bibliotekę jQuery.
Autor tego znaleziska, Masato, przeanalizował kod bibliotek i doszedł do wniosku, że w przypadku gdy aplikacja uruchomiona pod domeną wydelegowaną do Cloudflare podatna jest na Reflected XSS, istnieje możliwość nadużycia bibliotek Cloudflare do ominięcia zabezpieczenia jakim jest XSS Auditor. Pierwsza metoda obejścia zakłada wykorzystanie biblioteki cf.common.js a dokładniej funkcji unobfuscateLinks, która przeszukuje drzewo DOM w poszukiwaniu linków z odpowiednim atrybutem (data-orig-ref). Jeżeli taki atrybut zostanie znaleziony, jego wartość zostaje przepisana do atrybutu href. W konsekwencji po kliknięciu w spreparowany link dochodzi do wykonania kodu (Rysunek nr 1).
Sedno sprawy polega na tym, że mimo iż przekazujemy w adresie URL kod HTML/JavaScript, który osadzany jest następnie w źródle podatnej aplikacji, to i tak zostanie on pomyślnie wykonany – XSS Auditor nie zablokuje takiego działania, ponieważ zastosowany payload nie zostanie zidentyfikowany przez filtry jako potencjalne zagrożenie.
Opublikowana została również informacja o innym wariancie ataku, pozwalającym na wykonanie kodu już bez interakcji użytkownika.
Różnice w działaniu tego ataku można zauważyć w przypadku, gdy chroniona domena wykorzystuje usługę Cloudflare w wyższym planie abonamentowym. Mowa o konfiguracji gdzie aktywna jest ochrona WAF. W takim przypadku, przejście pod adres, który zawiera fragment kodu HTML/JavaScript spowoduje, że w pierwszej kolejności użytkownik-ofiara będzie musiał pomyślnie przejść formularz zawierających challenge CAPTCHA – kod zostanie wykonany dopiero w dalszej kolejności.
— piochu