Monika Gardyjas - Laboratorium 2 TBO #42
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Laboratorium 2 - Security By Design
Wybrałam aplikację w wersji Java.
Zadanie 1 - Weryfikacja wycieku wrażliwych danych
Po przeklikaniu całej aplikacji, utworzeniu dwóch nowych profili studentów i edytowaniu jednego z nich przystąpiłam do sprawdzenia logów w terminalu.
Zauważyłam, że przy tworzeniu nowego profilu, wszystkie jego szczegóły są widoczne w logach.
Na szczęście ten problem nie pojawia się przy edytowaniu profilu ani ponownym wejściu ze strony głównej do karty "Students".
Widząc w problematycznym logu "com.example.thymeleaf.entity.Student" od razu przeszłam do analizy kodu tej klasy i faktycznie znalazłam tam Logger, którym zapisywane są informacje profilu. Widać też, dlaczego ten problem nie wystąpił podczas edycji profilu - w funkcji za nią odpowiadającej nie znalazła się ta linia.
Aby naprawić wyciek wrażliwych danych, zachowując jednocześnie w logach informacje o zapisaniu nowego profilu, wystarczy zmienić tę linię na wykorzystującą prosty skrypt do zamiany znaków na "*":
Jest to najprostsze rozwiązanie tego problemu, w tym przypadku wystarczające. Daje oczekiwany efekt, czyli ukryte dane użytkownika:
Zadanie 2 - weryfikacja wycieku sekretów
Gitleaks zasygnalizował 3 wycieki sekretów:
Wyniki te świadczą o tym, że repozytorium zawiera tajne klucze prywatne RSA oraz klucz do AWS, które absolutnie nie powinny się tam znaleźć. Zostały one tam zamieszczone w commitach bc17b7d i de9d7b8.
Co ciekawe, w trakcie pracy nad aplikacją spring-thymeleaf-crud-example zauważyłam, że w metodzie showStudents kontrolera znajduje się nieużywana zmienna o nazwie "password", której gitleaks słusznie nie wskazał (byłoby to wtedy wykrycie fałszywie pozytywne).
Zadanie 3 - weryfikacja bezpieczeństwa bibliotek OpenSource wykorzystywanych w projekcie
Dokładny wynik audytu OWASP Dependency Check znajduje się w odpowiednim pliku zapisanym w repozytorium (Java/spring-thymeleaf-crud-example/dependency-check-report.html). Do analizy wybrałam pakiet o jednej z krytycznych podatności.
W pakiecie minimist@0.0.8 wykryto krytyczną podatność typu CWE-1321: Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution'). Sprawia to, że aplikacja jest podatna na Prototype Pollution (modyfikowanie prototypów obiektów i zdalne wykonanie kodu) w funkcji setKey() w klasie index.js, jeśli atakujący mają kontrolę nad argumentami przekazywanym do minimist. Podatność ta została znaleziona w pliku "/src/target/classes/static/vendors/jquery-mask/package-lock.json", natomiast ani w jquery-mask, ani w całym folderze "\src" nie istnieje plik index.js. Sprawia to, że prawdopodobieństwo wykorzystania tej podatności jest minimalne.
Mimo wszystko można tę podatność zniwelować uaktualniając minimist do wersji 0.2.1, 1.2.3 lub nowszej.