| Termin | Definicja |
|---|---|
| brak ograniczeń dla gościa | Brak ograniczeń dla gościa to luka bezpieczeństwa przyznająca użytkownikowi niezalogowanemu nadmierny zakres dostępu do funkcji systemu. Brak ograniczeń dla gościa – czym jest ta podatnośćBrak ograniczeń dla gościa opisuje sytuację, w której osoba korzystająca z aplikacji bez logowania otrzymuje dostęp do funkcji przeznaczonych dla użytkowników uwierzytelnionych, moderatorów albo operatorów systemu. Problem nie musi polegać wyłącznie na możliwości otwarcia ukrytej podstrony. Często ujawnia się dopiero podczas wysyłania odpowiednio przygotowanego żądania do adresu aplikacji, formularza, interfejsu programistycznego lub modułu administracyjnego. Jeżeli po stronie systemu nie następuje prawidłowa weryfikacja tożsamości oraz uprawnień, sam fakt znajomości adresu funkcji może wystarczyć do jej użycia. W praktyce luka może prowadzić do odczytu danych, zmiany ustawień, dodawania treści, usuwania rekordów, pobierania dokumentów albo wykonania operacji przypisanych konkretnym rolom. Niekiedy wystarcza brak kontroli przy jednym przycisku lub pojedynczej metodzie zaplecza, aby dostęp uzyskał cały zakres funkcji powiązanych z danym modułem. Z tego powodu ocena problemu nie powinna ograniczać się do wyglądu interfejsu. Ukryty przycisk nie stanowi zabezpieczenia, jeżeli identyczną operację da się wywołać bezpośrednio. Istotne jest rozróżnienie pomiędzy treścią, która zgodnie z założeniami ma być publiczna, a operacją, która wymaga identyfikacji użytkownika. Publiczny artykuł, formularz kontaktowy lub katalog mogą być dostępne bez konta, natomiast edycja wpisu, podgląd prywatnego zgłoszenia czy zmiana danych konta powinny być objęte kontrolą dostępu. Brak takiej granicy jest błędem projektowym, a nie tylko usterką kosmetyczną. Brak ograniczeń dla gościa – kontekst techniczny i porównaniaW poprawnie zaprojektowanej aplikacji kontrola dostępu działa na kilku poziomach. Najpierw sprawdzane jest, czy żądanie pochodzi od zalogowanej osoby. Następnie oceniana jest rola, zakres uprawnień oraz relacja z konkretnym obiektem. Samo zalogowanie nie powinno automatycznie oznaczać dostępu do wszystkich danych. Przykładowo użytkownik może mieć prawo do odczytu własnego zgłoszenia, lecz nie do odczytu zgłoszeń innych osób. Gość nie powinien natomiast otrzymywać uprawnień tylko dlatego, że zna adres formularza albo identyfikator rekordu. Warto odróżnić ten problem od błędów związanych z przewidywaniem identyfikatorów. W jednym przypadku ograniczenie dla gościa nie działa w ogóle lub działa wybiórczo. W drugim kontrola może istnieć, lecz dopuszcza dostęp do niewłaściwego obiektu po zmianie numeru w adresie. Oba zjawiska mogą wystąpić równocześnie, dlatego test powinien obejmować zarówno brak sesji, jak i różne role zalogowanych użytkowników. Nie należy również utożsamiać ochrony z ukrywaniem elementów strony. Usunięcie odnośnika, wyłączenie przycisku w kodzie interfejsu albo przekierowanie z jednej podstrony nie zastępuje kontroli po stronie aplikacji. Żądanie może zostać wysłane ręcznie, z użyciem narzędzi deweloperskich lub przez inny klient. Decyzja o dopuszczeniu operacji powinna być podejmowana przy każdym żądaniu, niezależnie od tego, z jakiego widoku zostało ono wysłane. Znaczenie ma także sposób obsługi błędów. Komunikat o braku uprawnień powinien być spójny i nie ujawniać wrażliwych szczegółów. Samo ukrywanie danych w interfejsie przy jednoczesnym przesyłaniu ich do przeglądarki nie rozwiązuje problemu. Ochrona powinna obejmować odpowiedź, zapis danych, możliwość pobrania pliku oraz skutki uboczne operacji. Brak ograniczeń dla gościa – typowe problemy i objawyNajczęściej spotykanym objawem jest możliwość otwarcia funkcji po wylogowaniu. Może to dotyczyć panelu profilu, historii zgłoszeń, formularza edycji, eksportu danych, przesyłania plików albo mechanizmu zmiany hasła. Czasami strona jest widoczna, lecz system nie blokuje zapisania zmian. W innym wariancie odczyt zostaje ograniczony, ale modyfikacja nadal jest możliwa. Każdy z tych przypadków wymaga osobnej oceny, ponieważ ryzyko zależy od rodzaju danych i odwracalności operacji. Niebezpieczne bywają także funkcje pomocnicze. Przykładem może być podgląd szczegółów zamówienia po samym numerze, ponowne wysłanie wiadomości, generowanie dokumentu, sprawdzenie statusu zgłoszenia albo pobranie załącznika. Pozornie niewielka funkcja może ujawniać dane osobowe, historię kontaktu, tokeny, identyfikatory lub informacje pozwalające na dalsze działania. Szczególnej uwagi wymagają mechanizmy wykonywane przez żądania bezpośrednie, ponieważ ich obecność często nie jest widoczna w głównym menu. Do błędu może dojść po zmianie formularza, migracji aplikacji, dodaniu nowej roli, integracji z modułem płatności albo przeniesieniu uprawnień do innego komponentu. Wtedy funkcja działa poprawnie dla osoby zalogowanej, ale zapomniano dodać sprawdzenie dla żądania przychodzącego bez sesji. Ryzyko rośnie także wtedy, gdy każda podstrona posiada własne, niespójne reguły dostępu zamiast korzystać ze wspólnego mechanizmu. W dziennikach zdarzeń mogą pojawić się żądania do chronionych adresów pochodzące od użytkowników bez sesji, odpowiedzi wskazujące sukces przy braku identyfikatora konta albo operacje zapisu bez przypisanego właściciela. Nie powinno się jednak zakładać, że brak takich wpisów oznacza brak podatności. Rejestrowanie może być niepełne, a niektóre systemy zapisują jedynie błędy techniczne, pomijając zdarzenia związane z autoryzacją. Brak ograniczeń dla gościa – praktyczne wskazówki ochronyW pierwszej kolejności powinno zostać przygotowane zestawienie funkcji dostępnych bez logowania oraz funkcji wymagających konta. Dla każdej operacji warto wskazać minimalne uprawnienie, właściciela danych i oczekiwany rezultat przy braku sesji. Takie zestawienie ułatwia wykrycie wyjątków, które przez przypadek zostały pozostawione publiczne.
Test powinien zaczynać się od bezpiecznego potwierdzenia, że dana funkcja należy do zakresu sprawdzanej aplikacji. Następnie należy wykonać żądanie bez aktywnej sesji i sprawdzić nie tylko kod odpowiedzi, ale też treść, zmianę stanu, utworzone rekordy oraz wysłane powiadomienia. W środowisku testowym warto stosować dane pozbawione rzeczywistych informacji. Jeżeli potrzebna jest analiza istniejącego komputera, laptopa lub aplikacji uruchomionej lokalnie, przydatne bywa zebranie logów, konfiguracji oraz informacji o ostatnich zmianach przed rozpoczęciem naprawy. Naprawa powinna polegać na wprowadzeniu centralnej kontroli dostępu, uporządkowaniu ról, unieważnieniu ujawnionych sesji oraz sprawdzeniu, czy luka nie pozwoliła na wcześniejsze modyfikacje. Samo zablokowanie jednego adresu może być niewystarczające, jeśli ta sama operacja pozostaje dostępna przez alternatywny formularz lub inną metodę żądania. Brak ograniczeń dla gościa – kiedy zgłosić się do serwisuDo serwisu warto zgłosić się wtedy, gdy po wylogowaniu nadal da się otworzyć dane prywatne, zmienić ustawienia, pobrać plik, wysłać formularz w imieniu innej osoby albo wykonać działanie przeznaczone dla zalogowanego użytkownika. Zgłoszenie jest uzasadnione również wtedy, gdy nie ma pewności, czy problem dotyczy aplikacji, konfiguracji systemu, przeglądarki lub złośliwego oprogramowania. Warszawskie Pogotowie Komputerowe 24/7 może zostać wskazane jako miejsce konsultacji dotyczącej diagnostyki i uporządkowania problemu na komputerze lub laptopie. Przed przekazaniem sprzętu nie powinno się usuwać logów, historii zdarzeń ani podejrzanych plików, ponieważ mogą pomóc w ustaleniu zakresu problemu. Dobrze jest zanotować przybliżony czas wystąpienia, wykonane czynności, używane konto oraz komunikaty pojawiające się na ekranie. Nie należy natomiast przesyłać haseł, aktywnych tokenów ani pełnych kopii baz danych w zwykłym formularzu kontaktowym. Jeżeli luka mogła doprowadzić do ujawnienia danych, potrzebne jest równoległe zabezpieczenie kont: zmiana haseł, unieważnienie sesji, sprawdzenie dodatkowych metod logowania i przegląd historii aktywności. Gdy problem dotyczy kodu aplikacji, naprawa powinna zostać wykonana przez osobę odpowiedzialną za jej rozwój, natomiast serwis sprzętowy może pomóc w wykluczeniu lokalnych przyczyn, przygotowaniu urządzenia do dalszej analizy i uporządkowaniu podstawowej diagnostyki. |