La faille ici réside dans la spécification IPMI 2.0 elle-même, et non dans une implémentation donnée. La poignée de main RAKP (RMCP+ Authenticated Key-Exchange Protocol) fait que le BMC renvoie, dans le message RAKP 2, un HMAC salé calculé sur le mot de passe de l'utilisateur demandé, avant que le client n'ait rien prouvé. Ainsi, un attaquant qui initie l'échange pour un nom d'utilisateur reçoit un hachage du mot de passe de ce compte et le casse hors ligne. Comme cela est imposé par la spécification, pratiquement tout BMC parlant IPMI 2.0 est affecté : un attaquant non authentifié récupère un hachage de mot de passe cassable pour root et tout autre compte, et les mots de passe de BMC faibles (courants) tombent rapidement.
# retrieve the RAKP hash for a user and crack it offline
# Metasploit module automates the RAKP exchange and outputs a hash
# auxiliary/scanner/ipmi/ipmi_dumphashes (RHOSTS, USER_FILE)
# the output is a crackable format:
# <user>:<16-byte salt/exchange data>:<HMAC> -> feed to hashcat mode 7300 (IPMI2 RAKP)
hashcat -m 7300 ipmi_rakp.hashes wordlist.txt
Notes d'exploitation#
- C'est pré-authentification et au niveau de la spécification, donc cela s'applique à presque tous les BMC IPMI 2.0 ; l'attaquant n'a besoin que de connaître ou de deviner les noms d'utilisateur (
root,ADMIN,adminsont quasi universels) pour demander leurs hachages. - La valeur récupérée est un HMAC salé cassable hors ligne (hashcat mode 7300) ; les mots de passe de BMC sont fréquemment des défauts ou faibles, de sorte que le cassage réussit couramment.
- Un mot de passe de BMC cassé donne le contrôle administratif authentifié du contrôleur (alimentation, console, média virtuel), le même impact que le contournement cipher 0 mais via un identifiant récupéré.
- Énumérez d'abord les noms d'utilisateur (les défauts et tout nom divulgué) ; combinez avec les identifiants par défaut des BMC (le mot de passe cassé est de toute façon souvent un défaut) et le cipher 0.