Zakres

Co yof obejmuje, a czego nie

Klasa po klasie: czego yof szuka w Twoim kodzie, co na działającej aplikacji sprawdzają „Zautomatyzowane testy” i czego nie robi żadne z nich.

Jak czytać tabelę

  • W kodzie: wzorce, których reguły szukają w plikach połączonego repozytorium. Reguła znajduje wzorzec i nie uruchamia kodu, więc większość tych znalezisk wymaga potwierdzenia.
  • Na żywo: testy na działającej aplikacji. „Zautomatyzowane testy” są w przygotowaniu i nie są w sprzedaży, więc nic tak oznaczonego nie jest jeszcze dostępne dla klientów.
  • Nieobjęte: to, czego nie robi żadne z nich. Raport nigdy nie brzmi tak, jakby to sprawdzono.
KlasaW kodzieNa żywoNieobjęte
SQL injection
  • Tekst SQL jest składany z danych z żądania
  • Tekst wysłany do aplikacji jest uruchamiany jako część zapytania do bazy W przygotowaniu
Dane, które przechodzą przez inną funkcję lub plik, wstrzyknięcie zapisane (drugiego rzędu) i błędy wewnątrz ORM.
NoSQL injection
  • Filtr bazy danych bierze wartość prosto z żądania
  • Tekst wysłany do aplikacji jest uruchamiany jako część zapytania do bazy W przygotowaniu
Języki zapytań innych baz dokumentowych oraz języki inne niż JavaScript i TypeScript.
Wstrzyknięcie poleceń
  • Polecenie powłoki jest składane z danych z żądania
  • Tekst wysłany do aplikacji jest uruchamiany jako polecenie systemowe W przygotowaniu
Argumenty wstrzyknięte do programu wywołanego bez powłoki oraz inne języki.
Wstrzyknięcie do szablonu
  • Dane z żądania są używane jako szablon
  • Tekst wysłany do aplikacji jest uruchamiany przez jej silnik szablonów W przygotowaniu
Szablony czytane z bazy danych i silniki szablonów działające w przeglądarce.
Wykonanie kodu z danych
  • Dane z żądania są wykonywane jako kod
Bez testu na żywoWykonanie przez obiekt piaskownicy oraz inne języki.
Cross-site scripting
  • Dane z żądania są wpisywane na stronę jako HTML
  • Tekst wysłany do aplikacji wraca jako żywy kod strony W przygotowaniu
Obejścia zaufania w Angular i Vue, ustawienia autoescape szablonów serwera, skrypty zapisane i dowód w prawdziwej przeglądarce.
Otwarte przekierowanie
  • Przekierowanie prowadzi tam, gdzie wskaże żądanie
  • Twoja strona przekierowuje odwiedzających na dowolny adres z linku Dostępne dziś w yof attack
Listy dozwolonych adresów, które istnieją i dają się obejść.
Server-side request forgery
  • Serwer pobiera adres wzięty z żądania
  • Twój serwer pobiera dowolny adres podany w żądaniu W przygotowaniu
DNS rebinding, przekierowania prowadzące do wewnątrz i to, czy da się sięgnąć do metadanych chmury.
Cross-site request forgery
  • Logowanie przez cookie bez sprawdzenia CSRF w kodzie
  • Cookie logowania jest ustawiane bez httpOnly lub sameSite
  • Ciasteczku logowania brakuje flagi ochronnej Dostępne dziś w yof attack
  • Inna strona może sprawić, że zalogowany użytkownik zmieni swoje dane W przygotowaniu
Frameworki inne niż aplikacje w stylu Express, kontrola wykonywana przez proxy i to, czy trasę chronią domyślne ustawienia przeglądarki.
Niebezpieczne wczytywanie obiektów
  • Dane z żądania są wczytywane jako obiekt
  • Aplikacja przekazuje treść żądania niebezpiecznemu czytnikowi obiektów W przygotowaniu
Java ObjectInputStream, .NET BinaryFormatter i zewnętrzne encje XML.
Słaba kryptografia
  • Hasło lub token jest hashowany szybkim albo złamanym algorytmem
  • Token lub kod powstaje z przewidywalnej funkcji losowej
  • Klucz kryptograficzny jest zapisany w kodzie
  • Szyfrowanie używa trybu ECB
  • Sprawdzanie certyfikatów jest wyłączone
  • Token logowania jest przyjmowany bez sprawdzenia podpisu
  • Aplikacja przyjmuje token logowania, którego nie sprawdziła W przygotowaniu
  • Identyfikatory lub tokeny logowania łatwo zgadnąć W przygotowaniu
