Przejdź do głównej zawartości

Insecure Design: Opis podatności i jej wpływ

Czym jest Insecure Design?​

Insecure Design odnosi się do błędów projektowych, które prowadzą do podatności już na etapie architektury systemu, a nie tylko implementacji. Nawet dobrze zaimplementowany kod może być podatny, jeśli sama logika biznesowa, kontrola dostępu lub przepływ danych są źle zaprojektowane.


Przykłady błędów projektowych​

  • Brak uwzględnienia ról i uprawnień w projektowaniu funkcji.
  • Zbyt ogólne API bez walidacji dostępu do konkretnych danych.
  • Możliwość przewidzenia struktury ID i manipulacji (np. GET /invoice/1001 ➜ GET /invoice/1002).
  • Brak mechanizmów rate limiting i throttle dla krytycznych operacji (np. reset hasła).
  • Przesadne poleganie na danych z klienta bez dodatkowej weryfikacji.

Przykład: brak walidacji właściciela zasobu​

GET /orders/874
Authorization: Bearer userA-token

➡️ Aplikacja zwraca dane zamówienia bez sprawdzenia, czy userA rzeczywiście jest właścicielem orderId=874.


Różnica między Insecure Design a Broken Access Control​

CechaInsecure DesignBroken Access Control
Etapprojekt systemuimplementacja / konfiguracja
Typ błędubrak zabezpieczeń w ogóleniewłaściwa realizacja istniejących reguł
Przykładbrak zaplanowanej kontroli właściciela danychźle zaimplementowana kontrola ról

Skutki podatności​

  • Ujawnienie lub zmiana danych innych użytkowników.
  • Zmiana stanu systemu niezgodnie z logiką biznesową.
  • Przejście przez proces w nieautoryzowany sposób (np. zakup bez płatności).
  • Trwała luka w architekturze – często wymaga refaktoryzacji, nie tylko patcha.

Podsumowanie​

Podatności typu Insecure Design są trudniejsze do wykrycia automatycznie – wymagają analizy architektury, logiki i wymagań bezpieczeństwa już na etapie projektowania. W kolejnym kroku przejdziemy do metod ich testowania.


W następnym punkcie: Metody testowania podatności Insecure Design