# Raport z testów bezpieczeństwa

## Metadane raportu

| Pole | Wartość |
|---|---|
| Nazwa projektu / systemu | Test penetracyjny – środowisko laboratoryjne (maszyna Nexus) |
| Adres IP hosta docelowego | 10.129.234.54 |
| Typ testów | Black-box, test penetracyjny aplikacji webowej i usług sieciowych |
| Zakres | Środowisko laboratoryjne platformy Hack The Box |
| Data przygotowania raportu | 2026-10-19 |
| Autor | slummer87 |

## 1. Wprowadzenie

Raport opisuje wyniki testu maszyny Nexus na platformie Hack The Box. Badanie objęło rekonesans hosta i subdomen, analizę repozytorium Gitea, panelu Krayin CRM oraz dostępnych usług systemowych.

Testujący uzyskał dostęp do panelu CRM dzięki hasłu znalezionemu w historii commitów Gitea. Funkcja wysyłania wiadomości z załącznikiem pozwoliła uruchomić plik PHP na serwerze i uzyskać powłokę jako `www-data`. Hasło z pliku `.env` umożliwiło następnie logowanie SSH na konto `jones`. Zidentyfikowano też działającą jako `root` usługę synchronizacji szablonów Gitea z możliwością directory traversal. Nie sprawdzono, czy ten trop prowadzi do eskalacji uprawnień.

## 2. Metodyka

Test przeprowadzono w następujących etapach:

1. Skanowanie pełnego zakresu portów TCP i identyfikacja wersji usług.
2. Enumeracja ścieżek oraz subdomen HTTP.
3. Przegląd znalezionych aplikacji, w tym repozytorium Gitea i panelu Krayin CRM.
4. Analiza historii commitów Gitea i wykorzystanie ujawnionego hasła do logowania.
5. Analiza żądania przesyłania załącznika i weryfikacja, czy przesłany skrypt PHP można uruchomić.
6. Rekonesans systemu po uzyskaniu powłoki `www-data`, w tym sprawdzenie plików konfiguracyjnych i dostępu SSH.
7. Sprawdzenie usługi synchronizacji szablonów Gitea. Testy zakończono przed wykorzystaniem rozpoznanej możliwości directory traversal.

## 3. Przebieg testów

### 3.1. Rekonesans hosta

Wykonano skan wszystkich portów TCP z detekcją wersji usług:

```bash
nmap -p- --open -sV 10.129.234.54
```

Parametry `-p-`, `--open` i `-sV` oznaczają odpowiednio skan pełnego zakresu portów TCP, wyświetlenie otwartych portów i próbę identyfikacji wersji usług.

```text
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.16
80/tcp open  http    nginx 1.24.0 (Ubuntu)
```

Serwer WWW przekierowywał na `nexus.htb`. Strona główna zawierała adres e-mail managera `j.matthew@nexus.htb`. Enumeracja ścieżek oraz subdomen ujawniła dodatkowe aplikacje, w tym Gitea i panel billingowy Krayin CRM. Ogłoszenie rekrutacyjne na jednej ze stron pomogło ustalić nazwy użytkowników.

### 3.2. Hasło w historii repozytorium Gitea

W repozytorium Gitea znaleziono między innymi pliki `.env` i `docker-compose.yml`. Przegląd historii commitów ujawnił hasło do bazy danych. To hasło wraz z adresem managera pozwoliło zalogować się do Krayin CRM.

### 3.3. Uruchomienie pliku PHP z formularza załączników

Po zalogowaniu do CRM przetestowano formularz wysyłania wiadomości e-mail z załącznikiem. Odpowiedź serwera po przesłaniu pliku zawierała jego pełną ścieżkę. Testujący przesłał skrypt PHP typu reverse shell, a następnie wywołał go pod wskazaną ścieżką. W rezultacie uzyskał powłokę jako `www-data`.

### 3.4. Dostęp SSH jako `jones`

Podczas przeglądu plików aplikacji w `/var/www` znaleziono plik `.env` z kolejnym hasłem. Hasło umożliwiło zalogowanie się przez SSH na konto `jones`. W katalogu domowym tego użytkownika znajdował się plik `user.txt`.

### 3.5. Usługa synchronizacji szablonów Gitea

