Kilka dni temu zakończył się konkurs bezpieczeństwa organizowany przez papryQArz i intive. Niestety nikomu nie udało się włamać do przygotowanego specjalnie na tę okazję sklepu internetowego 🙁 Wyniki konkursu zostały już opublikowane na Facebooku, jednak gdyby ktoś przeoczył – poniżej lista zwycięzców, którzy zgłosili najciekawsze i najbardziej krytyczne błędy.
1. Paweł W.
2. Paweł N.
3. Karolina M.-D.
4. Monika S.
5. Daniel D.
6. Michał K.
7. Michał L.
Aby pokrótce opisać najpoważniejsze błędy zawarte na stronie, podzielmy je na 3 grupy:
1. Dobre praktyki
2. Błędy bezpieczeństwa
3. Błędy funkcjonalne
ad.1
- Brak implementacji CSP.
- Brak odpowiednich flag na ciasteczkach (httpOnly, secure).
- Możliwość wyświetlenia w oknie (brak chociażby X-FRAME-OPTIONS)
- Brak prawidłowego certyfikatu SSL (w tym brak przekierowań na SSL).
- Brak captchy / ochrony przed masowym wysyłaniem formularzy.
- Wysyłanie hasła w mailu rejestracyjnym (I nie, nie oznacza to, że hasło przechowywane jest bez szyfrowania).
ad.2
- Globalnie – brak tokenów CSRF, możliwość wysłania każdego formularza z kontekstu użytkownika.
- SQL Injection w wyszukiwarce, wprowadzone dane nie są parsowane, znak „ ' ” był tutaj wektorem wejściowym.
- SQL Injection w ciasteczku z informacją o produkcie znajdującym się w koszyku.
- XSS Na stronach: logowania, rejestracji, kontaktu oraz wyszukiwarce.
- Sonda – zabezpieczenie na poziomie ciastka, możliwość masowego oddawania głosów w formularzu.
- Przewidywalny `token` używany do aktywacji konta użytkownika.
- Możliwość przeglądania zamówień innych użytkowników.
- Ogólnie dostępna strona logowania do panelu administracyjnego.
- Konfiguracja serwera – wyświetlanie komunikatów z błędami.
ad.3
- Brak stron polityka prywatności i regulaminu.
- Przy zapisie odwracana zawartość pól adresu na dostawę i do faktury.
- Brak funkcjonalności przypomnienia hasła.
- Ankieta – nieprawidłowe zaokrąglanie wyników przy wyświetleniem.
- Na ekranie podsumowania zamówienia przycisk `wstecz` składał zamówienie.
- Widoczne placeholdery na stronie z danymi kontaktowymi
- Niewidoczne nagłówki „MENU” oraz „KOSZYK”.
- Brak weryfikacji akceptacji regulaminu przy rejestracji.
Dodatkowo oczywiście do znalezienia było mnóstwo literówek, liczne błędy składniowe. Błędy walidacji, oraz różne wymagania w formularzach na powiązanych ze sobą stronach. Kilku rzeczy niestety nie znaleźliście:
- Po wyprowadzeniu błędów w kodzie JS istniała możliwość zapisu do newslettera, który otwierał kolejny SQL Injection.
- Podobnie zapis opcji w panelu pozwalał na przeprowadzenie iniekcji.
- Hasło do panelu administracyjnego można było uzyskać łamiąc hash hasła z bazy danych, oczywiście po wcześniejszej enumeracji zawartości bazy.