Co to jest - OWASP TOP 10

OWASP TOP 10 stanowi niezwykle istotne narzędzie dla profesjonalistów ds. bezpieczeństwa aplikacji internetowych oraz dla twórców stron internetowych. Na liście 10 najpoważniejszych luk w zabezpieczeniach aplikacji internetowych OWASP klasyfikuje zagrożenia według ich stopnia ryzyka, stanowiąc tym samym kluczową listę kontrolną dla każdego, kto dba o bezpieczeństwo witryn internetowych czy rozwija aplikacje online.

Fundacja OWASP, czyli Open Worldwide Application Security Project, to organizacja non-profit, która odgrywa znaczącą rolę w kształtowaniu bezpieczeństwa aplikacji internetowych. Działa na rzecz tworzenia ram oceny ryzyka, standardów branżowych, najlepszych praktyk oraz narzędzi, tworząc otwartą przestrzeń, w której specjaliści z całego świata mogą dzielić się wiedzą i doświadczeniem.

Warto podkreślić, że lista OWASP TOP 10 opiera się na danych zebranych od ponad 200 000 organizacji oraz ankietach przeprowadzonych wśród ekspertów branżowych. Mimo że aktualizacja jeszcze się nie pojawiła, a OWASP  korzysta z informacji zawartych w liście z 2021 roku, nie można bagatelizować istotności tych zagrożeń. Bezpieczeństwo aplikacji internetowych jest dynamicznym obszarem, a zagrożenia ciągle ewoluują. Dlatego wszyscy zaangażowani w tworzenie stron internetowych czy zarządzanie ich bezpieczeństwem muszą być świadomi ryzyka i stale podnosić swoje kompetencje, aby skutecznie przeciwdziałać współczesnym zagrożeniom.

Najważniejsze luki w zabezpieczeniach aplikacji internetowych.

1. Zepsuta kontrola dostępu – wciąż aktualne zagrożenie.

Zagrożenie związane z złą kontrolą dostępu, awansując z piątego miejsca w 2017 roku na pozycję numer jeden w 2021 roku, pozostaje jednym z najpoważniejszych problemów w zakresie bezpieczeństwa. Kontrola dostępu stanowi kluczowy element, który powinien ograniczać dostęp użytkowników do zasobów i funkcji zgodnie z ich uprawnieniami. Kiedy mówimy o zepsutej kontroli dostępu, odnosi się to do sytuacji, gdy system nie egzekwuje odpowiednich ograniczeń.

Istnieje wiele powodów, dla których kontrola dostępu może zawodzić. Błędna konfiguracja systemu, występowanie Insecure Direct Object References (IDOR), gdzie aplikacja ujawnia bezpośrednie odniesienia do zasobów, takich jak pliki czy rekordy bazy danych, a także niebezpieczne zarządzanie sesją, gdzie luki w kontrolowaniu sesji mogą pozwalać atakującym przejąć kontrolę nad sesjami użytkowników – to tylko niektóre z potencjalnych problemów.

Zasada najmniejszych uprawnień – ostrzeżenie dla programistów i administratorów

Programiści i administratorzy systemów powinni konsekwentnie stosować zasadę najmniejszych uprawnień. To oznacza, że użytkownicy powinni otrzymywać tylko te uprawnienia, które są absolutnie niezbędne do wykonania swoich zadań, a nic ponadto.

Sprawdzanie i utrzymywanie czystości Danych –  kluczowa zasada bezpieczeństwa.

Wszystkie dane wprowadzane przez użytkownika powinny być dokładnie sprawdzane i oczyszczane, aby uniemożliwić atakującym wprowadzanie złośliwych danych. Ponadto, konieczne jest zastosowanie kontroli dostępu do interfejsów API, a każde żądanie powinno być poddawane autoryzacji.

Regularne audyty i przeglądy kodu – niezbędne działania zapobiegawcze.

Regularne audyty bezpieczeństwa oraz przeglądy kodu są nieodzowne, aby zidentyfikować i naprawić potencjalne problemy z kontrolą dostępu. Wdrożenie uwierzytelniania wieloskładnikowego jest kolejnym kluczowym środkiem, mającym na celu ograniczenie nieautoryzowanego dostępu.

W związku z powyższym, priorytetem dla każdej organizacji powinno być utrzymanie silnej i niezawodnej kontroli dostępu poprzez stałe monitorowanie, aktualizacje systemów oraz edukację pracowników. Bezpieczeństwo to proces ciągły, a odpowiednie środki ostrożności są kluczem do ochrony przed współczesnymi zagrożeniami związanymi z kontrolą dostępu.