Z konta `jones` sprawdzono działające usługi i ich konfigurację. Usługa synchronizacji szablonów Gitea działała jako `root`. Rozpoznano możliwość directory traversal, która mogłaby umożliwić dostęp do plików poza właściwym katalogiem. Nie uruchomiono exploitu ani nie potwierdzono eskalacji do `root`; ten element wymaga dalszej weryfikacji w ramach autoryzowanego testu.

## 4. Zidentyfikowane podatności

### 4.1. Ujawnienie hasła w historii commitów Gitea

| Parametr | Opis |
|---|---|
| **ID podatności** | VULN-001 |
| **Host/port** | Aplikacja Gitea na hoście 10.129.234.54 : 80/tcp |
| **Kategoria** | Ujawnienie danych uwierzytelniających w repozytorium; CWE-798: Use of Hard-coded Credentials |
| **Krytyczność** | **Wysoka (High)** |
| **Opis** | Historia commitów repozytorium zawierała hasło do bazy danych. Sekret pozostał dostępny mimo późniejszych zmian w plikach. Poświadczenie wykorzystano do zalogowania się do Krayin CRM. |
| **Dowód** | W historii commitów Gitea odnaleziono hasło, które w połączeniu z adresem e-mail managera pozwoliło uzyskać dostęp do panelu CRM. |
| **Wpływ** | Osoba mająca dostęp do repozytorium może pozyskać sekret i użyć go do logowania do powiązanych usług. W tym teście hasło umożliwiło dostęp do panelu CRM. |

### 4.2. Możliwość przesłania i uruchomienia pliku PHP w Krayin CRM

| Parametr | Opis |
|---|---|
| **ID podatności** | VULN-002 |
| **Host/port** | Panel Krayin CRM na hoście 10.129.234.54 : 80/tcp |
| **Kategoria** | Niebezpieczna obsługa przesyłanych plików; CWE-434: Unrestricted Upload of File with Dangerous Type |
| **Krytyczność** | **Krytyczna (Critical)** |
| **Opis** | Formularz załączników przyjmował plik PHP, a odpowiedź ujawniała jego ścieżkę na serwerze. Przesłany skrypt można było następnie wywołać, co dało powłokę w kontekście użytkownika `www-data`. |
| **Dowód** | Przesłano skrypt PHP typu reverse shell i uruchomiono go pod ścieżką zwróconą przez serwer. Testujący uzyskał powłokę jako `www-data`. |
| **Wpływ** | Zdalne wykonanie kodu z uprawnieniami procesu aplikacji. W tym teście dostęp do systemu umożliwił dalszy rekonesans plików aplikacji i znalezienie kolejnego hasła. |

### 4.3. Hasło w pliku `.env` umożliwiające logowanie SSH

| Parametr | Opis |
|---|---|
| **ID podatności** | VULN-003 |
| **Host/port** | Aplikacja na hoście 10.129.234.54; SSH 22/tcp |
| **Kategoria** | Niewłaściwe przechowywanie poświadczeń; CWE-522: Insufficiently Protected Credentials |
| **Krytyczność** | **Wysoka (High)** |
| **Opis** | Wśród plików aplikacji w `/var/www` znaleziono `.env` zawierający hasło. Hasło umożliwiło logowanie przez SSH na konto `jones`, co wskazuje, że sekret był używany także do dostępu systemowego. |
| **Dowód** | Po odczytaniu hasła z `.env` zalogowano się przez SSH jako `jones`; w katalogu domowym znaleziono `user.txt`. |
| **Wpływ** | Użytkownik, który uzyska dostęp do plików aplikacji, może wykorzystać zapisane w nich poświadczenia do uzyskania dostępu do systemu operacyjnego. |

### 4.4. Ujawnianie informacji diagnostycznych przez panel CRM

