Ce que disent OpenSSH et Alpine, et ce qu'ils ne disent pas
OpenSSH 10.6p2 a été publiée le 5 novembre 2026. Ses notes de version annoncent la correction d'un contournement de l'authentification par mot de passe, exploitable par sshd, sur certains systèmes Linux compilés sans PAM. Le même jour, Alpine Linux a publié un avis qui détaille le mécanisme, les conditions et les paquets corrigés. La faille a été signalée par Özgün Kültekin, de Wakefield.
Deux précisions utiles avant d'agir. D'abord, aucun identifiant CVE n'avait été attribué à la date de l'avis d'Alpine ; certains articles de presse en citent un, nous ne le reprenons pas faute de source primaire. Ensuite, les mainteneurs d'OpenSSH considèrent que la cause racine se trouve hors de sshd et ont contourné le problème dans sshd : le correctif est donc dans le paquet OpenSSH, pas dans la bibliothèque C. Au moment où nous écrivons, aucun rapport public d'exploitation n'est connu de nous, mais le détail technique est public : partez du principe que des scans suivront.
Les cinq conditions, toutes nécessaires
- Une bibliothèque C musl — c'est le cas d'Alpine, et d'autres systèmes embarqués qui utilisent musl, comme OpenWrt. Debian, Ubuntu, Fedora et AlmaLinux utilisent glibc et ne sont pas concernés.
sshdsans PAM — le paquetopenssh-serverd'Alpine est compilé sans PAM ;openssh-server-pamavecUsePAM nol'est aussi. AvecUsePAM yes, vous n'êtes pas concerné.PasswordAuthentication yes— c'est la valeur par défaut d'OpenSSH. Si vous l'avez passée àno, la faille n'est pas atteignable.- Un compte dont le champ mot de passe vaut
*— un utilisateur créé sans mot de passe pour une connexion par clé, un utilisateur d'annuaire géré par musl-nscd, ou l'utilisateuralpinedes images cloud officielles. - Au moins un autre compte avec un vrai mot de passe (un hachage
$5$ou$6$) — un seul suffit à exposer tous les comptes sans mot de passe.
Pourquoi un mot de passe de 257 octets suffit
Sans PAM, sshd hache le mot de passe saisi avec crypt() et compare le résultat au champ stocké dans /etc/shadow. Pour les comptes dont le champ est trop court pour contenir un sel, sshd emprunte celui d'un autre compte, afin de ne pas révéler par le temps de réponse qu'un nom d'utilisateur n'a pas de mot de passe.
Sur musl, crypt() renvoie la chaîne * comme valeur d'erreur quand la clé dépasse 256 octets. Or * est aussi, dans /etc/shadow, la valeur d'un compte sans mot de passe. La comparaison réussit : la connexion passe, sans que personne ait deviné quoi que ce soit. L'avis d'Alpine donne la fenêtre exploitable : un mot de passe de 257 à 1024 octets. Ce n'est ni un défaut cryptographique ni une corruption de mémoire, c'est une erreur de logique : une valeur d'erreur prise pour un résultat.
Qui est concerné, qui ne l'est pas
Faites défiler le tableau
| Configuration | Concerné ? | Pourquoi |
|---|---|---|
| Alpine, `openssh-server`, mots de passe activés, un compte à `*` et un compte à `$6$` | Oui | Les cinq conditions sont réunies |
| Alpine, `openssh-server-pam` avec `UsePAM yes` | Non | L'authentification passe par PAM, pas par `crypt()` dans `sshd` |
| Alpine avec `PasswordAuthentication no` | Non | Aucune authentification par mot de passe n'est tentée |
| Debian, Ubuntu, AlmaLinux, Rocky (glibc) | Non | La comparaison ne reçoit pas la valeur d'erreur `*` |
| Conteneur Alpine sans `sshd` | Non | Aucun service SSH à attaquer |
| Compte verrouillé avec `!` au lieu de `*` | Non pour ce compte | `!` ne correspond pas à la valeur d'erreur |
| Image cloud Alpine officielle, aucun mot de passe défini | Pas au premier démarrage | L'avis la dit exploitable dès qu'un hachage `$6$` apparaît, par exemple un mot de passe défini à la console |
« Je suis sur Debian ou Ubuntu : est-ce que ça me touche ? »
Non, pas pour cette faille : elle exige musl. L'objection mérite pourtant d'être posée, parce que la question utile pour un parc est ailleurs : où trouve-t-on de l'Alpine sans l'avoir choisi ? Une image de conteneur qui embarque un sshd pour le dépannage, une appliance réseau, un routeur sous OpenWrt, une image construite avec Buildroot ou Yocto : tous peuvent reposer sur musl, selon la manière dont ils ont été construits. Sur un VPS à système Debian ou Ubuntu, l'exposition vient d'un conteneur Alpine à sshd que vous y exécutez, pas du système hôte.
Un inventaire tient en deux commandes par machine : ls /lib/ld-musl* indique si le système utilise musl, et ps aux | grep sshd indique si un service SSH tourne. Faites-le aussi dans vos conteneurs, car une image reconstruite l'an dernier peut encore embarquer l'ancien paquet.
Vérifier votre exposition, puis corriger
Confirmer que le système est sous musl
Lancez
ls /lib/ld-musl*ouldd --version 2>&1 | head -1. Sur Alpine, la réponse mentionne musl. Sur glibc, rien à faire pour cette faille.Relever la version d'OpenSSH et la variante PAM
apk info -vv | grep '^openssh'liste les paquets installés. Notez siopenssh-server-pamest présent, puis vérifiezUsePAMdans/etc/ssh/sshd_config.Lire la configuration réellement appliquée
sshd -T | grep -i -E 'passwordauthentication|usepam|permitrootlogin'affiche les valeurs effectives, celles des blocsMatchet des fichiers inclus comprises. Une ligne lue dans le fichier ne remplace pas ce contrôle.Lister les comptes à `*` et les comptes à vrai mot de passe
awk -F: '$2=="*" {print $1}' /etc/shadowdonne les comptes sans mot de passe ;awk -F: '$2 ~ /^\$[56]\$/ {print $1}' /etc/shadowdonne ceux qui ont un hachage. Si les deux listes ne sont pas vides, les conditions 4 et 5 sont remplies.Mettre à jour le paquet
apk upgrade -U -ainstalle la version corrigée. Alpine a publié des paquets corrigés pour toutes ses branches, jusqu'à la 3.16, y compris celles qui ne sont plus supportées.Redémarrer le service, sans quoi rien n'est corrigé
rc-service sshd restart. La mise à jour du paquet ne remplace pas le démon qui tourne : tant qu'il n'est pas redémarré, l'ancien code répond. Gardez une session ouverte pendant le redémarrage et testez une seconde connexion avant de la fermer.Contrôler le résultat
Relisez
apk info -vv | grep '^openssh', puissshd -T | grep -i passwordauthentication. Ensuite, ouvrez une connexion par clé depuis un autre poste pour vérifier que l'accès fonctionne.Reconstruire les images
Une image de conteneur ou une image de VM ne se corrige pas en place : reconstruisez-la depuis une base corrigée, puis redéployez-la. Notez la date du correctif dans le dossier de l'environnement.
Les paquets corrigés par branche d'Alpine
Faites défiler le tableau
| Branche | Paquet openssh corrigé | Version de la branche |
|---|---|---|
| edge | 10.6_p2-r0 | — |
| 3.24 | 10.3_p1-r2 | 3.24.4 |
| 3.23 | 10.2_p1-r1 | 3.23.8 |
| 3.22 | 10.0_p1-r11 | 3.22.8 |
| 3.21 | 9.9_p2-r1 | 3.21.10 |
| 3.20 et plus anciennes (jusqu'à 3.16) | 9.7_p1-r6 (3.20) ; 9.0_p1-r6 (3.16) | Branches hors support |
Chercher des traces avant de conclure que tout va bien
Un correctif supprime la faille ; il n'efface pas ce qu'un attaquant a fait avant. L'avis d'Alpine recommande de chercher, dans /var/log/messages, les lignes Accepted password for qui concernent des comptes censés ne pas avoir de mot de passe : alpine, root ou un utilisateur réservé aux connexions par clé. Une telle ligne est un indice fort, puisque ces comptes ne devraient jamais se connecter par mot de passe.
Pour les comptes qui apparaissent, vérifiez ensuite l'usage de doas, les utilisateurs créés récemment, les fichiers modifiés et le contenu de chaque authorized_keys. L'avis ne laisse aucun doute sur la conduite à tenir : si vous ne pouvez pas écarter une connexion, traitez la machine comme compromise, reconstruisez-la et renouvelez les secrets qu'elle contenait. Sur les images cloud officielles, le risque est plus élevé : l'utilisateur alpine y dispose de doas sans mot de passe, ce qui permet de passer root une fois entré.
Vous ne pouvez pas mettre à jour tout de suite ? Désactivez l'authentification par mot de passe, après avoir vérifié qu'une connexion par clé fonctionne et en gardant la session actuelle ouverte. Alpine propose un fichier dans /etc/ssh/sshd_config.d/ contenant PasswordAuthentication no (le répertoire est lu par défaut depuis la 3.19), à condition qu'aucune ligne PasswordAuthentication yes ne subsiste dans un bloc Match. Terminez par sshd -t, un redémarrage, puis sshd -T | grep -i passwordauthentication, qui doit afficher passwordauthentication no. Pour annuler, supprimez ce fichier.
Dépannage : ce que vous risquez de voir en appliquant le correctif
Les messages ci-dessous sont ceux d'OpenSSH ; ils apparaissent côté client dans le terminal, côté serveur dans le journal du service.
Messages et remèdes
Permission denied (publickey).— après avoir coupé les mots de passe, votre clé n'est pas acceptée. Gardez la session ouverte, vérifiez~/.ssh/authorized_keysdu compte (droits600, dossier700), puis relisezsshd -T | grep -i pubkeyauthentication. Ne fermez pas la session d'origine avant d'avoir une seconde connexion qui fonctionne.Bad configuration optionsuivi d'un nom, avec un numéro de ligne de/etc/ssh/sshd_config— une faute de frappe dans le fichier ou dans le fichier inclus.sshd -tla signale avant le redémarrage : ne redémarrez jamais sans ce contrôle.sshd: no hostkeys available -- exiting.— les clés d'hôte sont absentes, par exemple dans une image où elles n'ont pas été générées. Générez-les avecssh-keygen -A, puis relancez le service.- Le démon répond toujours avec l'ancienne version — vous avez mis à jour le paquet sans redémarrer.
rc-service sshd restart, puis relisez la version annoncée à la connexion.
Ce que cette faille dit de votre parc
Elle ne vient pas d'une mauvaise pratique spectaculaire : un compte sans mot de passe, un autre avec un mot de passe, une valeur par défaut. Chacun de ces choix est courant, et c'est leur combinaison sur un système peu fréquent qui crée l'exposition. La réponse durable est la même qu'avant la faille : sur tout serveur joignable depuis Internet, authentifiez-vous par clé, désactivez les mots de passe, et sachez quelles images et quels conteneurs embarquent un sshd.
Si vous avez déjà durci vos accès, cette alerte se règle en dix minutes par machine. Sinon, elle est l'occasion de le faire : la procédure complète est décrite dans notre guide de premier accès SSH, et la mise à jour d'OpenSSH 10.6 sans se couper l'accès l'est dans l'article consacré à cette version. Un VPS ServOrbit vous donne un accès root et le choix du système, ce qui vous laisse la maîtrise de ces paramètres.