Oto kilka przykładów:

  1. Błędna Konfiguracja Uprawnień:

    • Opis: Administrator konfiguruje błędnie uprawnienia do określonych zasobów, pozostawiając otwarte drzwi dla nieuprawnionych użytkowników.
    • Skutek: Atakujący zyskują dostęp do danych, które nie powinny być dla nich dostępne.
  2. Atak Insecure Direct Object Reference (IDOR):

    • Opis: Brak odpowiednich kontroli po stronie serwera pozwala użytkownikowi na dostęp do obiektów (plików, rekordów bazy danych) bez wymaganych uprawnień.
    • Skutek: Osoba atakująca może uzyskać poufne informacje lub manipulować danymi.
  3. Niebezpieczne Zarządzanie Sesją:

    • Opis: Niepoprawna obsługa sesji umożliwia atakującym przejęcie kontroli nad sesją użytkownika.
    • Skutek: Atakujący mogą podrobić tożsamość użytkownika, uzyskując dostęp do poufnych funkcji lub danych.
  4. Wstrzykiwanie Danych:

    • Opis: Atakujący wstrzykuje złośliwe dane, takie jak polecenia SQL, w celu obejścia kontroli dostępu.
    • Skutek: Może prowadzić do naruszenia bazy danych i uzyskania dostępu do informacji, do których normalnie nie byłoby uprawnień.
  5. Brak Autoryzacji przy Użyciu API:

    • Opis: Niepoprawna implementacja kontroli dostępu do interfejsów API pozwala nieuprawnionym osobom na korzystanie z funkcji API.
    • Skutek: Atakujący mogą manipulować danymi za pośrednictwem API, ominięcie istniejących zabezpieczeń.
  6. Niezabezpieczony Kod Cookie:

    • Opis: Brak odpowiednich zabezpieczeń warstwy transportowej dla plików cookie.
    • Skutek: Atakujący mogą przechwycić sesję użytkownika, co pozwala na nieautoryzowany dostęp.

2. Awarie kryptograficzne – bezpieczeństwo w liczbach i algorytmach.

Awarie kryptograficzne, dawniej znane jako „Narażenie danych wrażliwych”, przeniosły się z trzeciego miejsca na pierwsze, co podkreśla ich znaczenie w kontekście bezpieczeństwa aplikacji internetowych. Nazwa została zmieniona, aby bardziej skoncentrować się na przyczynach niż na skutkach, gdyż kryptografia, choć kluczowa dla ochrony wrażliwych danych, może ulec awarii z różnych powodów.

Kryptografia odgrywa kluczową rolę w zabezpieczaniu nadzwyczaj wrażliwych danych, takich jak numery kart kredytowych czy dane identyfikacyjne podczas ich transmisji. Jednakże, słabe algorytmy szyfrowania czy zastosowanie zbyt krótkich kluczy szyfrujących mogą stworzyć podatność, ułatwiając atakującym odszyfrowanie chronionych informacji.

Przykłady błędów kryptograficznych obejmują także niebezpieczne przechowywanie haseł, braki w zabezpieczeniach warstwy transportowej (co otwiera drogę do ataków typu man-in-the-middle), używanie słabych protokołów SSL/TLS czy korzystanie z niebezpiecznych zestawów szyfrów, co stawia aplikację internetową w sytuacji podatnej na ataki.

Zabezpiecz swoje algorytmy – praktyki bezpiecznej kryptografii.

Aby skutecznie przeciwdziałać awariom kryptograficznym, istotne jest przeprowadzanie regularnych testów bezpieczeństwa, takich jak przeglądy kodu czy oceny podatności. To pozwoli zidentyfikować potencjalne słabe punkty i podjąć odpowiednie kroki naprawcze. Ponadto, warto rozważyć wykorzystanie bezpiecznych bibliotek kryptograficznych, które są starannie opracowane i utrzymywane, aby uniknąć pułapek związanych z implementacją algorytmów od zera.

W świecie, gdzie dane są jednym z najcenniejszych zasobów, skupienie się na bezpieczeństwie kryptograficznym staje się imperatywem. Wdrażając solidne praktyki i środki zabezpieczające, możemy skutecznie chronić nasze systemy przed awariami kryptograficznymi i zagwarantować integralność najbardziej wrażliwych informacji.

Oto kilka przykładów:

  1. Słabe Algorytmy Szyfrowania:

    • Opis: Użycie przestarzałych, słabych algorytmów szyfrowania, które mogą być łatwo złamane.
    • Skutek: Atakujący, korzystając z nowocześniejszych metod kryptograficznych, mogą odszyfrować chronione dane.
  2. Krótkie Klucze Szyfrowania:

    • Opis: Zastosowanie zbyt krótkich kluczy szyfrujących.
    • Skutek: Krótkie klucze są podatne na ataki brute force, co umożliwia atakującym odszyfrowanie danych.
  3. Błąd w Przechowywaniu Haseł:

    • Opis: Niebezpieczne przechowywanie haseł, takie jak zapisywanie ich w postaci jawnej lub zastosowanie słabych funkcji haszujących.
    • Skutek: Atakujący mogą uzyskać dostęp do haseł użytkowników, co stwarza ryzyko dostępu do wielu kont.
  4. Niebezpieczne Protokoły SSL/TLS:

    • Opis: Użycie przestarzałych, podatnych na ataki protokołów bezpieczeństwa warstwy transportowej.
    • Skutek: Atakujący mogą przechwycić i dekodować dane przesyłane pomiędzy klientem a serwerem.
  5. Nieprawidłowe Zarządzanie Certyfikatami SSL:

    • Opis: Błędy w zarządzaniu certyfikatami SSL/TLS.
    • Skutek: Atakujący mogą podszyć się pod prawdziwy serwer, prowadząc ataki typu man-in-the-middle.
  6. Ukryte Błędy w Implementacji Kryptografii:

    • Opis: Błędy programistyczne, które prowadzą do nieprawidłowej implementacji algorytmów kryptograficznych.
    • Skutek: Atakujący mogą wykorzystać te błędy, aby obejść zabezpieczenia i uzyskać dostęp do chronionych danych.
  7. Ataki na Zabezpieczenia Kryptograficzne:

    • Opis: Inne techniki, takie jak ataki typu side-channel, które wykorzystują fizyczne właściwości systemu (np. zużycie energii) do wydobywania informacji o kluczach kryptograficznych.
    • Skutek: Odszyfrowanie danych poprzez analizę niepożądanych informacji wydostających się z systemu.