| Parametr | Opis |
|---|---|
| **ID podatności** | VULN-004 |
| **Host/port** | Panel Krayin CRM na hoście 10.129.234.54 : 80/tcp |
| **Kategoria** | Ujawnienie informacji; CWE-200: Exposure of Sensitive Information to an Unauthorized Actor |
| **Krytyczność** | **Niska (Low)** |
| **Opis** | Na panelu był widoczny pasek debugowania, co wskazuje na udostępnienie informacji diagnostycznych w aplikacji. Notatki z testu nie opisują szczegółowo danych widocznych w pasku, dlatego wpływ tej ekspozycji wymaga osobnej weryfikacji. |
| **Dowód** | Pasek debugowania był widoczny po otwarciu panelu Krayin CRM. |
| **Wpływ** | Informacje diagnostyczne mogą ujawniać szczegóły działania aplikacji. Na podstawie dostępnych notatek nie można określić, jakie konkretne dane były dostępne ani czy umożliwiały dalsze działania. |

## 5. Obserwacja wymagająca dalszej weryfikacji

Usługa synchronizacji szablonów Gitea działała z uprawnieniami `root`, a testujący rozpoznał możliwość directory traversal. Nie przeprowadzono eksploatacji, więc nie potwierdzono, czy błąd pozwalał na odczyt plików, zapis plików ani eskalację uprawnień. Przed przypisaniem tej obserwacji poziomu ryzyka należy bezpiecznie potwierdzić jej wpływ oraz sprawdzić, czy usługę można uruchomić z konta o ograniczonych uprawnieniach.

## 6. Rekomendacje

1. **Usuń sekrety z repozytorium i unieważnij ujawnione hasła.** Zmień hasło do bazy danych i wszystkie poświadczenia, które mogły być z nim powiązane. Ogranicz dostęp do repozytorium i skanuj historię commitów pod kątem sekretów. Samo usunięcie hasła z bieżącej wersji pliku nie usuwa go z historii.
2. **Zabezpiecz obsługę załączników.** Dopuść wyłącznie wymagane typy plików, weryfikuj ich zawartość po stronie serwera i zapisuj je poza katalogiem serwowanym przez WWW. Uniemożliw wykonanie przesłanych plików i nie ujawniaj ich ścieżek systemowych w odpowiedziach.
3. **Nie przechowuj haseł systemowych w plikach aplikacji.** Ogranicz uprawnienia do plików konfiguracyjnych, używaj dedykowanych sekretów dla aplikacji i zmień hasło konta `jones`. Nie używaj tych samych haseł w aplikacji i usługach systemowych.
4. **Wyłącz pasek debugowania w środowisku dostępnym przez sieć.** W konfiguracji produkcyjnej ustaw tryb debugowania na wyłączony i sprawdź, czy odpowiedzi aplikacji nie ujawniają danych diagnostycznych.
5. **Ogranicz uprawnienia usługi synchronizacji Gitea.** Uruchamiaj ją jako dedykowany użytkownik bez uprawnień administratora. Zaktualizuj komponent i zweryfikuj obsługę ścieżek, w tym możliwość odwołania się do plików poza katalogiem synchronizacji.

## 7. Podsumowanie

Test wykazał, że poświadczenie zapisane w historii Gitea umożliwiało dostęp do Krayin CRM. W panelu dało się przesłać i uruchomić skrypt PHP, co zapewniło powłokę `www-data`. Hasło znalezione później w pliku `.env` pozwoliło zalogować się przez SSH jako `jones`.

Najpoważniejszym potwierdzonym problemem jest możliwość zdalnego uruchomienia pliku PHP przez funkcję załączników. Łańcuch dostępu do systemu wzmacniały sekrety dostępne w repozytorium i plikach aplikacji. Możliwość directory traversal w usłudze działającej jako `root` wymaga dalszej weryfikacji; w trakcie testu nie uzyskano powłoki roota.

## 8. Podsumowanie klasyfikacji podatności

| ID | Nazwa podatności | Krytyczność |
|---|---|---|
| VULN-001 | Hasło do usługi ujawnione w historii commitów Gitea | Wysoka |
| VULN-002 | Możliwość przesłania i uruchomienia pliku PHP w Krayin CRM | Krytyczna |
| VULN-003 | Hasło w pliku `.env` umożliwiające logowanie SSH | Wysoka |
| VULN-004 | Ujawnianie informacji diagnostycznych przez panel CRM | Niska |

---
*Raport przygotowano na podstawie testów przeprowadzonych w środowisku laboratoryjnym Hack The Box. Directory traversal w usłudze synchronizacji Gitea pozostało niezweryfikowane i nie jest ujęte jako potwierdzona podatność.*