Długości kluczy, wersje protokołów i certyfikaty działającej usługi, własna kryptografia i kanały boczne.
Hasła w kodzie i konfiguracji
  • Hasło jest zapisane w Twoim kodzie lub konfiguracji
  • Domyślna nazwa użytkownika i hasło są zapisane w kodzie
  • Adres w Twoim kodzie zawiera hasło
Bez testu na żywoHistoria git plików, których już nie ma, to, czy znalezione hasło nadal działa, i jedno zwykłe słowo bez cyfry i symbolu.
Przesyłanie plików
  • Przesłany plik zachowuje nazwę lub typ podany przez odwiedzającego
  • Folder z przesłanymi plikami jest serwowany jako strony WWW
  • Przesłany plik jest podawany jako strona uruchamiana przez przeglądarkę W przygotowaniu
To, co z plikiem robi usługa przechowywania lub CDN, złośliwe oprogramowanie w pliku i limity rozmiaru.
Dockerfile
  • Sekret jest zapisany w Twoim Dockerfile
  • Twój Dockerfile uruchamia pobrany plik bez sprawdzenia
  • Twój obraz bazowy jest po końcu wsparcia
  • Twój kontener uruchamia aplikację jako root
  • Obraz bazowy Twojego kontenera nie ma stałej wersji
  • Twój obraz kontenera zawiera serwer SSH
  • Twój obraz bazowy jest ustalony tagiem, a nie digestem
  • Twój Dockerfile instaluje pakiety bez stałych wersji
Bez testu na żywoZbudowane obrazy i pakiety systemu w ich wnętrzu nie są skanowane. Koniec wsparcia jest znany tylko dla sześciu oficjalnych obrazów bazowych.
docker-compose
  • Usługa compose działa z uprawnieniami hosta
  • Usługa compose może sterować samym Dockerem
  • Sekret jest zapisany w Twoim pliku compose
Bez testu na żywoDziałające kontenery i pliki env, których nie ma w repozytorium.
Manifesty Kubernetes
  • Kontener Kubernetes działa w trybie uprzywilejowanym
  • Obciążenie Kubernetes sięga do swojego węzła
  • Sekret jest zapisany w manifeście Kubernetes
  • Kontener Kubernetes może działać jako root
  • Kontener Kubernetes może zdobyć większe uprawnienia
  • Kontener Kubernetes nie ma limitów zasobów
  • Obraz Kubernetes nie ma stałej wersji
Bez testu na żywoDziałający klaster, niewyrenderowane szablony Helm, RBAC, polityki sieciowe i admission oraz pliki z kotwicami YAML.
Terraform
  • Reguła zapory otwiera port administracyjny na cały internet
  • Zasobnik pamięci masowej jest w Terraform publiczny
  • Pamięć masowa lub baza danych powstaje bez szyfrowania
  • Baza danych jest w Terraform dostępna z internetu
  • Hasło lub klucz jest zapisany w Twoich plikach Terraform
Bez testu na żywoSamo konto w chmurze: to, co wdrożono, może różnić się od plików. Wartości ze zmiennych, modułów lub funkcji, inni dostawcy i inne typy zasobów.

Poza każdym wierszem

  • Zbudowane obrazy kontenerów i pakiety systemowe w ich wnętrzu nie są skanowane.
  • Te reguły czytają pliki. Nie sprawdzają działającego systemu: klastra, konta w chmurze ani zachowania działającej aplikacji.
  • Dane z żądania są śledzone tylko w obrębie jednej funkcji lub handlera. Wartość, która najpierw przechodzi przez inną funkcję lub plik, nie jest śledzona.
  • Języki: reguły składniowe czytają JavaScript i TypeScript. Python ma proste, dokładne formy. PHP, Ruby, Go, Java, Kotlin i C# mają kilka form jednowierszowych. Innych języków te reguły nie czytają.

Nigdy nie obejmują tego automatyczne sprawdzenia

  • Błędy w logice biznesowej, na przykład cena lub krok, który ktoś może pominąć.
  • Słabości, o których nikt jeszcze nie wie (zero-day).
  • Ludzie i procesy: phishing, hasła przekazywane ręcznie, kto ma dostęp.
  • Wszystko poza zakresem wskazanym w tym raporcie i każda zmiana po jego dacie.

To nie jest test penetracyjny.

Jak yof sprawdza

Co yof obejmuje, a czego nie: klasa po klasie