Świąteczny czas to okres szczególny i radosny, toteż i rozrywki okołowigilijne odbiegają nieco od zajęć przyjętych za standardowe. W poprzednim roku (choć było to zaledwie paręnaście dni temu) zebrało mi się na napisanie artykułu na temat poziomu zabezpieczeń w polskim internecie. Artykuł oczywiście do dziś nie powstał, początkowo głównie z braku dostatecznej ilości materiałów. Z pomocą nieoczekiwanie i trochę niechcący przyszedł mi Roy, kiedy na stronie jednego z wrocławskich sklepów wysyłkowych objawił mu się duży i paskudny błąd MySQL zaraz po tym, jak przerobił trochę URL strony z listą produktów.
Kiedy była już motywacja i był już obiekt, wystarczyło przeprowadzić proof of concept, czyli modelowy atak SQL injection. Nie było to specjalnie wymagającym zaangażowania intelektualnego zajęciem, jako że serwer produkcyjny okazał się tak miły i wyświetlił mi całe zapytanie. Wiadomo więc, w jakim kontekście wstawiane są zmienne, wiadomo też, że brakuje jakiegokolwiek sprawdzania, czy zmienne są liczbami. Hulaj dusza, piekła nie ma. Najdłuższą, bo dziesięciominutową chwilę poświęcić trzeba było jeszcze na odgadnięcie nazwy tabeli z listą klientów i już proof of concept był gotowy.
Miast towarów, katalog sklepowy uraczył mnie listą loginów i haseł swoich podopiecznych, nie omieszkał podać też ich adresów email, na wypadek gdybym zapragnął oddać się uciechom korespondencji. Jednak nie zajmuję się zawodowo wysyłaniem niezamówionej poczty o charakterze komercyjnym, toteż pierwszy mój mail trafił był do nikogo innego, jak do samego biura mojej ofiary. Poruszenia wielkiego nie wywołałem, bo odpowiedzi nawet śladu na horyzoncie nie było znać. Odczekałem swoje, moje poirytowanie typowo polskim "olewactwem" sięgnęło zenitu i wykonałem strategiczny w założeniach telefon z zamiarem namierzenia OsobyKompetentnej™. Mój zapał ostudził szybko jeden z wzorcowo wręcz wyszkolonych telemarketerów:
- Dzień dobry, dzwonię w sprawie bezpieczeństwa Państwa danych, czy mój email dotarł?
- Dzień dobry, dzisiaj akurat nie ma tego pana, który czyta pocztę, proszę spróbować jutro.
Po tych słowy, moje bezgraniczne już zaufanie do rzeczonej firmy urosło jeszcze bardziej. Mógł chociaż zaimprowizować, że im serwer nie działa (co byłoby bliższe prawdy niż mógłby przypuszczać). Doceniłem jednak jego szczerość i odczekałem 24 godziny kwarantanny. Z błogiego stanu oczekiwania niespodziewanie wyrwało mnie... nic. Zadzwoniłem drugi raz. Spłoszona pani telefonistka na dźwięk złowieszczego słowa "serwer" natychmiast zaoferowała przełączenie do szefa. Nie odmówiłem, bo nie miałem okazji, ust nie zdążyłem otworzyć zanim w słuchawce zabrzmiała tandetna melodyjka, ulubione narzędzie tortur w rękach wszelakich posiadaczy infolinii, w tym moich i moich współpracowników. Marsz ów żałobny zakończył się nadspodziewanie szybko, a i głos rozmówcy świadczył, że całkowicie bez odzewu mój email nie przeszedł. Konwersacja specjalnie długo nie trwała, jednak zdołałem się dowiedzieć, że oni dowiedzieć się nie zdołali. Nadal nie wiedzą, co to za błąd.
Kolejny dzień zastał mnie nieco zaskoczonego, bo oto przedmiot moich badań nie działa. Niebiosa runęły, świat legł w gruzach, wyłączyli sklep. Informator pod telefonem udziela jedynie enigmatycznych informacji o tym, że "prace trwają". Na email otrzymałem odpowiedź, która niemal pozbawiła mnie żuchwy. Jak się okazało, brygada informatyków z zapałem instalowała w tym czasie wszelakie technologie kryptograficzne dostępne na rynku, serwer zyskał wsparcie SSL, a ja mogłem czuć się spokojniej... oglądając te same dane klientów, tym razem po szyfrowanym łączu. Najtrafniej skomentował to Roy, powiedział tylko "nie ma to jak wstawianie dodatkowych zamków do drzwi, kiedy mieszkasz na parterze i masz wybite okno do salonu". Serwer powrócił po kilkunastu minutach od mojego telefonu, w całej krasie prezentując... kod źródłowy plików PHP. Widocznie poczuli się tak bezpiecznie z nowymi zabawkami, że nie uznali za konieczne parsowania skryptów. Byłem więc chyba jedynym klientem w historii informatyki, który patrząc na wyczyny dziarskiej grupy do spraw zabezpieczeń, wysłał kolejny email do firmy, tym razem dołączając... poprawiony kod źródłowy ich sklepu. Tego się nie spodziewali, ten fakt nimi wstrząsnął, to wbiło ich w ziemię, to sprawiło, że... postanowili znaleźć swoje rozwiązanie. Znaleźli więc miejsce, które poprawiłem, usunęli dodane przeze mnie apostrofy dookoła wstawianych z kodu zmiennych i napisali sobie funkcję, która wyszukuje kawałki kodu SQL. Gorzej, że nie te, co trzeba. Kolejny mail, w końcu użyli mojego kodu, albo sami zrobili coś identycznego. Spokój. Oczywiście kontakt się urwał.
W międzyczasie przetestowałem pod tym samym kątem około trzydziestu innych serwisów internetowych. Kryterium podstawowe: polski serwis, musi zawierać jakąś bazę klientów. Około jednej trzeciej z nich, bo dokładnie dziesięć serwisów zawierało dziury pozwalające obejrzeć sobie dokładnie listę klientów. Oczywiście ilość przechowywanych danych była różna, część posiadała tylko login i hasło, część adres email, niektóre pełny adres domowy razem z telefonem. Był tylko jeden serwis, strona poświęcona mechanice samochodowej, której nie udało mi się zmusić do wyświetlenia listy, za to bez problemu można było zalogować się na każdego z klientów nie znająć jego hasła. To wszystko na wyciągnięcie ręki, wystarczyło zmienić adres URL w oknie przeglądarki. Zdążyłem już nawet przygotować standardowy mail do administratora, grzecznie informujący o usterce i podający sposób załatania, a jednocześnie zdecydowanie sugerujący, że w razie niezałatania zastrzegam sobie prawo do powiadomienia klientów. Możecie wierzyć lub nie, ale większość z usterek została załatana w ciągu 24 godzin. Jest tylko jeden serwis, który do dziś jest dziurawy jak sito i którego administracja nie była łaskawa do teraz odpowiedzieć na moje emaile. Przykre jest to o tyle, że jego klienci stanowili jedną z najliczniejszych grup pośród moich ofiar. A stroną tą jest Aleja handlowa, site który nie był w stanie zdobyć się na coś tak idiotycznego jak korespondencja ze mną (w końcu jak ufać komuś, kto nie chce w zamian pieniędzy?), przez co do dziś udostępniają dane tych, którzy im zaufali, trzeba tylko wiedzieć, jak o nie spytać...