Software Supply Chain Failures: Metody testowania
Metody testowania podatności: Software Supply Chain Failures
Punkty 1–5 sprawdzają znane podatności w komponentach (zakres dawnego A06:2021). Punkty 6–9 dotyczą reszty łańcucha dostaw, dodanej w edycji 2025.
1. 📦 Analiza plików zależności
- Przeskanuj:
package.json,yarn.lock(JavaScript)pom.xml,build.gradle(Java)requirements.txt,Pipfile.lock(Python)composer.json,composer.lock(PHP)packages.config,.csproj(C#/.NET)
- Sprawdź wersje bibliotek i frameworków – ręcznie lub automatycznie.
2. Wykorzystanie narzędzi SCA (Software Composition Analysis)
Narzędzia te identyfikują znane podatności CVE w zależnościach aplikacji.
- Przykładowe narzędzia:
- OWASP Dependency-Check
- Syft + Grype
- Snyk
- GitHub Dependabot
- Trivy
- npm audit / yarn audit
- pnpm audit
3. 🔗 Testowanie zależności transitive
- Sprawdź, czy aplikacja używa zależności, które same w sobie mają zależności (tzw. transitive dependencies).
- Przykład:
express➝body-parser➝qs➝ podatna wersjaqs.
4. Weryfikacja obrazów kontenerowych
- Testuj bazowe obrazy Docker:
FROM node:12(EOL)FROM ubuntu:18.04(brak wsparcia)
- Używaj
trivy,dockle,grypedo audytu kontenerów.
5. Ręczna inspekcja bibliotek frontendowych
- Otwórz
devtools → sources/scriptsi sprawdź wersje bibliotek np.jQuery,Bootstrap,Angular. - Sprawdź publicznie dostępne paczki CDN i ich wersje.
6. 🎯 Ocena osiągalności podatności
Dla każdego zgłoszenia ze skanera odpowiedz w raporcie:
- Czy podatna funkcja jest wywoływana przez aplikację? Narzędzia z analizą osiągalności (np.
govulncheckdla Go) na podstawie statycznego grafu wywołań oddzielają podatności w funkcjach osiągalnych z Twojego kodu od tych, których kod nie wywołuje. - Czy podatna biblioteka trafia na produkcję, czy jest tylko zależnością deweloperską?
- Czy dane od użytkownika mogą dotrzeć do podatnego miejsca?
Nieosiągalna podatność nadal jest długiem do spłacenia, ale nie powinna mieć w raporcie tego samego priorytetu co osiągalne RCE.
7. 📥 Pochodzenie pakietów i dependency confusion
- Sprawdź konfigurację menedżerów pakietów:
.npmrc,pip.conf,PIP_EXTRA_INDEX_URL,nuget.config, ustawienia repozytoriów w Maven/Gradle. - Szukaj mieszania indeksów prywatnych i publicznych. Dokumentacja pip wprost ostrzega:
--extra-index-urlnie ustala priorytetu źródeł — pip wybiera najlepiej pasującą wersję z dowolnego indeksu. Jeśli nazwa prywatnego pakietu jest wolna w publicznym indeksie, napastnik może tam opublikować pakiet o tej nazwie z wyższym numerem wersji. - Sprawdź, czy nazwy wewnętrznych pakietów są zarezerwowane w publicznych rejestrach (np. przez scope
@firma/w npm). - Zweryfikuj, czy lockfile zawiera skróty integralności (
integritywpackage-lock.json,--require-hashesw pip) i czy CI instaluje zależności z lockfile (npm cizamiastnpm install).
8. 🏗️ Przegląd pipeline CI/CD
Pipeline łączy prawo zapisu do repozytorium z dostępem do produkcji, więc każde jego wejście jest potencjalną ścieżką na produkcję. Sprawdź:
- kto może zmienić definicję pipeline'u i czy taka zmiana wymaga przeglądu,
- czy jedna osoba może wypchnąć kod na produkcję bez akceptacji drugiej (OWASP: brak separation of duty),
- czy sekrety są ograniczone do środowiska i niedostępne dla buildów z forków lub gałęzi bez przeglądu,
- czy akcje i obrazy zewnętrzne są przypięte do konkretnej wersji (najlepiej skrótu), a nie do zmiennego tagu,
- czy artefakty są podpisane, mają udokumentowane pochodzenie (provenance) i są promowane między środowiskami zamiast budowania od nowa,
- czy w logach pipeline'u da się wykryć modyfikację (tamper-evident).
9. 🧑💻 Zasoby poza aplikacją
OWASP zalicza do łańcucha dostaw także: rozszerzenia IDE, repozytoria obrazów i artefaktów, rejestry kontenerów, integracje SaaS i infrastrukturę jako kod. W teście aplikacji zwykle nie masz do nich dostępu — jeśli tak, zapisz to w raporcie jako ograniczenie zakresu, a nie jako brak problemów.
✅ Tipy testerskie
- Skorzystaj z narzędzi CI/CD (np. GitHub Actions, GitLab CI) do zautomatyzowanego skanowania zależności.
- Sprawdzaj daty publikacji ostatnich wersji – jeśli brak update’ów >12 miesięcy, rozważ zmianę komponentu.
- Zgłaszaj błędy do zespołu dev i proponuj update z changelogiem.
W kolejnym podrozdziale: Weryfikacja konfiguracji aplikacji i serwera