Bezpieczeństwo Aplikacji

Wykład 1: Krajobraz współczesnych zagrożeń, anatomia podatności i zautomatyzowane testowanie kodu

Uczelnia Uniwersytet WSB Merito we Wrocławiu
Kierunek i stopień Informatyka, Studia II stopnia (magisterskie)
Wykładowca mgr Przemysław Żarnecki
Semestr Zimowy 2026 / 2027
Repozytorium Git: https://dev.zarnecki.org/Merito/bezpieczenstwo_aplikacji.git
Chmura Nextcloud: https://chmura.zarnecki.org/s/iLdT3J5YGTTYCPr ↗
GitHub Pages: https://pzarnecki.github.io/bezpieczenstwo_aplikacji/ ↗
🎓 Oficjalnie: Wszystkie materiały formalnie znajdują się na platformie Moodle.
Wprowadzenie do rzeczywistości

„Kochanie, czy nasz ekspres do kawy właśnie pinguje Chiny?”

Prawdziwy incydent opisany przez ITHardware: kiedy domowe AGD zaczyna żyć własnym życiem sieciowym

Ekspres do kawy Keurig
Fot. ITHardware.pl / Przypadek inteligentnego ekspresu Keurig podłączonego do domowego Wi-Fi
„Właściciel urządzenia zauważył w statystykach domowego routera brzegowego, że w ciągu zaledwie 10 dni jego inteligentny ekspres do kawy przetransferował do Internetu około 1 TB danych i pobrał niemal 10 GB...” Źródło: Raporty branżowe / ITHardware.pl (Październik 2026)
Pytanie na rozgrzewkę do sali:
Czy ekspres pobierał instrukcje parzenia kawy w bezstratnym wideo 8K?
Absolutnie nie. Urządzenie zostało przejęte przez zautomatyzowane boty skanujące sieć i włączone w skład globalnego botnetu.
Nie tylko ekspresy: Wpadki aplikacji 2025/2026
Masowe wycieki z baz Firebase w aplikacjach mobilnych, zdalne wykonanie kodu (RCE) w desktopowym Electronie oraz paraliż łańcucha dostaw. Zobacz szczegółowe przykłady.
Przykłady ze świata: Wpadki aplikacji mobilnych, desktopowych i chmurowych (2025 / 2026)
1. Aplikacje mobilne (Android/iOS)
Masowe wycieki z baz Firebase & Firestore:
Raporty z lat 2025/2026 ujawniły ponad 150 popularnych aplikacji mobilnych (łącznie ponad 100M pobrań) z regułą allow read: if true pozostawioną w środowisku produkcyjnym.

Skutek: Publiczny wyciek milionów czatów, dokumentów tożsamości, haseł jawnym tekstem oraz kluczy do AWS/GitHub.

Luki Deep Links: Brak sanityzacji schematów URL w aplikacjach mobilnych pozwalał obcym witrynom przejmować sesje w tle.
2. Aplikacje desktopowe (Electron)
Zdalne wykonanie kodu (RCE) przez protokoły URL:
Aplikacje desktopowe (komunikatory i narzędzia biurowe oparte na Electronie) rejestrują w systemie Windows/macOS protokoły typu app://.

Mechanizm podatności (klasa podatności CVE-2018-1000006 w protokołach URL): Wstrzyknięcie argumentów do Chromium (np. --no-sandbox) przez spreparowany odnośnik webowy.

Skutek: Kliknięcie linku na stronie www uruchamiało lokalną aplikację desktopową i wykonywało złośliwy kod na komputerze użytkownika.
3. Chmura i łańcuch dostaw
Paraliż infrastruktury i zatrute biblioteki:
CrowdStrike Falcon: Błąd walidacji pliku konfiguracyjnego w sterowniku doprowadził do BSOD na 8.5 mln maszyn (lotniska, banki, szpitale). Lekcja: brak testów kanarkowych i brak walidacji wejścia w komponencie krytycznym.

Atak Polyfill.io: Przejęcie domeny popularnej biblioteki JavaScript i wstrzyknięcie złośliwego kodu do ponad 100 000 serwisów internetowych.
Wspólny mianownik: Żadna z tych katastrof nie wymagała łamania algorytmów kryptograficznych. Wszystkie wynikały z: błędnej konfiguracji uprawnień, braku walidacji parametrów wejściowych oraz ślepego zaufania do zewnętrznego kodu.

Lista Grozy: 50 spektakularnych kompromitacji oprogramowania (2020–2026)

Rzeczywiste studia przypadków: od błędów autoryzacji w API i kompromitacji pamięci po zatruty łańcuch dostaw open-source

