Tutoriel

OpenSSH 10.6p2 : contournement du mot de passe sous Alpine

Sécurité & Monitoring9 min de lecture8 étapes

Le 5 novembre 2026, OpenSSH 10.6p2 a corrigé un contournement de l'authentification par mot de passe qui touche les systèmes Linux sous musl dont `sshd` est compilé sans PAM, à commencer par Alpine. Un mot de passe de 257 à 1024 octets suffit pour entrer sur un compte qui n'en a pas, si un autre compte de la machine en a un. Les systèmes Debian, Ubuntu et AlmaLinux ne sont pas concernés. Voici les cinq conditions, la procédure de vérification, les paquets corrigés par branche d'Alpine et les traces à chercher dans les journaux, y compris dans vos conteneurs et vos images.

Sommaire· Ce que disent OpenSSH et Alpine, et ce qu'ils ne disent pas1/11
  1. 01Ce que disent OpenSSH et Alpine, et ce qu'ils ne disent pas
  2. 02Les cinq conditions, toutes nécessaires
  3. 03Pourquoi un mot de passe de 257 octets suffit
  4. 04Qui est concerné, qui ne l'est pas
  5. 05« Je suis sur Debian ou Ubuntu : est-ce que ça me touche ? »
  6. 06Vérifier votre exposition, puis corriger
  7. 07Les paquets corrigés par branche d'Alpine
  8. 08Chercher des traces avant de conclure que tout va bien
  9. 09Dépannage : ce que vous risquez de voir en appliquant le correctif
  10. 10Messages et remèdes
  11. 11Ce que cette faille dit de votre parc

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.
  • sshd sans PAM — le paquet openssh-server d'Alpine est compilé sans PAM ; openssh-server-pam avec UsePAM no l'est aussi. Avec UsePAM 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'utilisateur alpine des 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

ConfigurationConcerné ?Pourquoi
Alpine, `openssh-server`, mots de passe activés, un compte à `*` et un compte à `$6$`OuiLes cinq conditions sont réunies
Alpine, `openssh-server-pam` avec `UsePAM yes`NonL'authentification passe par PAM, pas par `crypt()` dans `sshd`
Alpine avec `PasswordAuthentication no`NonAucune authentification par mot de passe n'est tentée
Debian, Ubuntu, AlmaLinux, Rocky (glibc)NonLa comparaison ne reçoit pas la valeur d'erreur `*`
Conteneur Alpine sans `sshd`NonAucun 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éfiniPas au premier démarrageL'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

  1. Confirmer que le système est sous musl

    Lancez ls /lib/ld-musl* ou ldd --version 2>&1 | head -1. Sur Alpine, la réponse mentionne musl. Sur glibc, rien à faire pour cette faille.

  2. Relever la version d'OpenSSH et la variante PAM

    apk info -vv | grep '^openssh' liste les paquets installés. Notez si openssh-server-pam est présent, puis vérifiez UsePAM dans /etc/ssh/sshd_config.

  3. Lire la configuration réellement appliquée

    sshd -T | grep -i -E 'passwordauthentication|usepam|permitrootlogin' affiche les valeurs effectives, celles des blocs Match et des fichiers inclus comprises. Une ligne lue dans le fichier ne remplace pas ce contrôle.

  4. Lister les comptes à `*` et les comptes à vrai mot de passe

    awk -F: '$2=="*" {print $1}' /etc/shadow donne les comptes sans mot de passe ; awk -F: '$2 ~ /^\$[56]\$/ {print $1}' /etc/shadow donne ceux qui ont un hachage. Si les deux listes ne sont pas vides, les conditions 4 et 5 sont remplies.

  5. Mettre à jour le paquet

    apk upgrade -U -a installe 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.

  6. 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.

  7. Contrôler le résultat

    Relisez apk info -vv | grep '^openssh', puis sshd -T | grep -i passwordauthentication. Ensuite, ouvrez une connexion par clé depuis un autre poste pour vérifier que l'accès fonctionne.

  8. 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

BranchePaquet openssh corrigéVersion de la branche
edge10.6_p2-r0—
3.2410.3_p1-r23.24.4
3.2310.2_p1-r13.23.8
3.2210.0_p1-r113.22.8
3.219.9_p2-r13.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_keys du compte (droits 600, dossier 700), puis relisez sshd -T | grep -i pubkeyauthentication. Ne fermez pas la session d'origine avant d'avoir une seconde connexion qui fonctionne.
  • Bad configuration option suivi 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 -t la 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 avec ssh-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.

Un serveur dont vous maîtrisez les accès

Sur un VPS ServOrbit, vous avez l'accès root, le choix du système et la main sur la configuration SSH : clés, mots de passe désactivés, mises à jour à votre rythme.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet