Chaque utilisateur peut accorder un accès r-command sans mot de passe en listant des paires host user de confiance dans son fichier ~/.rhosts ; une connexion correspondante est acceptée sans mot de passe. L'usage offensif est de créer ou d'étendre cette confiance. Si un attaquant peut écrire dans le .rhosts d'un utilisateur cible, via une vulnérabilité d'écriture de fichier, un répertoire home accessible en écriture (couramment via NFS), ou un point d'ancrage existant en tant qu'un autre utilisateur, il ajoute une entrée faisant confiance à son propre hôte et nom d'utilisateur, puis se connecte en rsh/rlogin en tant que cible sans identifiant. L'entrée joker + + fait confiance à tout hôte et tout utilisateur, transformant le compte en porte ouverte. Cela sert aussi de persistance.
# plant trust in the target user's .rhosts (requires a write to their home)
echo '+ +' >> /mnt/nfs-home/victim/.rhosts # trust everyone (open door)
echo 'attacker-host attacker-user' >> ~victim/.rhosts # trust a specific identity
# then log in / run commands with no password
rlogin -l victim <target>
rsh -l victim <target> id
Notes d'exploitation#
- La condition préalable est une écriture dans le
.rhostsde la cible ; associez-la à toute primitive d'écriture dans le répertoire home (une écriture par usurpation d'UID NFS, un partage accessible en écriture, ou un point d'ancrage), ce qui est précisément pourquoi les répertoires home accessibles en écriture sont dangereux avec les r-commands activées. + +est l'entrée maximale (tout hôte, tout utilisateur) ; une entrée cibléehost userest plus furtive.- C'est à la fois accès et persistance : la confiance plantée survit et accorde une ré-entrée sans mot de passe jusqu'à ce que le fichier soit nettoyé.
- Le même mécanisme
.rhostssert rsh, rlogin et rexec ; voir écriture rhosts pour la technique d'écriture dans la vue abus de confiance.