Widoczne: 50 z 50 aplikacji
# Aplikacja / Usługa Kategoria Rok / Identyfikator Wektor podatności & Mechanizm błędu Skutki i skala incydentu
01TikTokMobilne2022 / CVE-2022-287991-kliknięciowe przejęcie konta przez spreparowany Deep Link wywołujący nieautoryzowany WebView JS bridgeKradzież sesji, podmiana wideo i dostęp do prywatnych wiadomości milionów kont
02WhatsAppMobilne2022 / CVE-2022-36934Integer overflow w bibliotece dekodowania wideo (Zero-Click RCE podczas nawiązywania połączenia)Zdalne wykonanie kodu na smartfonie ofiary bez konieczności odbierania rozmowy
03Telegram (Android)Mobilne2024 / CVE-2024-34475Błąd parsera plików ("EvilVideo"); spreparowany pakiet APK maskowany jako wideo z automatycznym podglądemPobranie i instalacja złośliwego oprogramowania na urządzeniu po 1 kliknięciu w czacie
04ClubhouseMobilne2021 / API ScrapingPubliczny endpoint REST API pozbawiony limitu zapytań (Rate Limiting) i tokenów anty-botowychMasowy scraping bazy 1.3 mln użytkowników, numerów telefonów i powiązań społecznościowych
05Instagram (Meta)Mobilne2023 / Błąd API 2FABrak limitu prób (rate limiting) na endpointach API weryfikacji 6-cyfrowego kodu SMS przy resetowaniu 2FAMożliwość brute-force'u kodu weryfikacyjnego i przejęcia dowolnego profilu bez hasła
0623andMeMobilne / SaaS2023 / Credential StuffingAtak wypychania poświadczeń + funkcja "DNA Relatives" bez segmentacji uprawnień (BOLA)Eksfiltracja danych genetycznych, pochodzenia etnicznego i genealogii 6.9 mln osób
07DuolingoMobilne2023 / API ExposurePubliczny endpoint API synchronizacji kontaktów dostępny bez uwierzytelnieniaPobranie i wyciek bazy 2.6 mln kont powiązanych z realnymi adresami e-mail i telefonami
08StravaMobilne2024 / Błąd anonimizacjiGlobalna funkcja Heatmap i publiczne tablice segmentów biegowych ujawniające precyzyjne ścieżki GPSDeanonimizacja tajnych placówek wojskowych w Syrii oraz tras biegowych ochrony przywódców państw
09ParkMobileMobilne2021 / API VulnerabilityBrak autoryzacji w zewnętrznym API backendu aplikacji mobilnejKradzież bazy danych 21 mln kierowców: numery rejestracyjne, maile, telefony, hasła bcrypt
10Signal (Android/iOS)Mobilne2020 / CVE-2020-6514Błędy w parsowaniu strumieni WebRTC w silniku zestawiania połączeńPotencjalne wycieki metadanych i anomalie pamięci w komunikacji peer-to-peer
11DiscordDesktop2023 / Electron RCEOminięcie reguł contextIsolation i podatność odtwarzacza multimediów przez protokoły niestandardoweZdalne wykonanie kodu na maszynie gracza po kliknięciu linku ze spreparowanym protokołem
12Slack DesktopDesktop2023 / Session Token TheftPrzechowywanie nieszyfrowanych tokenów sesyjnych xoxc- w lokalnej pamięci podręcznej i błędy webhookówWykradzenie tokenów z lokalnych dysków i kradzież prywatnych repozytoriów kodu źródłowego
13ZoomDesktop2020 / CVE-2020-6109Wstrzyknięcie ścieżek UNC w oknie czatu + brak obiecywanego pełnego szyfrowania E2EKradzież skrótów NTLM użytkowników systemu Windows po najechaniu na odnośnik w trakcie spotkania
14Microsoft TeamsDesktop2023 / CVE-2023-33215Błąd weryfikacji tokenów w integracji z kontami zewnętrznymi w kliencie desktopowymMożliwość podszywania się napastników spoza organizacji pod wewnętrznych pracowników
15AnyDeskDesktop2024 / Supply ChainWłamanie do systemów produkcyjnych i kradzież prywatnego certyfikatu podpisywania kodu źródłowegoWymuszenie unieważnienia wszystkich certyfikatów i pilna aktualizacja binariów u milionów użytkowników
16TeamViewerDesktop2024 / Credential CompromiseWłamanie grupy APT29 z użyciem skompromitowanych poświadczeń pracownika korporacjiNieautoryzowany dostęp do wewnętrznego środowiska IT producenta oprogramowania
17Signal DesktopDesktop2023 / Nieszyfrowana SQLitePrzechowywanie klucza deszyfrującego w jawnym pliku JSON obok bazy db.sqlite w katalogu profiluBłyskawiczne odczytanie całej historii wiadomości po uzyskaniu lokalnego dostępu do systemu plików
18Telegram DesktopDesktop2024 / CVE-2024-31497Błąd obsługi skrótów i automatyczne uruchamianie archiwów Pythona (.pyz) maskowanych jako pliki wideoZdalne wykonanie złośliwego kodu na komputerze ofiary po kliknięciu pliku na czacie
19KeePassDesktop2023 / CVE-2023-32784Pozostawianie znaków hasła głównego w nieszyfrowanej pamięci procesu przez kontrolkę SecureTextBoxOdtworzenie pełnego hasła master ze zrzutu pamięci RAM (np. po ataku malware lub hibernacji)
20WinRARDesktop2023 / CVE-2023-38831Błąd logiczny w obsłudze nazw rozszerzeń plików o identycznych nazwach katalogów w archiwumUruchomienie ukrytego skryptu .cmd/bat zamiast pliku graficznego PNG/JPG bez ostrzeżeń
21LastPassWeb & SaaS2022/2023 / Lateral MovementPrzejęcie prywatnego komputera pracownika DevOps przez lukę w Plex, kradzież kluczy AWS IAMEksfiltracja produkcyjnych kopii zapasowych sejfów haseł milionów użytkowników i korporacji
22OktaWeb & SaaS2023 / HAR Files LeakDostęp napastników do systemu ticketowego zawierającego niesanowane pliki sesyjne HTTP ArchiveKradzież aktywnych tokenów sesyjnych administratorów 100% klientów korporacyjnych Okty
23CircleCIWeb & SaaS2023 / Infekcja stacji DevOpsInfekcja stacji roboczej pracownika trojanem kradnącym sesje 2FA i tokeny dostępu SSOKradzież sekretów CI/CD, tokenów AWS i certyfikatów produkcyjnych tysięcy firm technologicznych
24CanvaWeb & SaaS2020 / SQLi & BOLALuki weryfikacji tokenów OAuth i nieparametryzowane zapytania do bazy danychWyciek danych 139 mln użytkowników (nazwiska, maile, lokalizacje, skróty haseł)
25Trello (Atlassian)Web & SaaS2024 / API ExposureNiezabezpieczony publiczny endpoint REST API /members/ pozwalający na odpytanie o dowolny e-mailEksfiltracja i sprzedaż bazy 15 mln kont powiązanych z publicznymi i prywatnymi profilami
26Twitter / XWeb & SaaS2022/2023 / IDOR w APIBrak kontroli autoryzacji przy odpytywaniu mechanizmu synchronizacji kontaktówWyciek i publiczne opublikowanie bazy 200 mln użytkowników wiążącej profile z mailami
27Dropbox SignWeb & SaaS2024 / Skompromitowane APINieautoryzowany dostęp do systemu konfiguracji produkcyjnej i bazy kluczy APIDostęp atakujących do szablonów prawnych, podpisów cyfrowych oraz kluczy uwierzytelniania
28Atlassian ConfluenceWeb & SaaS2023 / CVE-2023-22515Broken Access Control na ścieżce /setup/* pozwalający na ponowne uruchomienie instalatoraZdalne utworzenie nowego konta administratora bez żadnych poświadczeń i przejęcie bazy wiedzy
29GitHub (OAuth Apps)Web & SaaS2022 / Token TheftKradzież tokenów OAuth należących do aplikacji Heroku i Travis CI ze skompromitowanych bazPobranie zawartości prywatnych repozytoriów dziesiątek organizacji korzystających z tych narzędzi
30Snowflake / TicketmasterWeb & SaaS2024 / Credential StuffingBrak wymuszenia MFA na kontach analitycznych baz danych i brak mechanizmów detekcji anomaliiWyciek danych 560 mln klientów Ticketmaster oraz milionów klientów banku Santander
31Microsoft ExchangeInfra & Chmura2021 / ProxyLogon (CVE-2021-26855)Podatność SSRF w połączeniu z niebezpieczną deserializacją w usłudze Exchange Web ServicesMasowe, w pełni zautomatyzowane RCE na serwerach pocztowych korporacji i rządów na całym świecie
32Microsoft OutlookInfra & Chmura2023 / CVE-2023-23397Wstrzyknięcie zewnętrznej ścieżki UNC w polu dźwięku powiadomienia zadania kalendarzaKradzież hashy NTLM użytkowników domenowych bez żadnej interakcji ofiary (Zero-Click)
33Citrix NetScalerInfra & Chmura2023 / Citrix Bleed (CVE-2023-4966)Przepełnienie bufora pamięci w obsłudze OpenID Connect ujawniające tokeny sesyjne w nagłówkachOminięcie 2FA i przejęcie aktywnych sesji korporacyjnych na bramach dostępowych VPN
34Ivanti Connect SecureInfra & Chmura2024 / CVE-2024-21887Ominięcie uwierzytelniania na panelu webowym połączone z OS Command InjectionPełny root shell na zaporach brzegowych i natychmiastowe wejście do sieci wewnętrznych
35Fortinet FortiOSInfra & Chmura2023 / CVE-2023-27997Przepełnienie sterty (Heap Overflow) w obsłudze portalu SSL VPNZdalne wykonanie kodu na firewallu bez wcześniejszego uwierzytelnienia
36Plex Media ServerInfra & Chmura2022 / CVE-2020-5741Niezabezpieczona deserializacja obiektów w module ładowania wtyczek PythonaRCE na serwerze domowym; kluczowy wektor wejścia do ataku na sieć administratora LastPass
37Apache GuacamoleInfra & Chmura2020 / FreeRDP FlawsLuki przepełnienia bufora w bibliotece obsługi protokołu RDPPrzejęcie bramy dostępowej przez złośliwy serwer RDP do którego łączył się użytkownik
38F5 BIG-IPInfra & Chmura2022 / CVE-2022-1388Błąd parsera nagłówków HTTP w interfejsie iControl REST (brak weryfikacji tożsamości)Zdalne wykonanie poleceń w systemie Linux jako root bez podawania poświadczeń
39SolarWinds OrionInfra & Chmura2020 / SUNBURSTWstrzyknięcie kodu trojana do oficjalnego instalatora podczas procesu budowania (MSBuild)Infekcja 18 000 organizacji, w tym Departamentu Bezpieczeństwa Krajowego USA i Microsoftu
40MOVEit TransferInfra & Chmura2023 / CVE-2023-34362Krytyczna luka SQL Injection w interfejsie webowym aplikacji bezpiecznego transferu plikówMasowa eksfiltracja poufnych baz danych setek korporacji, banków i agencji rządowych
41XZ Utils (liblzma)Łańcuch dostaw2024 / CVE-2024-3094Wieloletni atak socjotechniczny; ukrycie backdoora w testowych archiwach M4/tarPróba modyfikacji weryfikacji klucza RSA w sshd w celu zdobycia uniwersalnego dostępu roota
42Apache Log4jŁańcuch dostaw2021 / Log4Shell (CVE-2021-44228)Niezabezpieczona ewaluacja JNDI Lookup w formaterze logów komunikatów bibliotekiMasowe RCE na milionach serwerów po zalogowaniu ciągu tekstowego ${jndi:ldap://...}
43Polyfill.ioŁańcuch dostaw2024 / Przejęcie domenySprzedaż domeny popularnej biblioteki JavaScript podmiotowi trzeciemu i podmiana skryptu CDNWstrzyknięcie złośliwego kodu przekierowującego użytkowników na ponad 100 000 stron internetowych
44CrowdStrike FalconŁańcuch dostaw2024 / Channel File 291Brak walidacji wejścia pliku definicji reguł i brak wdrożenia kanarkowego w sterowniku jądraBłąd odczytu pamięci poza zakresem i natychmiastowy BSOD na 8.5 mln maszyn Windows
45Colors.js & Faker.jsŁańcuch dostaw2022 / Sabotaż twórcyWprowadzenie nieskończonej pętli przez oryginalnego maintainera w proteście przeciw korporacjomParaliż potoków CI/CD i aplikacji w tysiącach projektów bazujących na ekosystemie Node.js
46PyTorch (torchtriton)Łańcuch dostaw2022 / Dependency ConfusionZarejestrowanie w publicznym indeksie PyPI paczki o nazwie tożsamej z wewnętrznym modułem nocnymPobranie i uruchomienie złośliwego binarium wykradającego klucze SSH ze stacji badaczy uczenia maszynowego
47Node-ipcŁańcuch dostaw2022 / ProtestwareWprowadzenie kodu skanującego geolokalizację IP i nadpisującego pliki użytkowników z RosjiKryzys zaufania do pakietów npm i konieczność audytowania bezpośrednich zależności
48Event-StreamŁańcuch dostaw2018/współczesne echoPrzekazanie opieki nad porzuconym pakietem napastnikowi, który dodał zależność flatmap-streamDedykowany atak na kradzież portfeli Bitcoin w aplikacji Copay; klasyk ataku na łańcuch dostaw
49Ledger Connect KitŁańcuch dostaw2023 / Kompromitacja npmKradzież konta byłego programisty przez phishing i wypuszczenie zatrutej wersji bibliotekiPodmiana adresów transakcji w setkach dApps i kradzież ponad 600 000 USD z portfeli krypto
50ua-parser-jsŁańcuch dostaw2021 / Przejęcie konta deweloperaSkompromitowanie poświadczeń do pakietu notującego 8 mln pobrań tygodniowoAutomatyczne pobieranie koparki kryptowalut i trojana kradnącego hasła przy instalacji
Spojrzenie pod maskę

To nie był ekspres do kawy. To był podatny serwer Linux.

Dlaczego napastnik nie przejmuje się tym, do czego urządzenie służy w kuchni

1. Wbudowany stos sieciowy
Urządzenie posiadało miniaturowy procesor z jądrem Linuksa, pełny stos TCP/IP, działający serwer HTTP oraz lokalny demon serwisowy otwarty na portach 80 i 8080.
2. Grzechy kodu i architektury
Brak autoryzacji na wewnętrznym REST API, twardo zakodowane poświadczenia serwisowe (hardcoded credentials) oraz brak bezpiecznego mechanizmu podpisywanych aktualizacji OTA.
3. Monetyzacja ataku
Ekspres generował ruch w wolumetrycznych atakach DDoS, pośredniczył w nielegalnym tunelowaniu proxy oraz brał udział w masowym skanowaniu kolejnych podsieci.
Wniosek techniczny: Dla atakującego nie ma znaczenia etykieta marketingowa („Smart Coffee Maker”, „Baza SQL banku”, „Mikroserwis zamówień”). Każdy proces posiadający interfejs sieciowy i podatny kod to po prostu darmowy procesor, pamięć RAM i łącze 100 Mb/s.
Architektura systemów

Iluzja twierdzy: Dlaczego firewall nie uratuje aplikacji?

Tradycyjne bezpieczeństwo obwodowe (Perimeter Security) w zderzeniu z nowoczesną siecią

Model historyczny: Zamek i Fosa

• Założenie: Sieć wewnętrzna (LAN) jest bezpieczna, zewnętrzna (WAN) jest wroga.

• Na brzegu sieci stoi Firewall (zapora sieciowa L3/L4).

• Wystarczy zablokować nieużywane porty, a serwery wewnątrz mogą sobie bezgranicznie ufać.

Model całkowicie martwy we współczesnych architekturach.

Współczesna rzeczywistość aplikacji

• Porty 80 (HTTP) i 443 (HTTPS) muszą być z definicji otwarte na cały świat.

• Aplikacje to rozproszona siatka mikroserwisów, chmur publicznych, API i workerów.

• Ruch szyfrowany TLS: firewall brzegowy widzi jedynie strumień bajtów, nie rozumiejąc złośliwego ładunku w JSON.

Złota reguła bezpieczeństwa systemów:
Zapora sieciowa chroni porty. Bezpieczeństwo aplikacji chroni logikę i dane. Atakujący wchodzi legalnie przez port 443 i rozmawia z Twoim API w sposób zgodny ze specyfikacją protokołu!
Wektory ataków i krajobraz 2026/2027

Dlaczego celem numer 1 jest warstwa aplikacji (L7)?

Nikt nie łamie AES-256 brute-forcem. Atakuje się błędy w logice, łańcuch dostaw i kod generowany przez AI.

1. Skład kodu
W typowej aplikacji zaledwie 10–20% kodu to kod autorski. Pozostałe 80–90% to zewnętrzne pakiety (npm, PyPI, Maven, Docker).
2. Logika biznesowa
WAF potrafi zablokować proste SQLi, ale nie wie, że użytkownik ID=15 nie powinien pobierać faktury użytkownika ID=16 (IDOR / BOLA).
3. Kod z asystentów AI
AI Package Hallucination / Slopsquatting — atakujący rejestrują w npm wymyślone przez LLM pakiety. Bezkrytyczne wklejanie podatnego kodu AI.
4. Presja Time to Market
Funkcjonalności biznesowe mają priorytet. Testy bezpieczeństwa tradycyjnie spychane na koniec sprintu — albo pomijane aż do incydentu.
„Aplikacja jest jedynym elementem infrastruktury, do którego z premedytacją zapraszasz cały świat i pozwalasz mu wykonywać kod w Twoim środowisku.”
Słowniczek pojęć: Najważniejsze skróty bezpieczeństwa aplikacji
Skrót Pełna nazwa angielska Znaczenie techniczne w architekturze i audycie
L7 Layer 7 (Application Layer) Siódma warstwa modelu OSI (HTTP, WebSocket, gRPC). Tu przetwarzana jest logika biznesowa, autoryzacja i parsowanie danych użytkownika.
WAF Web Application Firewall Zapora aplikacyjna badająca ruch HTTP w poszukiwaniu znanych sygnatur ataków. Blokuje popularne exploity, ale nie weryfikuje praw dostępu w relacjach obiektowych.
IDOR Insecure Direct Object Reference Błąd autoryzacji horyzontalnej: aplikacja przyjmuje identyfikator z zewnątrz (np. ?id=123) i zwraca dane bez sprawdzenia, czy zalogowany użytkownik jest ich właścicielem.
BOLA Broken Object Level Auth. Nowoczesne określenie błędu IDOR w świecie interfejsów REST API (kategoria nr 1 w oficjalnym rankingu OWASP API Security Top 10).
ORM Object-Relational Mapping Warstwa abstrakcji nad bazą danych (np. SQLAlchemy, Hibernate, Prisma). Chroni przed klasycznym SQLi poprzez automatyczne zapytania parametryzowane.
CVE Common Vulnerabilities & Exposures Globalny słownik powszechnie znanych luk bezpieczeństwa. Każda zidentyfikowana luka otrzymuje unikalny identyfikator (np. CVE-2024-3094).
SBOM Software Bill of Materials Maszynowo czytelna lista (np. w formacie CycloneDX lub SPDX) wszystkich bibliotek, zależności tranzytywnych i modułów składających się na aplikację.
ReDoS Regular Expression Denial of Service Odmowa usługi spowodowana podatnym wyrażeniem regularnym, którego ewaluacja dla spreparowanego tekstu wymaga wykładniczej liczby operacji (backtracking).
Standardy branżowe

OWASP Top 10 (2025): Ewolucja zagrożeń

Kliknij w dowolny wiersz tabeli, aby zjechać do szczegółowej analizy technicznej podatności

KOD Kategoria OWASP 2025 Esencja problemu technicznego Szczegóły
A01 Broken Access Control Błędy kontroli dostępu (IDOR, BOLA), nieuprawniony dostęp do zasobów i endpointów, w tym SSRF. Rozwiń ↓
A02 Security Misconfiguration Domyślne hasła, publiczne buckety S3, zbędne otwarte porty, brak bezpiecznych nagłówków HTTP. Rozwiń ↓
A03 Software Supply Chain Failures Podatne, przestarzałe lub zainfekowane pakiety open-source w package.json / requirements.txt. Rozwiń ↓
A04 Cryptographic Failures Nieszyfrowane dane w bazie, brak TLS, przestarzałe algorytmy hashowania haseł (MD5, SHA-1 bez soli). Rozwiń ↓
A05 Injection Wstrzyknięcia SQL, NoSQL, OS Command, XSS. Spadek pozycji dzięki ORM-om i silnikom UI z escapowaniem. Rozwiń ↓
A06 Insecure Design & Pozostałe Błędy w architekturze, słabe uwierzytelnianie (A07), brak spójności (A08), logi (A09), błędy (A10). Rozwiń ↓
Ważna obserwacja: Dlaczego A05 Injection spadło, a A01 Broken Access Control dominuje? ORM-y automatycznie parametryzują zapytania SQL, ale żaden ORM nie wie sam z siebie, czy użytkownik ma prawo do edycji danego wiersza.

Uwaga metodyczna: Pełna lista OWASP Top 10:2025 liczy 10 kategorii. Kategorie A06–A10 są w całości rozpisane i omówione w sekcji szczegółowej poniżej (przewiń w dół lub kliknij wiersz tabeli).
Szczegółowa anatomia techniczna podatności OWASP Top 10
A01 Broken Access Control & SSRF
Mechanizm ataku: Zalogowany klient 104 wysyła żądanie GET /api/faktury/105. Aplikacja pobiera fakturę bez walidacji relacji do sesji (IDOR/BOLA). Atak SSRF wymusza na serwerze odpytanie instancji metadanych chmury http://169.254.169.254/latest/meta-data/ i wyciek tokenów IAM.
Obrona: Wymuszenie autoryzacji na poziomie bazy: WHERE id = :id AND user_id = :user_id (scenariusz ten rozwiązujemy praktycznie w Zadaniu 8 projektu KrasnalShop) oraz blokowanie ruchu wychodzącego do sieci prywatnych.
A02 Security Misconfiguration
Mechanizm ataku: Domyślne hasła administratora, publiczne buckety S3, brak nagłówków bezpieczeństwa (HSTS, CSP), włączony tryb DEBUG na środowisku produkcyjnym ujawniający hasła w zmiennych środowiskowych.
Obrona: Automatyczny hardening kontenerów, skanery IaC (Checkov, Trivy) oraz domyślne wyłączanie nieużywanych portów.
A03 Software Supply Chain Failures
Mechanizm ataku: Wstrzyknięcie złośliwego kodu do publicznego pakietu open-source (Typosquatting, przejęcie konta dewelopera npm, Dependency Confusion). Kod złośliwy wykonuje się podczas instalacji lub w runtime aplikacji.
Obrona: Pliki lock z sumami kontrolnymi (package-lock.json), automatyczne skanery SCA (pip-audit, Trivy, npm audit), podpisywanie kontenerów (Cosign).
A04 Cryptographic Failures
Problem: Szybkie hashowanie haseł w MD5 lub SHA-256 bez soli (łamane tablicami tęczowymi w sekundy), brak TLS 1.3.
Obrona: Wolne algorytmy pamięciożerne z unikalną solą: Argon2id (standard branżowy) lub bcrypt.
A05 Injection (Wstrzyknięcia)
Problem: Konkatenacja zapytań SQL ze stringami użytkownika lub brak kodowania HTML wyjścia (XSS).
Obrona: Prepared Statements w ORM oraz silna polityka Content-Security-Policy.
A06-A10 Insecure Design, Auth, Integrity, Logging, Exceptions
Błędy koncepcyjne (A06), słabe uwierzytelnianie podatne na brute-force (A07), niebezpieczna deserializacja obiektów np. pickle.loads() w Pythonie (A08), brak logów zdarzeń uniemożliwiający reakcję na włamanie (A09) oraz ujawnianie ścieżek serwera w StackTrace (A10).
Projektowanie systemów

Modelowanie zagrożeń: Metodyka STRIDE

Jak psuć aplikację na tablicy, zanim napiszemy pierwszą linijkę kodu

S Spoofing (Podszywanie się)
Czy napastnik może podać się za innego użytkownika lub mikroserwis? Obrona: silne uwierzytelnianie, mTLS, tokeny z podpisem.
T Tampering (Manipulacja)
Czy przesyłane parametry lub dane w bazie mogą zostać zmodyfikowane w locie? Obrona: podpisy HMAC, integralność, TLS.
R Repudiation (Wypieralność)
Czy użytkownik może wyprzeć się wykonania operacji finansowej? Obrona: audytowalne logi operacji, niezmienne zdarzenia.
I Information Disclosure
Czy wrażliwe dane wyciekają w odpowiedziach API lub logach? Obrona: szyfrowanie at-rest, minimalizacja danych, maskowanie.
D Denial of Service
Czy aplikację można zablokować wyczerpaniem procesora lub bazy? Obrona: Rate Limiting, timeouty, kolejki asynchroniczne.
E Elevation of Privilege
Czy zwykły użytkownik może nadać sobie uprawnienia administratora? Obrona: weryfikacja ról (RBAC/ABAC) po stronie serwera.
STRIDE w praktyce: Scenariusze ataków i metody obrony
S Spoofing — Podszywanie się pod tożsamość
Scenariusz: Wstrzyknięcie fałszywego nagłówka X-Forwarded-For: 127.0.0.1 lub przesłanie tokenu JWT ze zmienionym nagłówkiem "alg": "none".
Mitigacja: Weryfikacja podpisu asymetrycznym kluczem publicznym (RS256 / EdDSA) oraz wzajemne uwierzytelnianie mTLS pomiędzy usługami.
T Tampering — Manipulacja parametrami zamówienia
Scenariusz: Formularz zamówienia przekazuje ukryte pole <input type="hidden" name="cena" value="999.00">. Atakujący zmienia wartość na 0.01 w konsoli DevTools.
Mitigacja: Cena pobierana wyłącznie z zaufanej bazy serwera na podstawie ID produktu. Żadnych krytycznych danych biznesowych w ukrytych polach HTML!
R Repudiation — Wypieralność działań
Scenariusz: Użytkownik zleca przelew środków, po czym twierdzi, że tego nie zamawiał, a logi serwera nie zapisują identyfikatora sesji ani sumy kontrolnej transakcji.
Mitigacja: Niezmienne logi audytowe (WORM — Write Once, Read Many) przesyłane strumieniowo do zewnętrznego systemu SIEM.
D & E Denial of Service oraz Elevation of Privilege
DoŚ: Endpoint /api/produkty?limit=1000000 powoduje wyczerpanie pamięci RAM serwera Node.js i zawieszenie aplikacji.
Elevation: Przesłanie w JSON pola {"role": "admin"} podczas rejestracji klienta (podatność Mass Assignment).
Mitigacja: Sztywne limity paginacji (max 50 rekordów) oraz restrykcyjne DTO/szablony wejścia odrzucające nieautoryzowane pola.
Automatyzacja w DevSecOps

Triada automatyzacji testów bezpieczeństwa

Ręczny audyt raz w roku to za mało. Jak automatyzować weryfikację w potoku CI/CD?

SAST
Static Application Security Testing

• Badanie kodu źródłowego bez jego uruchamiania (White-Box).

• Analizuje drzewo składniowe AST, wykrywa brak sanityzacji, niebezpieczne funkcje systemowe.

Narzędzia: Semgrep, SonarQube, Bandit

DAST
Dynamic Application Security Testing

• Badanie działającej aplikacji z zewnątrz (Black-Box).

• Wysyła sfuzzowane żądania HTTP, sprawdza reakcję na wstrzyknięcia i konfigurację nagłówków.

Narzędzia: OWASP ZAP, Burp Suite, Nuclei

SCA
Software Composition Analysis

• Analiza drzewa zależności i kontenerów (SBOM).

• Porównuje wersje bibliotek z publicznymi bazami znanych podatności (CVE/NVD).

Narzędzia: Trivy, pip-audit, npm audit, Snyk

Złota zasada: Żadne z tych narzędzi nie działa w próżni. Prawdziwe bezpieczeństwo w CI/CD to synergia: SAST (mój kod) + SCA (cudzy kod) + DAST (uruchomiony stos).
Zestawienie porównawcze: Podejścia testowe w praktyce
Kryterium techniczne SAST (Kod źródłowy) DAST (Uruchomiony serwer) SCA (Zależności open-source)
Perspektywa testu White-Box (pełen dostęp do repozytorium) Black-Box (brak wglądu w kod, tylko HTTP) Manifest / SBOM (graf zależności)
Czy wymaga uruchomienia? Nie (skanuje pliki tekstowe) Tak (musi działać środowisko i baza danych) Nie (analizuje pliki lock i obrazy Docker)
Pozycja w pipeline CI/CD Pre-commit hook, etap Pull Request Środowisko Staging / Test przed wydaniem Etap Build / tworzenie obrazu kontenera
Czas wykonania skanu Szybki (kilka do kilkudziesięciu sekund) Wolny (od kilkunastu minut do kilku godzin) Ekspresowy (od ułamka sekundy do kilku s)
Fałszywe alarmy (False Positives) Średni / Wysoki (wymaga strojenia reguł) Bardzo niski (weryfikuje realną odpowiedź HTTP) Niski (bazuje na skatalogowanych numerach CVE)
Warsztat techniczny

Narzędzia w akcji: Terminal DevSecOps

Komendy i konfiguracje, które włączymy do testów laboratoryjnych oraz pipeline'u CI/CD

bash — semgrep scan (SAST)
# Uruchomienie skanowania regułami OWASP Top 10 $ semgrep scan --config "p/owasp-top-ten" --error ./src ┌────────────────┐ │ 1 Code Finding │ └────────────────┘ src/auth.py ❯❯❱ python.sqlalchemy.security.audit.direct-sql-execution Found raw SQL string formatting in repository query. Use parameterized queries or ORM filter instead. 72┆ query = f"SELECT * FROM users WHERE login = '{user_input}'" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
bash — trivy image (SCA)
# Skanowanie obrazu kontenera produkcyjnego $ trivy image --severity HIGH,CRITICAL --no-progress krasnalshop:latest krasnalshop:latest (debian 12.2) ================================ Total: 2 (HIGH: 1, CRITICAL: 1) ┌────────────┬────────────────┬──────────┬──────────────┬───────────────┐ │ LIBRARY │ VULNERABILITY │ SEVERITY │ INSTALLED │ FIXED VERSION │ ├────────────┼────────────────┼──────────┼──────────────┼───────────────┤ │ libssl3 │ CVE-2024-2511 │ CRITICAL │ 3.0.11-1 │ 3.0.13-1 │ │ curl │ CVE-2024-2398 │ HIGH │ 7.88.1-10 │ 7.88.1-10+deb │ └────────────┴────────────────┴──────────┴──────────────┴───────────────┘
Zaawansowana automatyzacja: Własne reguły SAST oraz potok GitHub Actions
.semgrep/no-hardcoded-secrets.yml (Własna reguła)
rules: - id: forbid-hardcoded-jwt-secret languages: [python] message: "Wykryto twardo zakodowany klucz JWT! Pobierz go ze zmiennej środowiskowej." severity: ERROR patterns: - pattern: jwt.encode(..., key="$KEY", ...) - pattern-not: jwt.encode(..., key=os.environ[...], ...)
.github/workflows/security.yml (Quality Gate)
name: Security Quality Gate on: [pull_request] jobs: audit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Uruchom Semgrep SAST run: semgrep ci --config auto --error - name: Weryfikacja zależności SCA run: pip-audit -r requirements.txt
Kultura DevSecOps

Podejście Shift-Left: Ekonomia bezpieczeństwa

Dlaczego usunięcie luki w fazie pisania kodu jest 100 razy tańsze niż po wdrożeniu na produkcję

1x Koszt
Etap: Projekt / Kod w IDE

Linter lub wtyczka SAST w edytorze podświetla błąd. Programista poprawia go w 2 minuty przed wykonaniem commita.

Koszt: ~2 minuty pracy
5x Koszt
Etap: CI / Pull Request

Zautomatyzowany test blokuje merge. Wymaga ponownego uruchomienia pipeline'u, poprawki i powiadomienia zespołu.

Koszt: ~1–2 godziny
15x Koszt
Etap: QA / Staging

Podatność wykryta w testach integracyjnych. Zgłoszenie ticketu w Jira, cofnięcie wydania wersji, ponowna regresja.

Koszt: ~1–2 dni zespołu
100x+ Koszt
Etap: Produkcja

Incydent publiczny, wyciek bazy danych, zgłoszenie do UODO (kary RODO do 20M EUR), utrata reputacji, przestój.

Koszt: Miliony PLN + prawnicy
Faza wytwarzania (SDLC) Narzędzie weryfikacji Konsekwencje techniczne i biznesowe
Design & Coding Modelowanie STRIDE, linery SAST w VS Code / JetBrains Podatność eliminowana na tablicy projektowej lub przy pisaniu funkcji.
Pull Request (CI) Semgrep CI, pip-audit, Trivy (Quality Gate) Blokada wdrożenia z poziomu gita — kod podatny nie opuszcza repozytorium.
Produkcja (Runtime) WAF, SIEM, bug bounty, audyty zewnętrzne Późne wykrycie oznacza konieczność natychmiastowych hotfixów, audytu powłamaniowego i powiadomienia organów nadzorczych.
Zasada Shift-Left: Przesunięcie odpowiedzialności i testów bezpieczeństwa maksymalnie na lewą stronę osi czasu projektu — tam, gdzie błąd jest jeszcze tani i bezbolesny do usunięcia.
Dobre praktyki architektoniczne

Cztery filary Secure by Design

Zasady, które każdy projektant oprogramowania powinien traktować jak instynkt

1. Zasada najmniejszych uprawnień (Least Privilege)

Żaden proces, usługa ani użytkownik nie może posiadać większych praw niż absolutnie konieczne do wykonania zadania.

Dobre praktyki implementacji:

• Dyrektywa USER appuser w pliku Dockerfile (kontenery nigdy nie uruchamiają się jako root).

• Dedykowane konto bazy danych bez uprawnień DROP TABLE czy ALTER TABLE.

2. Obrona w głąb (Defense in Depth)

Bezpieczeństwo systemu nigdy nie może opierać się na pojedynczej linii obrony.

Dobre praktyki implementacji:

• Walidacja na frontendzie to wygoda dla usera (UX), nie bezpieczeństwo.

• Pełna walidacja w API + zapytania parametryzowane + uprawnienia na poziomie wiersza w bazie danych.

3. Nigdy nie ufaj danym wejściowym (Zero Trust Input)

Każdy bajt pochodzący z zewnątrz jest traktowany jako potencjalnie złośliwy ładunek.

Dobre praktyki implementacji:

• Brak zaufania do nagłówków Origin, Referer czy ciasteczek.

• Twarde schematy walidacji wejścia (Pydantic w Pythonie, Zod w TypeScript) odrzucające niespodziewane pola.

4. Bezpieczne ustawienia domyślne (Secure Defaults)

Aplikacja w stanie domyślnym musi być bezpieczna bez konieczności dodatkowej konfiguracji.

Dobre praktyki implementacji:

• Domyślna odmowa dostępu (Deny by Default) w regułach autoryzacji.

• Ciasteczka z flagami HttpOnly; Secure; SameSite=Strict włączonymi natywnie w frameworku.

Podsumowanie architektoniczne: Dobre oprogramowanie nie polega na łataniu dziur po testach penetracyjnych. Dobre oprogramowanie jest projektowane w sposób uniemożliwiający wystąpienie całej klasy podatności.
Kolejne kroki na studiach magisterskich

Od teorii do praktyki: Poligon KrasnalShop

Przechodzimy do środowiska warsztatowego i praktycznych zadań zaliczeniowych

Co przygotowaliśmy na laboratoria:

• KrasnalShop: Dedykowana platforma e-commerce z celowo zaszytymi lukami logicznymi i technicznymi.

• Środowisko uruchamiane w Docker Compose — bezpieczna piaskownica do testowania ataków i obrony.

• 20 zadań problemowych obejmujących pełen cykl: od audytu logów serwera, przez analizę IDOR i SQLi, po tworzenie reguł SAST i łatanie kodu.

Twoja rola na studiach magisterskich:

• Architekt i audytor: Nie tylko znajdujesz lukę, ale projektujesz architekturę odporną na całą klasę podobnych błędów.

• Automatyzacja: Budujesz automatyczne skanery weryfikujące kod przy każdym commicie (DevSecOps Quality Gate).

• Myślenie ofensywne i defensywne: Rozumiesz motywację atakującego, aby skutecznie zabezpieczyć zasoby biznesowe.

Materiały dydaktyczne i poligon laboratoryjny:

Repozytorium Git (Kody & Zadania): https://dev.zarnecki.org/Merito/bezpieczenstwo_aplikacji.git
Chmura Nextcloud (Pliki & Raporty): https://chmura.zarnecki.org/s/iLdT3J5YGTTYCPr ↗

Przegląd slajdów wykładu