Efekty te ilustrują, jak ważne jest stosowanie silnych algorytmów kryptograficznych, bezpiecznego przechowywania haseł, a także regularne aktualizacje protokołów bezpieczeństwa. Wszelkie uchybienia w tych obszarach mogą prowadzić do poważnych konsekwencji dla bezpieczeństwa informacji.

3. Wstrzykiwanie – gdzie dane stają się bronią.

Wstrzykiwanie, dawniej znane głównie jako Injection, zajmujące pierwsze miejsce w 2017 roku, dziś skonsolidowane pod jednym terminem w OWASP 2023, awansowało na trzecie miejsce. Ataki tego rodzaju nadal są jednym z najpoważniejszych zagrożeń, wykorzystując lukę w sposobie, w jaki aplikacje obsługują i weryfikują dane wejściowe.

Atak polegający na wstrzykiwaniu wykorzystuje niedociągnięcia w procesie sprawdzania danych wejściowych, pozwalając atakującym na wprowadzanie złośliwych danych, takich jak zapytania SQL czy fragmenty kodu, do formularzy aplikacji internetowych czy adresów URL. Skutkuje to nie tylko dostępem do wrażliwych danych, ale także manipulacją zachowania aplikacji.

Przykłady ataków wstrzykiwania obejmują:

Wstrzykiwanie SQL – atakujący wprowadza złośliwe zapytania SQL, próbując naruszyć bazę danych i uzyskać nieautoryzowany dostęp do informacji.

Cross-Site Scripting (XSS) – często oparte na JavaScript, ataki XSS wykorzystują zainfekowane strony internetowe do manipulacji sesji, kradzieży plików cookie lub innych ataków na przeglądarkę użytkownika.

Wstrzykiwanie poleceń – atakujący wprowadza złośliwe polecenia do systemowych poleceń wykonywanych przez aplikację, próbując uzyskać kontrolę nad serwerem lub przeprowadzić nieautoryzowane operacje.

Wstrzykiwanie LDAP – atak polegający na manipulowaniu zapytaniami LDAP używanymi do uwierzytelniania i autoryzacji, mający na celu uzyskanie nieuprawnionego dostępu.

Wstrzykiwanie XML – atakujący wstrzykują złośliwe dane XML, potencjalnie zakłócając proces analizy aplikacji w celu uzyskania dostępu.

Wstrzykiwanie szablonów po stronie serwera (SSTI) –  atakujący wstrzykują złośliwy kod do szablonów po stronie serwera w celu wykonania kodu na serwerze.

Dla zapewnienia skutecznej obrony przed atakami wstrzykiwania, kluczowe jest regularne przeprowadzanie testów bezpieczeństwa, audytów kodu oraz stosowanie praktyk, takich jak ograniczanie uprawnień użytkowników i skrupulatna walidacja danych wejściowych. W miarę ewolucji technologii, zabezpieczenia przed tego rodzaju atakami stają się równie krytyczne, co rozwój samych aplikacji.

4. Niebezpieczny projekt – ochrona przed wadliwymi koncepcjami.

Kategoria niebezpieczny projekt wprowadzona przez OWASP  to ważne zagadnienie, które zdobyło rozgłos w 2021 roku. Obejmuje ona błędy w projektach aplikacji oraz niedoskonałości w architekturze, które mogą stać się łakomym kąskiem dla hakerów. Luki w zabezpieczeniach tego typu pojawiają się, gdy zespoły programistyczne nie przestrzegają najlepszych praktyk w zakresie bezpieczeństwa i nie potrafią skutecznie przewidzieć oraz ocenić potencjalnych zagrożeń na etapie projektowania kodu podczas tworzenia aplikacji.

Przykładem niebezpiecznego projektu jest aplikacja generująca nadmiernie szczegółowe komunikaty o błędach. Jeśli zgłasza zbyt wiele informacji dotyczących błędów, w tym wskazówki diagnostyczne odnośnie środowiska aplikacji, może to ułatwić atakującym zdobycie cennych danych. Te informacje mogą być wykorzystane do przeprowadzenia różnorodnych ataków, takich jak przecięcie ścieżki lub wstrzyknięcie SQL.

W celu zabezpieczenia się przed lukami w zabezpieczeniach projektu, kluczowe jest stosowanie spójnego modelowania zagrożeń.