W niemal każdej firmie technologicznej istnieje ten moment ciszy. QA zgłasza podatność. W tickecie pojawia się słowo „critical”. Ktoś z zespołu deweloperskiego rzuca okiem, ktoś inny wzdycha, właściciel produktu dopisuje komentarz: nie teraz, mamy termin. Ticket trafia do backlogu. Sprint mija. Potem kolejny. Aż któregoś dnia temat wraca, już nie jako ticket, tylko jako incydent, w którym nagle wszystko staje się pilne.
To nie jest problem braku wiedzy. Większość zespołów doskonale wie, czym jest XSS, wstrzyknięcie SQL czy błąd kontroli dostępu. Problemem jest sposób podejmowania decyzji. Bezpiecznie nie znaczy „technicznie poprawnie”. Bezpiecznie znaczy „odpornie na nadużycie”. Ten artykuł nie jest listą straszaków. To mapa najczęstszych dziur, które QA widzi regularnie i które najczęściej są odkładane, bo nie wyglądają jak natychmiastowy pożar. A pożar przychodzi później.
Dlaczego QA widzi luki, których inni nie chcą widzieć
QA myśli inaczej niż deweloper i właściciel produktu. Deweloper myśli o tym, jak coś zbudować. Właściciel produktu o tym, co dowieźć i kiedy. QA myśli o tym, jak system może zostać użyty w sposób nieprzewidziany. Z definicji nie ufa założeniu „normalny użytkownik”. Sprawdza, co się stanie, gdy ktoś zrobi coś głupiego, złośliwego albo po prostu przypadkowego. Dokładnie tak samo myśli atakujący.
Paradoks polega na tym, że im bardziej dojrzały technicznie zespół, tym łatwiej mu uwierzyć, że „u nas to się nie zdarzy”. Zdarza się właśnie tam, gdzie system jest duży, złożony i rozwijany pod presją. Lista OWASP Top 10, najbardziej znany ranking ryzyk bezpieczeństwa aplikacji webowych, w edycji z 2021 roku stawia na pierwszym miejscu błędy kontroli dostępu, na trzecim wstrzyknięcia, a na piątym błędną konfigurację zabezpieczeń. Nie dlatego, że są modne, tylko dlatego, że są wszechobecne i wyglądają jak drobiazgi. Poniżej cztery klasy, które QA zgłasza najczęściej, z typowym usprawiedliwieniem i minimalną naprawą.
| Klasa luki | Jak QA ją znajduje | Typowe usprawiedliwienie | Minimalna naprawa |
|---|---|---|---|
| Kontrola dostępu i IDOR (OWASP A01) | Zmiana jednej cyfry w identyfikatorze w adresie albo w żądaniu i cudza faktura na ekranie | „Nikt nie zna tego adresu, to tylko panel wewnętrzny” | Autoryzacja na każdym endpoincie po stronie serwera, test API: użytkownik A nie widzi zasobów użytkownika B |
| Wstrzyknięcia (OWASP A03) | Dane wejściowe trafiające do interpretera: SQL, powłoka, parser, dynamiczne sortowanie | „Przecież używamy ORM-a” | Parametryzacja zapytań, białe listy dla sortowania i filtrów, przegląd miejsc, które ominęły standard |
| XSS bez polityki CSP | Skrypt w komentarzu albo w nazwie pola, który wykonuje się u administratora | „To tylko alert, frontend i tak filtruje” | Kodowanie po stronie serwera, polityka Content Security Policy, test regresji na każdym miejscu renderowania |
| Błędna konfiguracja (OWASP A05) | Za szeroki CORS, brak nagłówków bezpieczeństwa, włączony tryb debugowania, publiczne mapy źródeł, gadatliwe błędy | „Nie wpływa na funkcjonalność” | Standard nagłówków, skanowanie sekretów, bramka w CI na konfigurację, szablony usług z bezpiecznymi domyślnymi ustawieniami |
Źródło: kategorie według OWASP Top 10 (edycja 2021), przykłady i naprawy z praktyki własnej Quality Island.
Kontrola dostępu: „przecież to tylko panel admina”
To najczęstsza klasa podatności w aplikacjach webowych i jednocześnie najbardziej zdradliwa, bo wygląda jak zwykły błąd w logice, a nie jak zagrożenie. QA łapie ją w najbardziej banalny sposób. Loguje się jako zwykły użytkownik i próbuje wykonać akcję zarezerwowaną dla administratora. Bierze adres z panelu administracyjnego, wkleja go w sesji zwykłego użytkownika i widzi odpowiedź. Albo zmienia jedną cyfrę w identyfikatorze zasobu i dostaje fakturę, zamówienie, dokument albo dane profilu innego klienta.
Bezpieczeństwo nie polega na ukrywaniu ścieżek, tylko na kontroli uprawnień po stronie serwera. Jeśli backend ufa temu, co przychodzi z frontendu, prędzej czy później ktoś to wykorzysta. W systemach z danymi klientów ten błąd ma najgorszy możliwy skutek: naruszenie poufności danych osobowych. A wtedy nie mówicie już o poprawce. Mówicie o incydencie, który według artykułu 33 RODO trzeba zgłosić organowi nadzorczemu w miarę możliwości w ciągu 72 godzin od stwierdzenia, o audycie, potencjalnych karach, utracie kontraktów i reputacji. Minimalna naprawa jest zwykle prosta: twarda kontrola uprawnień na każdym endpoincie, sprawdzanie własności zasobu i nudny, ale bezcenny test regresji na poziomie API, który wprost sprawdza, że użytkownik A nie ma dostępu do zasobów użytkownika B.
Wstrzyknięcia: klasyk, który nigdy nie umiera
W teorii wszyscy wiedzą, że wstrzyknięcia to historia sprzed lat. W praktyce QA nadal znajduje miejsca, gdzie da się wprowadzić złośliwe dane, bo systemy są duże, endpointów jest dużo, a kod często powstaje w pośpiechu. Najczęstszy scenariusz: jeden „tymczasowy” endpoint, jeden import danych, jedno narzędzie administracyjne, jedno stare API, które nie dostało tej samej dbałości co główna ścieżka produktu. Wstrzyknięcie rzadko siedzi tam, gdzie wszystko jest zrobione porządnie. Siedzi tam, gdzie ktoś zrobił szybkie obejście, ręcznie złożył zapytanie albo przerzucił logikę do parametrów.
Skutki bywają katastrofalne, bo wstrzyknięcie jest często wejściem do większego łańcucha: od wycieku danych, przez obejście uprawnień, po modyfikację krytycznych rekordów. I to nie jest ryzyko teoretyczne, tylko takie, które atakujący umieją automatyzować. Minimalna naprawa nie sprowadza się do „sanityzacji”. Działa podejście warstwowe: parametryzacja zapytań, unikanie dynamicznego składania poleceń, białe listy dla sortowania i filtrowania, walidacja wejścia i przede wszystkim przegląd miejsc, które ominęły standard. Do tego podstawowe skany w CI i testy z gotowymi ładunkami dla krytycznych endpointów. Najważniejsze: wstrzyknięcie nie jest bugiem. To klasa ryzyka, która ma priorytet nad roadmapą.
XSS: „to tylko JavaScript”
XSS jest ignorowane wyjątkowo często, bo demonstracja wygląda jak żart. QA wkleja ładunek w komentarzu, wyskakuje okienko i ktoś mówi: no dobra, ale to tylko alert. Tyle że alert to dowód, że da się wykonać kod w kontekście ofiary. W realnym ataku chodzi o kradzież sesji, tokenów, danych z formularzy albo o wykonanie akcji w imieniu użytkownika. Najbardziej zdradliwa jest odmiana zapisywana w systemie: ktoś zostawia złośliwy ładunek, a potem otwiera go administrator albo pracownik wsparcia z wyższymi uprawnieniami. „Drobna luka” staje się wejściem do przejęcia konta.
Zespół odkłada XSS, bo „frontend filtruje dane”. Frontend nie jest barierą bezpieczeństwa. Dane mogą wejść inną drogą: przez API, import, integrację albo żądanie wysłane bezpośrednio. Minimalna naprawa to kodowanie po stronie serwera plus sensowna polityka Content Security Policy, która ogranicza wykonywanie nieautoryzowanego skryptu. QA dokłada praktyczny test regresji: kontrolowany ładunek w każdym polu, które jest gdzieś renderowane. Żmudne, ale zrobione raz dla krytycznych pól obniża ryzyko całej klasy ataków.
Błędna konfiguracja: małe rzeczy, duże skutki
To kategoria, która wygląda na czepianie się, dopóki nie zrozumiecie, że właśnie ona najczęściej ułatwia atak. QA zgłasza rzeczy, które brzmią jak drobiazgi: CORS ustawiony zbyt szeroko, brak nagłówków bezpieczeństwa, włączony tryb debugowania, publiczne mapy źródeł, zbyt szczegółowe komunikaty błędów, brak limitów żądań, dostępne endpointy diagnostyczne. Każdy osobno może wyglądać niegroźnie. Razem tworzą środowisko, w którym atak jest tańszy, szybszy i mniej ryzykowny dla atakującego. Nie musicie mieć wstrzyknięcia, żeby mieć incydent. Wystarczy, że ktoś dostanie z komunikatów błędów strukturę aplikacji, endpointy i zależności.
Dlaczego zespoły to ignorują? Bo „nie wpływa na funkcjonalność”. Bezpieczeństwo nie wpływa na funkcjonalność do momentu, gdy wpływa najbardziej. Dobra wiadomość: naprawa błędnej konfiguracji jest zwykle najtańsza z całej listy. To reguły w bramkach CI, standard nagłówków, skanowanie sekretów, szablony usług z bezpiecznymi ustawieniami domyślnymi. QA może dodać automatyczne testy nagłówków, CORS i podstawowych ustawień jako szybkie bramki. To nie musi być test penetracyjny. To ma być elementarna higiena, dokładnie ta sama, którą opisujemy przy testowaniu zgodności z RODO bez blokowania developmentu.
Prawdziwy problem: nikt nie tłumaczy tego na język biznesu
Największym problemem nie jest to, że zespoły nie wiedzą, czym jest IDOR czy XSS. Problemem jest to, że QA mówi językiem podatności, a decydenci podejmują decyzje w języku ryzyka, pieniędzy i reputacji. Jeśli QA mówi „mamy broken access control”, a właściciel produktu słyszy „to tylko przypadek brzegowy”, decyzja będzie zła. Skuteczne zespoły QA nie tylko znajdują dziury. Potrafią je nazwać jako ryzyko biznesowe: wyciek danych klientów, oszustwo, przestój, koszty operacyjne, koszty prawne i wizerunkowe. Dopiero wtedy ticket przestaje być „bugiem bezpieczeństwa”, a staje się decyzją, której nie opłaca się odkładać.
Skalę tego rachunku pokazuje coroczny raport IBM Cost of a Data Breach, który liczy średni koszt naruszenia danych w milionach dolarów i wiąże go z czasem wykrycia i opanowania incydentu. Jak taki rachunek wygląda w praktyce firmy, która luki nie szukała, piszemy w tekście o tym, ile kosztuje luka bezpieczeństwa, której nikt nie szukał. Trzy rzeczy zmieniają grę. Precyzyjny opis ryzyka: co może się stać, jak łatwo to wykorzystać, jaki jest skutek. Prosta rekomendacja naprawy: nie elaborat, tylko minimalny krok, który obniża ryzyko. I bramka: potwierdzony błąd klasy kontroli dostępu albo wstrzyknięcia nie jest tematem do backlogu, tylko do decyzji o wydaniu.
„Dziura bezpieczeństwa w backlogu nie jest bugiem, który czeka na swoją kolej. Jest decyzją, że ryzyko jest akceptowalne. Warto, żeby ktoś tę decyzję podjął świadomie i z podpisem.”
Podsumowanie
Dziury bezpieczeństwa nie są defektem technologicznym. Są defektem decyzyjnym. QA je widzi. Atakujący je widzą. Pytanie brzmi, czy organizacja potraktuje je poważnie, zanim zrobi to ktoś z zewnątrz. Bo gdy zrobi to zespół reagowania, regulator albo media, jest już za późno. Cztery klasy z tego tekstu, kontrola dostępu, wstrzyknięcia, XSS i błędna konfiguracja, mają jedną wspólną cechę: naprawa jest tania, dopóki jest naprawą, a nie reakcją na incydent.
W Quality Island pomagamy zespołom QA i IT zamykać luki, zanim staną się incydentami. Łączymy perspektywę testów, bezpieczeństwa i biznesu: od testów bezpieczeństwa i przeglądu konfiguracji, przez bramki w CI/CD, po sposób opisywania ryzyka, który decydent rozumie bez tłumacza. Jeśli QA w Waszej firmie mówi o bezpieczeństwie, a nikt nie słucha, to nie jest problem QA. To sygnał, że brakuje mechanizmu, który przekłada ryzyko techniczne na decyzję biznesową.
- Najczęstsze luki nie są egzotyczne. OWASP Top 10 od lat stawia na czele kontrolę dostępu, wstrzyknięcia i błędną konfigurację, bo wyglądają jak drobiazgi.
- Frontend nie jest barierą bezpieczeństwa. Uprawnienia, kodowanie i walidacja żyją po stronie serwera, a test „użytkownik A nie widzi danych B” to najtańsza polisa.
- Błędna konfiguracja jest najtańsza do naprawy: nagłówki, CORS, tryb debugowania i sekrety sprawdza bramka w CI, nie pentest.
- Zgłoszenie w języku podatności ląduje w backlogu. Zgłoszenie w języku ryzyka, kosztu i obowiązku z artykułu 33 RODO ląduje na liście decyzji o wydaniu.
- Potwierdzony błąd kontroli dostępu albo wstrzyknięcia nie jest tematem do priorytetyzacji. Jest tematem do decyzji, czy wydajecie.
Jeśli w Waszym backlogu leżą tickety ze słowem „critical”, sprawdźmy, które z nich są incydentem, który jeszcze się nie wydarzył.
Zobaczcie testy bezpieczeństwaPowiązane na Strefie QA
- Ile kosztuje luka bezpieczeństwa, której nikt nie szukał
- Jak testować zgodność z RODO, nie blokując całego developmentu
- Testy bezpieczeństwa aplikacji: minimalny zestaw działań dla zarządów
Źródła:
- OWASP Top 10 (2021), A01: Broken Access Control
- OWASP Top 10 (2021), A03: Injection
- OWASP Top 10 (2021), A05: Security Misconfiguration
- Rozporządzenie (UE) 2016/679 (RODO), artykuł 33: zgłaszanie naruszenia organowi nadzorczemu, EUR-Lex
- IBM, Cost of a Data Breach Report, coroczne badanie kosztów naruszeń danych
- Testy bezpieczeństwa, Quality Island
- Metodyka i praktyka własna Quality Island z testów bezpieczeństwa i przeglądów konfiguracji









Serio te dziury są tak często ignorowane? Troche nie rozumiem bo potem jak cos wybucha to wszyscy zdziwieni chyba bo to wiadomo od lat
Serio, te luki w bezpieczeństwie sa tak oczywiste a nikt nic z tym nie robi bo schowany w backlogu mega słabe to jest