Skip to content

Conversation

@gardyjam
Copy link

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.

[...]
2025-11-21T16:50:57.546129687Z 2025-11-21 16:50:57.545  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 2 
ms
2025-11-21T16:52:44.534895635Z 2025-11-21 16:52:44.455  INFO 1 --- [nio-8080-exec-6] com.example.thymeleaf.entity.Student     : Created user Student{id='772b366f-cbc2-4ce2-a7c1-293c5848ed07', name='Name', email='email@gmail.com', birthday=2000-01-01, createdAt=2025-11-21T16:52:44.455276, updatedAt=null, address=Address{id='null', zipCode='11111-222', street='Street', number='1', complement='2', district='District', city='City', state='State', createdAt=null, updatedAt=null}}
2025-11-21T16:55:37.350684834Z 2025-11-21 16:55:37.347  INFO 1 --- [nio-8080-exec-2] com.example.thymeleaf.entity.Student     : Created user Student{id='d37db02e-9d15-47e7-846c-538f072e776f', name='monika', email='abc@com', birthday=2002-09-09, createdAt=2025-11-21T16:55:37.347852, updatedAt=null, address=Address{id='null', zipCode='33333-444', street='Ulica ', number='28', complement='94', district='Mokotow', city='Warsaw', state='Mazowieckie', createdAt=null, updatedAt=null}}
2025-11-21T16:56:52.086996432Z 2025-11-21 16:56:52.085  INFO 1 --- 
[...]

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.

@Transient
    private static final Logger logger = LoggerFactory.getLogger(Student.class);

...

@PrePersist
    private void prePersist() {
        this.id = UUID.randomUUID().toString();
        this.createdAt = LocalDateTime.now();
        logger.info("Created user {}", this);
    }

    @PreUpdate
    private void preUpdate() {
        this.updatedAt = LocalDateTime.now();
    }

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 "*":

logger.info("Created user {}",
                this.getName().replaceAll(".", "*") + " " + this.getEmail().replaceAll(".", "*") + " " +
                        this.getBirthday().toString().replaceAll(".", "*") + " "
                        + this.getAddress().toString().replaceAll(".", "*"));

Jest to najprostsze rozwiązanie tego problemu, w tym przypadku wystarczające. Daje oczekiwany efekt, czyli ukryte dane użytkownika:

[...]
2025-11-21 19:32:32.590  INFO 1 --- [nio-8080-exec-7] com.example.thymeleaf.entity.Student     : Created user **** *************** ********** *********************************************************************************************************************************************************************
[...]

Zadanie 2 - weryfikacja wycieku sekretów

Gitleaks zasygnalizował 3 wycieki sekretów:

Finding:     -----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBAKj34GkxFhD90vcNLYLInFEX6Ppy1tPf9Cnzj4p4WGeKLs1Pt8QuKUp...
[...]
Link:        https://github.com/gardyjam/task2/blob/bc17b7ddc46f46fff175aed55d68e11bb48166cc/deployment.key#L1
[...]

Finding:     -----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBAKj34GkxFhD90vcNLYLInFEX6Ppy1tPf9Cnzj4p4WGeKLs1Pt8QuKUp...
[...]
Link:        https://github.com/gardyjam/task2/blob/de9d7b8cb63bd7ae741ec5c9e23891b71709bc28/deployment2.key#L1
[...]

Finding:     "private_key": "-----BEGIN PRIVATE KEY-----\nlRsGbRO/1A5LiQHjuR5SASDASDAiSMNeOYqna2R+HEalBoyISASDASD1Tgkj\n4CC02Uux+...\n",
[...]
Link:        https://github.com/gardyjam/task2/blob/bc17b7ddc46f46fff175aed55d68e11bb48166cc/awscredentials.json#L5
[...]

8:01PM INF 5 commits scanned.
8:01PM INF scanned ~21991492 bytes (21.99 MB) in 55.2s
8:01PM WRN leaks found: 3

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.

Dependency Vulnerability IDs Package Highest Severity CVE Count Confidence Evidence Count
minimist:0.0.8 - pkg:npm/minimist@0.0.8 CRITICAL 2 - 3

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant